Questão Como você reutiliza uma seleção de modo visual?


Muitas vezes, ao editar o código, seleciono um bloco no modo visual e faço uma pesquisa e substituo o bloco. Depois de fazer as alterações, no entanto, sai do modo visual. Como você faz um novo achado e substitui a mesma seleção?


147


origem


Bem, eu encontrei um caminho, mas é um pouco complicado:: '<,'> s / old / new / g Qualquer maneira de fazer isso sem ter que digitar o '<,'>? - labyrinth


Respostas:


Você pode selecionar novamente a última área visual selecionada gv.


212



Impressionante! @Heptite como encontrar este comando sozinho w \ o Stackoverflow? - skywinder
@skywinder: ajuda gv - Heptite
@ Heptite: Não tenho certeza se você está sendo irônico, mas esse comando mostra o que: gv faz uma vez que você sabe disso. Mas e se eu não fez? Ensine um homem a pescar e tudo mais. - Ben Thul
@BenThul: Eu acho que entendi mal a questão. Eu sei sobre muitos dos recursos do Vim simplesmente lendo a maior parte da documentação ao longo do tempo, começando com ":help". - Heptite
:help select-visual deve levá-lo ao manual correto dentro do vim @skywinder. - nwildner


gv é definitivamente o método mais rápido (use a última seleção), mas se você quiser uma região de seleção salva (ou várias), você sempre pode criar macros.

Digamos que eu queira armazenar uma seleção do meu método atual, que vai das linhas 25-35. Eu posso criar uma macro que seleciona todo o método digitando

q    //start recording
a    //use register a
25G  //Go to line 25
V    //visual-line mode
35G  //Go to line 35
q    // stop recording

Eu posso então pegar essa seleção de volta digitando @a (execute macro no registro a). Repita com qualquer registro, linhas ou seções de linhas que você desejar. Obviamente, se você fizer alterações no arquivo, a seleção também poderá ser alterada, portanto, convém considerar a utilização de marcas em vez de números de linha "codificados".


11



zmto digite que você precisa saber os números de linha. Eu acho que é melhor definir duas marcas e, em seguida, usar: 'a,' b para operar no intervalo entre eles (ou substituir 'com backticks se desejar granularidade dentro de uma linha) - sillyMunky
Sim, a coisa dos números de linha era burra - eu apenas usei isso como um exemplo de como criar uma macro de seleção. Usar uma série de marcas é uma ideia interessante ... - AlexMA


gv funciona muito bem para recuperar a última seleção. Mas às vezes precisa de um pouco mais.

Se você já precisou de um registro mais persistente, dê uma olhada este plugin estamos atualmente trabalhando no GitHub.

VisualMarks permite salvar e restaurar áreas visualmente selecionadas como você salva e marcar locais específicos em seus arquivos com m. Após a instalação e com as opções padrão, use:

ma

no modo visual para salvar sua seleção atual para marcar a, então

<a

no modo normal para voltar a esta seleção.


6



Uau, isso soa muito legal. Vou ter que experimentar esse plugin! By the way, esses VisualMarks podem persistir com mkview como você pode com marcas? - labyrinth
@ labirinto eu não sei mkview mas eu acho sim desde marcas são salvos em um arquivo separado e .. Eu sugiro que você tente mesmo assim :) Se eles não persistirem como você deseja, teremos o maior prazer em receber o seu pedido de recurso em GitHub e tente processá-lo. - iago-lito


Suponha que eu quisesse substituir Goodbye por Hello e o código abaixo foi selecionado:

public static void main(String[] args){
    System.out.println("Goodbye World");
}

Eu digitaria :s/Goodbye/Hello/ e vim irá substituir todas as instâncias de Goodbye com Hello

É simplesmente uma combinação das expressões regulares e das seleções do modo visual do vim. Quando você seleciona, deve preencher automaticamente '<,'>


0



Desculpe, não é isso que eu estava perguntando. O que estou perguntando é como você reutiliza a seleção para fazer outra descoberta e substituir no mesmo intervalo selecionado anteriormente? - labyrinth
Depois de substituir, você sairá do modo visual. digitar gv e seu modo visual reverterá para o estado de seleção anterior. - Scott Nguyen