suponha que tenho os seguintes textos:
Quero fazer a seleção como abaixo:
aaa-dd-e:"aaa",
bb-x:"bb",
c-9:"c"
Tentei usar cv para criar um bloco visual, mas depois de criar a seleção na primeira coluna e pressionar "f:" (pretendia expandir a seleção para marcas de dois pontos em todas as linhas como acima), o que recebo é:
aaa-dd-e: "aaa",:
bb-x"bb",
a seleção para no primeiro ponto e cria um retângulo.
— Aaron Shen
O que você deseja alcançar com essa seleção? Pode haver outra maneira
— Arjen Dijkstra
Se estiver separado por caractere, você pode tentar realinhar o bloco primeiro e selecioná-lo. Consulte: Alinhar texto apenas no primeiro separador no VIM
A seleção geralmente é um meio para um fim, mais ainda no Vim, onde a seleção geralmente não é necessária em primeiro lugar.
Supondo que você ainda deseja colocar aspas em torno dos nomes de propriedades em seu arquivo não JSON para transformá-lo em JSON adequado:
selecione as linhas a serem modificadas, em caracteres ou em linhas, não importa,
:'<,'>norm I"^[f:i"( '<,'>é inserido automaticamente para você e ^[é obtido com <C-v><Esc>).
Se você possui o belo plugin surround, a etapa 2 se torna:
Com uma substituição, a etapa 2 pode se tornar:
vocês estão certos, agora acho a seleção visual provavelmente desnecessária. com a ajuda ou :g/regex/norm, posso simplesmente conseguir o que quero fazer.
Existe alguma maneira de colocar todo o bloco selecionado na área de transferência do sistema e colar em outro arquivo?
Claro. Supondo que seu Vim seja compilado com o suporte da área de transferência, você pode fazer "+you "*y, dependendo da área de transferência que deseja segmentar. Há muitas perguntas relacionadas por aqui.
— romainl 1/09/17
O Vim suporta apenas seleções retangulares em sentido de bloco, com exceção da borda direita irregular quando você pressiona $.
Existem plugins (como vários cursores do vim ) que podem emular várias seleções, mas você também deve ser capaz de atingir seu objetivo real (que infelizmente não mencionou) com comandos puros do Vim, por exemplo :globale :substitute(se você pode formular uma rotina regular). expressão que corresponde à seleção em cada linha) ou repetindo macros (se houver um movimento específico que cubra a seleção em cada linha).
e se eu quiser cortar essas linhas e colar em outro buffer?
Apenas para jogar outro chapéu no ringue, se você realmente quiser usar a seleção visual, use o plug-in Tabular para alinhar os dois pontos e faça sua seleção visual.
Se você pegar seu texto original:
:Tab /:\zs alinhará tudo após o cólon, como abaixo
E então você pode fazer sua seleção de bloco visual.
Como outros já disseram, a seleção visual provavelmente não é necessária nessa situação. O uso normou substituição provavelmente pode realizar o que você deseja sem mexer nas seleções visuais.
— Zach Ingbretsen
Encontrei uma solução para esse problema que é surpreendentemente simples! Inicie o modo de bloco visual na parte inferior da seleção do texto que você deseja copiar e selecione para cima! Ele expandirá o bloco à medida que você sobe, enquanto que se você destacar para baixo, isso parecerá diminuir a seleção.
— Arthur Bowers
Mas assim sempre será um bloco retangular, certo? Enquanto eu lia, não é isso que o OP quer (eles mencionam que tentaram o modo de bloqueio visual).
Não. Sempre será um bloco retangular se todas as linhas tiverem o mesmo comprimento. Descobri que começar na parte inferior e realçar para cima e pressionar $ para ir para o final da linha resultará em todas as linhas destacadas destacadas no final da linha.