(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
j
bewegt den Cursor einenphysische LinieMit können Sie gj
einen Punkt nach unten gehenangezeigte Zeile.
Antwort2
Die vorhandenen Antworten treffen den Nagel auf den Kopf.
Ich wollte noch hinzufügen, dass j
/ k
und gj
/ gk
genau 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