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!

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)


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.)


8

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


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

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 

-1

Ich ordne nur die 0-Taste zu ^

Bearbeiten Sie Ihre ~ / .vimrc

set visualbell t_vb=
map 0 ^
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.