Wie bewegen Sie sich innerhalb einer einzelnen Zeile nach oben, die in Vim umbrochen ist?

Wie bewegen Sie sich innerhalb einer einzelnen Zeile nach oben, die in Vim umbrochen ist?

Bildschirmfoto
(Klicken Sie auf das Bild, um es zu vergrößern)

Schauen Sie sich das Bild oben an, es ist eine Zeile, die eine riesige Liste deklariert. Nehmen wir nun an, mein Cursor befindet sich auf dem ersten Element 'i'und ich drücke 'j', dann geht der Cursor direkt zur Zeile, new_s=''aber was ich möchte, ist, dass der Cursor zum 's' des Wortes 'she'darunter geht'i'

Gibt es eine Möglichkeit, dies zu tun?

Antwort1

jbewegt den Cursor einenphysische LinieMit können Sie gjeinen Punkt nach unten gehenangezeigte Zeile.

Antwort2

Die vorhandenen Antworten treffen den Nagel auf den Kopf.

Ich wollte noch hinzufügen, dass j/ kund gj/ gkgenau gleich sind, wenn Sie mit nicht umbrochenem Text arbeiten. Daher sind die folgenden Zuordnungen ebenso harmlos (wenn Sie dies nicht tun :set wrap), wie sie nützlich sind (wenn Sie dies tun :set wrap):

nnoremap j gj
nnoremap k gk

Antwort3

Mir gefällt das Skript von hier: http://vim.wikia.com/wiki/Bewegen_des_Cursors_um_Anzeigelinien_beim_Umbrechen " Mapping, um Bewegungen auf einer Bildschirmzeile im Wrap-Modus auszuführen

Funktion! ScreenMovement(Bewegung),
  wenn &wrap && b:gmove == 'yes'
    returniere "g". a:Bewegung,
  sonst
    returniere a:Bewegung,
  endif,
endfunction
onoremap j ScreenMovement("j")
onoremap k ScreenMovement("k")
onoremap 0 ScreenMovement("0")
onoremap ^ ScreenMovement("^")
onoremap $ ScreenMovement("$")
nnoremap j ScreenMovement("j")
nnoremap k ScreenMovement("k")
nnoremap 0 ScreenMovement("0")
nnoremap ^ ScreenMovement("^")
nnoremap $ ScreenMovement("$")
vnoremap j ScreenMovement("j")
vnoremap k ScreenMovement("k")
vnoremap 0 ScreenMovement("0")
vnoremap ^ ScreenMovement("^")
vnoremap $ ScreenMovement("$")
vnoremap j ScreenMovement("j")
" Showbreak-
Funktion umschalten! TYShowBreak(),
  wenn &showbreak == ''
    setzen showbreak=>
  sonst
    setze showbreak=
  endif
endfunction
let b:gmove = "yes"
Funktion! TYToggleBreakMove()
  wenn existiert("b:gmove") und b:gmove == "yes"
    let b:gmove = "no"
  sonst
    lass b:gmove = "yes"
  endif
endfunction
nmap ,b TYShowBreak()
nmap ,bb TYToggleBreakMove()

Sie können dann ,b verwenden, um anzuzeigen, ob die Zeile umbrochen wird (das obige Beispiel verwendet das Zeichen '>'). Dann schaltet ,bb die Bildschirmbewegung aus, wenn Sie den Zeilenumbruch eingestellt haben

Zusätzlich habe ich das Wrapping auch in meinem VIMRC auf eine Bindung eingestellt:

"--- wrap toggle with f2 key---"
function! ToggleWrap()
set wrap!|set wrap?
endfunction

"F2 toggles wrap
nmap <f2> :call ToggleWrap()<CR>
vmap <F2> <C-C>:call ToggleWrap()<CR>
imap <F2> <C-O>:call ToggleWrap()<CR>i

Antwort4

Wenn Sie gj eingeben, bewegt sich der Cursor eine Zeile nach unten, gk bringt Sie eine Zeile nach oben. Ich nehme an, Sie befinden sich in einem normalen Konsolenfenster?

Prost

verwandte Informationen