web-dev-qa-db-ja.com

Vimの行内の空白以外の文字の先頭にカーソルを移動します

Vimで、カーソルを行内の非空白文字の先頭に移動する方法はありますか?たとえば、カーソルを下の2行目の「S」に移動するにはどうすればよいですか?

1行目
 2行目

問題がある場合は、主にMacVimを使用しますが、コンソールからも実行できるようにしたいと考えています。

ありがとう!

51
Joe Mornin

私が正しく理解している場合-:h ^から:

^ To the first non-blank character of the line.
  |exclusive| motion.

(空白文字かどうかに関係なく、最初に移動する0とは対照的です)

60
slhck

^を押す代わりに、_(アンダースコア)を押すと、カーソルが置かれている行の最初の空白以外の文字にジャンプできます。

+および-は、次の/前の行の最初の空白以外の文字にジャンプします。

(これらのコマンドはコマンドモードでのみ機能し、挿入モードでは機能しません。)

48
Ben

また、おそらく有用です:+と-は、それぞれカーソルを上または下に移動して、最初の非空白文字に移動します。

8
shmup

以下は.vimrcによる抜粋です
^[[1~ctrl+vHomeを押すと作成されます

"jump to first non-whitespace on line, jump to begining of line if already at first non-whitespace
map <Home> :call LineHome()<CR>:echo<CR>
imap <Home> <C-R>=LineHome()<CR>
map ^[[1~ :call LineHome()<CR>:echo<CR>
imap ^[[1~ <C-R>=LineHome()<CR>
function! LineHome()
  let x = col('.')
  execute "normal ^"
  if x == col('.')
    execute "normal 0"
  endif
  return ""
endfunction
4
Andrew Sohn

Andrew Sohnの答えを拡張して、この動作に0を使用したい場合は、次のようにラップします。

function! LineHome()
  let x = col('.')
  execute "normal ^"
  if x == col('.')
    unmap 0
    execute "normal 0"
    map 0 :call LineHome()<CR>:echo<CR>
  endif
  return ""
endfunction 
0
user2448373

0キーを^に再マップするだけです

〜/ .vimrcを編集します

set visualbell t_vb=
map 0 ^
0
Sunding Wei