5

Vim 的一大优势是object-select,它提供了对单词、段落和各种分隔符内的内容的快速操作。

例如,

vi{

将选择一对 {} 大括号内的所有内容。

是否有任何等效功能可用于选择此处文档或 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

4 回答 4

4

为了选择heredoc,我通常将光标放在第一行,在heredoc标识符上,然后按V*

V将开始行选择,*并将开始搜索,转到标识符的下一个匹配项,heredoc 的末尾...

于 2010-02-26T18:36:12.613 回答
2

<<''如果您已经在开头 ( ?<<^M^M) 处,则由空行终止的 heredoc 很容易:从v}这里选择直到空行。

否则,在你的例子中,我能想到的最好的就是v/^HTML.

于 2010-02-26T18:37:25.057 回答
2

有这个插件可以让你定义自己的文本对象。

http://www.vim.org/scripts/script.php?script_id=2100

我想定义一个会很好,这样你就可以说“yih”(在 heredoc 中猛拉),这样你就不必明确地从头开始。

请注意,我自己并没有愚弄这个。

如果你只是想要一个视觉选择,你可以。

 nnoremap <leader>ih ?HTML<cr>V/HTML<cr>
于 2010-02-27T02:07:51.513 回答
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)

于 2012-01-18T00:05:14.897 回答