Ist es möglich, Objekt: Wählen Sie eine heredoc oder „hier Dokument“ mit vim?
-
23-09-2019 - |
Frage
Einer von Vims großen Stärken ist objekt wählen , Angebot schnelle Manipulation von Inhalten innerhalb von Worten, Ziffern und verschiedenen Trennzeichen.
Beispiel:
vi{
wird alles wählen innerhalb eines Paares von {} Klammern.
Gibt es eine gleichwertige Funktionalität zur Auswahl eines hier dokumentieren oder heredoc:
<<<HTML
....
....
HTML;
Basierend auf ErichBSchulz Antwort kam ich mit dem Follow-up für einen heredoc Innen wählen:
nmap <F6> ?<<<<CR>w*kV?<<<<CR>j
?<<<<CR>w " find beginning tag (after <<<)
*k " find matching end tag and go up 1 line
V " enter visual mode
?<<<<CR>j " find beginning tag and go down 1 line
Lösung
Das Nachdenken über die früheren Beiträge und versuchen, sie einen Schritt näher zu nehmen. Dies würde nicht zu 100% zuverlässig (dh brechen wird, wenn der Start-Tag innerhalb des heredoc aber etwas geschieht wie:
?<<< "find begining
w " go to starting tag
* " find starting tag
v " enter visual mode (could use Upper V to do an 'ambientish' object select
n " find end tag
e " optional include end tag
Edit: Ken hat die Sequenz, wie oben verbessert, so dass ich schlage vor, Sie verwenden, um sein besseres Keymapping für einen ‚inneren‘ heredoc wählen:
nmap <F6> ?<<<<CR>w*kV?<<<<CR>j
(dies basiert auf PHP-Stil Heredocs)
Andere Tipps
Für die Auswahl heredoc ist stelle ich in der Regel um den Cursor in der ersten Zeile, über die heredoc Kennung und V *
V eine Zeile Auswahl starten und * wird eine Suche starten, um das nächste Spiel der Kennung gehen, das Ende des heredoc ...
Ein <<''
heredoc durch eine Leerzeile beendet ist einfach, wenn Sie bereits am Start sind (?<<^M^M
). v}
wählen von hier bis der leeren Zeile
Ansonsten in Ihrem Beispiel das Beste, was ich denken kann, ist v/^HTML
.
Es ist das Plugin, das läßt Sie Ihre eigenen Text-Objekte definieren.
http://www.vim.org/scripts/script.php ? script_id = 2100
Ich stelle mir vor, es wäre schön, einen zu definieren, so könnte man sagen ‚yih‘ (yank in heredoc), so dass Sie nicht explizit an den Start gehen.
Hinweis: Ich habe nicht mit diesem selbst täuschen herum.
Wenn Sie nur ein visuelles wählen Sie könnten.
nnoremap <leader>ih ?HTML<cr>V/HTML<cr>