Pergunta

Um dos grandes pontos fortes de Vim é seleção de objetos, oferecendo uma rápida manipulação de conteúdo dentro de palavras, parágrafos e delimitadores variados.

Por exemplo,

vi{

Selecionará tudo dentro de um par de aparelhos {}.

Existe alguma funcionalidade equivalente para selecionar um aqui documento ou heredoc:

<<<HTML
    ....
    ....
HTML;

Com base na resposta de Erichbschulz, criei o seguinte para uma seleção interna do 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
Foi útil?

Solução

Pensando nas postagens anteriores e tentando dar um passo mais perto. Isso não será 100% confiável (ou seja, quebrará se a etiqueta de partida ocorrer dentro do heredoc, mas algo como:

?<<< "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 melhorou a sequência como acima, por isso sugiro que você use seu melhor mapeamento de chaves para um heredoc 'interno':

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

(Isso é baseado em heredocs de estilo php)

Outras dicas

Para selecionar Heredoc, geralmente coloco o cursor na primeira linha, sobre o Identificador Heredoc e pressione V*

V Iniciará uma seleção de linha e * Começará uma pesquisa, indo para a próxima partida do identificador, o fim do heredoc ...

UMA <<'' Heredoc terminado por uma linha vazia é fácil, se você já está no início (?<<^M^M): v} Seleciona aqui até a linha vazia.

Caso contrário, no seu exemplo, o melhor que consigo pensar é v/^HTML.

Há um plugin que permite definir seus próprios objetos de texto.

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

Eu imagino que seria bom definir um para que você pudesse dizer 'yih' (Yank in heredoc) para que você não precise ir explicitamente para o início.

Observe que eu não brinca com isso eu mesmo.

Se você deseja apenas uma seleção visual, você pode.

 nnoremap <leader>ih ?HTML<cr>V/HTML<cr>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top