Como colo a mesma linha de código X vezes, mas altero uma palavra na linha de cada vez?

8

Estou escrevendo listas HTML e quero poder colar automaticamente 10 itens da lista em que o texto do item é a única coisa que muda.

Eu poderia fazer isso usando PHP e apenas copiar o código HTML renderizado, mas se houver uma maneira de pular essa etapa e fazê-lo diretamente do Vim, isso me pouparia muito tempo.

Azmodeus
fonte
4
Dê uma olhada no plugin github.com/mattn/emmet-vim , que pode atender às suas necessidades. Caso contrário, você pode usar uma macro para isso, conhece o texto antecipadamente?
nobe4
Sim, eu sei qual texto quero colocar em cada item. Obrigado pela sugestão do plugin. Vou dar uma olhada em casa hoje à noite e também nas macros do Vim.
Azmodeus 03/06

Respostas:

9

Para o que você quer fazer, o emmet-vim , como sugerido nobe4, é sua melhor aposta.

No modo de inserção, li{item $}*10<c-y>,expandirá 10 <li>s com item Npré - preenchido como o texto. Você começará a editar o conteúdo do primeiro. Enquanto ainda estiver no modo de inserção, pressionar <c-y>npassará para a próxima tag para edição.

Se os itens da sua lista não forem um texto repetido em sequência, você poderá usar o vim-surround para ajudar.

Exemplo de lista de texto que precisa ser quebrada:

abc
def
ghi

Se você começar com o cursor em algum lugar do texto, pressionar pressionará ^vip$<c-v>Stli<cr>cada linha com <li></li>.

^     - move to the first column
vip   - select the paragraph
$     - Move to the last column in the selection
<c-v> - Convert the visual selection into a block. Without the
        previous $, it would only select 1 column.
St    - Start vim-surround's tag entry
li    - The tag name
<cr>  - Enter

Isso pode ser transformado em um mapa de chaves fácil de usar:

nmap <leader>li ^vip$<c-v>Stli<cr>
Tommy A
fonte
1
Você salvou meus dedos de muita agonia. Obrigado senhor.
Azmodeus
1
@ Azmodeus Fico feliz que ajudou. O vim-surround é um aumento de produtividade que você deve seguir com os documentos. E, caso você não saiba, o emmet-vim funcionará em folhas de estilo pré-compiladas, como sass ou menos. Por exemplo, tente isso em um arquivo scss:.col$*5>.inner
Tommy A
2

Eu provavelmente faria isso com um mapeamento:

 :nmap ^B o<li></li>^[4hi

O plano é inserir as tags e, em seguida, colocar a inserção entre elas, para que você possa digitar o texto, voltar ao modo normal e pressionar Ctrl-b novamente. (PS, ^ ^ e ^ [são inseridos usando ctrl_V, mas você provavelmente já sabia disso.) Para inserir dez linhas em um único comando, você pode usar

10ctrl_b

Não estava claro se você tem alguma maneira automagica de realmente criar o texto do item?

Tim Ferguson
fonte