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


49

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

最初の行
    二行目

それが重要な場合、私は主にMacVimを使用しますが、コンソールからこれを実行できるようにもしたいと思います。

ありがとう!

回答:


58

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

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

0空白とは無関係に、先頭に移動するとは対照的)


1
0コメントの+1
Roy Truelove

47

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

+そして-、次/前の行の最初の非空白文字にジャンプします。

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


8

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


4

以下の.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

おかげで、これは私が探していたものです。この振る舞いは最近のエディター(Atom / VSCode / Sublimeなど)で一般的であり、私はそれに慣れてきました...
YoYoYonnY

0

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 

-1

0キーを再マッピングして^

〜/ .vimrcを編集します

set visualbell t_vb=
map 0 ^
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.