Можно ли с помощью vim выбрать объект heredoc или "here document"? - PullRequest
5 голосов
/ 26 февраля 2010

Одна из сильных сторон 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 голосов
/ 26 февраля 2010

Для выбора heredoc я обычно помещаю курсор на первую строку, над идентификатором heredoc и нажимаю V *

V начнет выбор строки, а * начнет поиск, перейдя к следующему совпадению идентификатора, концу heredoc ...

2 голосов
/ 27 февраля 2010

Этот плагин позволяет вам определять свои собственные текстовые объекты.

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

Полагаю, было бы неплохо определить его так, чтобы вы могли сказать «yih» (yank in heredoc), чтобы вам не пришлось явно идти к началу.

Заметьте, я сам не дурачился с этим.

Если вы хотите визуальный выбор, вы можете.

 nnoremap <leader>ih ?HTML<cr>V/HTML<cr>
2 голосов
/ 26 февраля 2010

A <<'' heredoc завершается пустой строкой легко, если вы уже в начале (?<<^M^M): v} выбирает отсюда до пустой строки.

В противном случае, в вашем примере лучшее, что я могу придумать, это v/^HTML.

1 голос
/ 18 января 2012

Думая о предыдущих постах и ​​пытаясь приблизить их на шаг. Это не будет на 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

Редактировать: Кен улучшил последовательность, как указано выше, поэтому я предлагаю вам использовать его лучшее отображение клавиш для «внутреннего» выбора heredoc:

nmap <F6> ?<<<<CR>w*kV?<<<<CR>j

(это основано на heredocs в стиле php)

...