![Ändern von Vim-Absatzsprungbefehlen in Zeilen oder Codeblöcke mit Leerzeichen](https://rvso.com/image/1313355/%C3%84ndern%20von%20Vim-Absatzsprungbefehlen%20in%20Zeilen%20oder%20Codebl%C3%B6cke%20mit%20Leerzeichen.png)
1) Mit den Befehlen { und } in vim kann ich zur vorherigen oder nächsten komplett leeren Zeile (oder zum Anfang oder Ende der Datei) springen. Wie ändere ich diese Befehle, um zur vorherigen oder nächsten Zeile zu springen, die komplett leer ist oder nur Leerzeichen enthält (oder zum Anfang oder Ende der Datei)?
2) Wie erstelle ich Befehle, um an den Anfang oder das Ende des aktuellen Codeblocks zu springen, der durch den aktuellen Einzug definiert ist? Ich möchte beispielsweise einfach von Zeile F zu Zeile D oder G (oder zu Zeile C oder H) wechseln:
A
B
C
D
E
F
G
H
I
Antwort1
Frage 1 scheint relativ einfach (und meine Antwort wahrscheinlich etwas naiv):
nnoremap } /^\s*$<CR>
nnoremap { ?^\s*$<CR>
Aber ich denke, Sie sollten eine andere Abkürzung finden.
Außerdem müssen Sie bereits gg
zur ersten Zeile des Puffers und G
zur letzten Zeile springen. Ist das nicht genug?
Ich weiß nicht, wie ich Frage 2 auf einfache Weise beantworten soll. Haben Sie versuchtvim-einrücken-objekt?
Antwort2
Durch die Kombination der tollen Tipps von Romainl und Garyjohn habe ich genau die Funktionalität erhalten, die ich für Teil 1 gesucht habe:
nnoremap <silent> { :call MyPrevParagraph()<CR>
nnoremap <silent> } :call MyNextParagraph()<CR>
function MyNextParagraph()
let myline = search('^\s*$', 'W')
if myline <= 0
execute 'normal! G$'
else
execute 'normal! '.myline.'G0'
endif
endfunction
function MyPrevParagraph()
let myline = search('^\s*$', 'bW')
if myline <= 0
execute 'normal! gg0'
else
execute 'normal! '.myline.'G0'
endif
endfunction