Bewegen Sie den Cursor an den Anfang von Nicht-Leerzeichen in einer Zeile in Vim

49

Gibt es in Vim eine Möglichkeit, den Cursor an den Anfang von Nicht-Leerzeichen in einer Zeile zu bewegen? Wie kann ich zum Beispiel den Cursor auf das "S" in der zweiten Zeile darunter bewegen?

Erste Linie
    Zweite Reihe

Wenn es darauf ankommt, verwende ich hauptsächlich MacVim, aber ich möchte dies auch von der Konsole aus tun können.

Vielen Dank!

Joe Mornin
quelle

Antworten:

57

Wenn ich richtig verstehe - von :h ^:

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

(im Gegensatz zu 0, was Sie an den Anfang bringt, unabhängig von Leerzeichen oder nicht)

slhck
quelle
1
+1 zum 0Kommentar
Roy Truelove
47

Anstatt zu drücken ^, können Sie _(Unterstrich) drücken , um zum ersten Nicht-Leerzeichen in derselben Zeile zu springen, in der sich der Cursor befindet.

+und -springe zum ersten Nicht-Leerzeichen in der nächsten / vorherigen Zeile.

(Diese Befehle funktionieren nur im Befehlsmodus, nicht im Einfügemodus.)

Ben
quelle
8

Ebenfalls möglicherweise nützlich: + und - bewegen den Cursor nach oben bzw. unten zum ersten nicht leeren Zeichen.

jared
quelle
4

Unten sehen Sie einen Ausschnitt von .vimrc,
^[[1~der durch Drücken von ctrl+vund erstellt wirdHome

"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
Andrew Sohn
quelle
Danke, das habe ich gesucht. Dieses Verhalten ist heutzutage bei Redakteuren üblich (Atom / VSCode / Sublime, um nur einige zu nennen) und ich habe mich daran
gewöhnt
0

Erweitern Sie die Antwort von Andrew Sohn, wenn Sie 0 für dieses Verhalten verwenden möchten, schließen Sie es einfach so ab:

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 
user2448373
quelle
-1

Ich ordne nur die 0-Taste zu ^

Bearbeiten Sie Ihre ~ / .vimrc

set visualbell t_vb=
map 0 ^
Sunding Wei
quelle