是否可以用vim对象选择heredoc或“here document”?

时间:2010-02-26 18:29:36

标签: vim keyboard-shortcuts heredoc

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

4 个答案:

答案 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)