selecionando um intervalo de linhas na linha de comando

8

Eu preciso (visual) selecionar um intervalo de linhas na linha de comando.

Por exemplo, o comando a seguir :?^\s*for?+,/^\s*end/- pimprime todas as linhas contidas entre a fore end(maneira exclusiva). Em vez de executar a operação de impressão, gostaria de mudar para o modo visual com as linhas destacadas. Eu procurei no manual, mas não consegui encontrar um ex-comando.

nicmus
fonte
Você quer dizer "exclusivo"?
Rich
você está certo! Eu editei a pergunta
nicmus

Respostas:

7

Os limites de uma seleção de modo visual são definidos pelas marcas <e >.

Assim, o seguinte comando entrará no modo visual com as linhas 5 a 10 (inclusive) selecionadas:

 :5mark < | 10mark > | normal gvV
  • :5mark < define o início da seleção para a linha 5,
  • :10mark > define o final da seleção para a linha 10,
  • gv entra no modo visual com a área definida acima selecionada,
  • V faz a seleção na linha.

Você pode passar qualquer intervalo do Vim para o :markcomando: o seguinte entrará no modo visual usando as expressões regulares fooe barpara definir os limites da área de seleção:

:execute search("foo") . "mark <" | execute search("bar") . "mark >" | normal gvV

O comando a seguir é uma versão mais simples das opções acima, mas depende da posição do cursor:

/foo/mark < | /bar/mark > | normal gvV

Para mais explicações, consulte:

Rico
fonte
Obrigado! Eu resolvi com:?^\s*for?+ mark < | /^\s*end/- mark > | norm gv
nicmus
@nicmus Ah, sim, isso é mais simples para seu uso específico. Eu atualizei minha resposta.
Rich
Apenas por uma questão de quaisquer futuros leitores que pode estar se perguntando, o +e -in @ do nicmus comentário está ajustando os intervalos, a fim de fazer a seleção não incluem as linhas que correspondem as expressões regulares. (Veja :help range)
Rich
O .operador de concatenação realmente me impressionou, então aqui está um exemplo se alguém sentir o mesmo: :execute "l" . "s"produzirá a mesma saída que :ls.
toraritte