Vim的一大优势是object-select,可以快速处理单词,段落和各种分隔符中的内容。
例如,
vi{
将选择一对{}括号内的所有内容。
是否有任何与选择here document或heredoc相同的功能:
<<<HTML
....
....
HTML;
基于 ErichBSchulz的回答我想出了一个heredoc内部选择:
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
答案 0 :(得分:4)
为了选择heredoc,我通常将光标放在第一行,在 heredoc标识符上,然后按 V *
V 将开始一个行选择, * 将开始搜索,转到标识符的下一个匹配,即heredoc的结束...
答案 1 :(得分:2)
如果您已经在开头(<<''
),那么以空行终止的?<<^M^M
heredoc很容易:v}
从这里选择直到空行。
否则,在您的示例中,我能想到的最好的是v/^HTML
。
答案 2 :(得分:2)
有这个插件让你定义自己的文本对象。
http://www.vim.org/scripts/script.php?script_id=2100
我认为定义一个就好了,所以你可以说'yih'(在heredoc中猛拉),所以你不必明确地去开始。
注意我自己并没有愚弄过。
如果你只是想要一个视觉选择,你可以。
nnoremap <leader>ih ?HTML<cr>V/HTML<cr>
答案 3 :(得分:1)
考虑早期的帖子,并试图让他们更近一步。这不会是100%可靠的(即如果起始标签出现在heredoc中会破坏,但是会像:
?<<< "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
编辑:Ken已经改进了上面的顺序,所以我建议你使用他更好的键映射来进行'内部'heredoc选择:
nmap <F6> ?<<<<CR>w*kV?<<<<CR>j
(这是基于php风格的heredocs)