Como posso tratar um bloco lógico como um objeto de texto no Vim?

2

Aqui está uma situação em que estou todos os dias:

0  .outer_selector {
1  
2   .inner_selector {
3     margin: 0;
4     padding: 0;
5
6     input { display: none; }
7   }
8
9  } 

Agora, quero recortar e colar o .inner_selector em outro lugar. Como eu posso fazer isso? Não consigo descobrir como deletar rapidamente o% lógico .inner_selector bloco com que está em volta do espaço em branco; isto é, o equivalente a dap , mas para este bloco delimitado por contraventamento. Aqui estão várias idéias, em ordem crescente de gnarliness. ( ai e ii mapeamentos são feitos através do plug-in vim-indent-obj .

  1. 3Gdai . Isso quase funciona, mas deixa a chave de fechamento do bloco .inner_selector onde está.

  2. 2Gdai . Nada de bom; isso exclui todo o bloco .outer_selector .

  3. 2Gdii . Isso exclui o bloco correto, mas não o espaço em branco ao redor (ou seja, o equivalente a dip em vez de dap ).

  4. 2Gf{d% . Vá para { com f{ , exclua a chave correspondente ( d% ). Isso exclui o texto da chave na linha 2 para a chave correspondente, mas deixa o texto " .inner_selector ".

  5. 2Gf{v%okd . Começa como (4), depois pula para o início do texto selecionado ( o ), amplia uma linha para cima ( k ) e exclui ( d ). O mesmo que (3), acima.

  6. 3Gvaikojjd . Selecione o texto, selecione uma linha adicional para cima ( k ), salte para a parte inferior da região selecionada ( o ), selecione duas linhas abaixo ( jj ), delete ( d ). Isso funciona.

Eu posso definir um mapeamento de teclado para o último e terminar com ele, mas antes disso eu quero ter certeza de que não estou perdendo alguma coisa aqui. Como é uma construção de código tão comum em vários idiomas, estou surpreso que seja difícil tratar text { /* multiple lines /* } como um objeto de texto ou que não há nenhum plugin para isso.

    
por Sasgorilla 27.10.2015 / 16:35

1 resposta

1

Existe um objeto de texto para chaves, é B ou { ou } .

Se você acessar o espaço em branco em .outer-selector , mas sair de .inner-selector , poderá vê-lo e selecionar tudo com Vi{ para selecionar tudo dentro das chaves .outer-selector .

Também posso atingir apenas as .inner-selector peças executando Vi{ dentro de .inner-selector e, em seguida, pressionando V novamente para forçá-lo a obter todas as linhas completas. Isso não vai te dar o espaço em branco em torno de .inner-selector , mas achei que poderia ser interessante também.

    
por 29.10.2015 / 15:00