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

164

Frequentemente, ao editar o código, seleciono um bloco no modo visual e faço uma pesquisa e substituí-lo. Depois de fazer as alterações, no entanto, ele sai do modo visual. Como você faz uma nova localização e substituição na mesma seleção?

labirinto
fonte
Bem, eu encontrei uma maneira, mas é um pouco complicado:: '<,'> s / old / new / g Alguma maneira de fazer isso sem ter que digitar '<,'>?
labirinto

Respostas:

244

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

Heptite
fonte
4
Impressionante! @ Heptite como encontrar este comando por mim mesmo \ Stackoverflow?
skywinder
6
@skywinder: help gv
Heptite 01/01
4
@ Heptite: Eu não tenho certeza se você está sendo insolente aqui, mas esse comando mostra o que: gv faz quando você sabe sobre isso. Mas e se eu não fizesse ? Ensine um homem a pescar e tudo isso.
precisa
@ BenThul: Acho que não entendi a pergunta. Eu conheço muitos dos recursos do Vim simplesmente lendo a maior parte da documentação ao longo do tempo, começando com " :help".
Heptite
2
:help select-visualdeve levá-lo ao manual correto no vim @skywinder.
14

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

Digamos que eu quero armazenar uma seleção do meu método atual, que vai das linhas 25 a 35. 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

Posso recuperar essa seleção digitando @a(execute a macro no registro a). Repita com qualquer registro, linhas ou seções de linhas que desejar. Obviamente, se você fizer alterações no arquivo, a seleção também poderá ser alterada; portanto, considere usar marcas em vez de "codificar" os números de linha.

AlexMA
fonte
zm para inserir que você precisa conhecer os números das linhas. Eu acho que é melhor para definir duas marcas e, em seguida, usar: 'a', b para operar na faixa entre eles (ou substituir "com acentos graves, se quiser granularidade dentro de uma linha)
sillyMunky
Sim, a coisa dos números de linha foi burra - eu apenas a usei como exemplo de como criar uma macro de seleção.
Porém
6

gvfunciona muito bem para recuperar a última seleção. Mas às vezes é preciso um pouco mais.

Se você precisar de um registro mais persistente, dê uma olhada neste plugin em que estamos trabalhando no GitHub.

O VisualMarks permite salvar e restaurar áreas visualmente selecionadas, assim como você salva e marca locais específicos em seus arquivos 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 e a, em seguida,

<a

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

iago-lito
fonte
Uau, isso parece muito legal. Vou ter que experimentar esse plugin! A propósito, esses VisualMarks podem persistir com o mkview como você pode com as marcas?
labirinto
@ labyrinth eu não sei mkviewmas .. acho que sim, já que as marcas são salvas em um arquivo separado e .. sugiro que você tente mesmo assim :) Se elas não persistirem como você deseja, teremos o maior prazer em receber seu recurso solicitação no GitHub e tente processá-lo.
iago-lito
1

Suponha que eu queira substituir Adeus por Olá e o código abaixo foi selecionado:

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

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

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

Scott Nguyen
fonte
1
Desculpe, não era isso que eu estava perguntando. O que estou perguntando é como você reutiliza a seleção para fazer outra localização e substituir no mesmo intervalo selecionado anteriormente?
labyrinth
1
Após a substituição, você sairá do modo visual. digite gve seu modo visual voltará ao estado de seleção anterior.
Scott Nguyen