Existe uma maneira de selecionar novamente a última forma visual, em vez da última seleção real, começando na posição atual do cursor?

8

Eu sei que gv seleciona novamente a última seleção visual. Isso é ótimo e eu o uso com frequência.

Mas, às vezes, quero fazer algo relacionado, mas diferente: na posição atual do cursor, selecione um bloco na mesma forma da seleção visual anterior, mas posicionado onde o cursor está agora.

Em particular, muitas vezes tenho esse desejo ao colar um pedaço de texto e depois querer fazer algum tipo de substituição ou transformação nele. Portanto, esse comando me permitiu selecionar novamente o que acabei de colar. (Por esse motivo, também seria útil um comando para "selecionar visualmente a última pasta", mas ainda assim existem outras instâncias em que o que eu literalmente quero é "selecionar novamente a última forma visual, independentemente da seleção da última pasta". EDIT: consulte Existe uma maneira de selecionar novamente o último texto colado, em vez da última seleção real, começando na posição atual do cursor? Para esta pergunta )

(Nota: se não houver uma maneira embutida de fazer isso, estou confortável editando ~ / .vim para adicionar um exemplo de vimscript [e possivelmente modificá-lo] e vincular isso a uma combinação fácil de teclas, mas escrevendo uma a partir do zero fazer isso está além da minha capacidade atual.)

Philip
fonte
11
Você poderia fazer um macro ..
VanLaser
11
Essa é uma boa ideia (suponho que você queira dizer algo como qpv [select ...] q [move ...] @ p "), mas na verdade não chega ao que eu quero, pois no curso normal de uso eu quero para operar no modo visual, apenas "perceba" que desejo a seleção novamente após a operação de colar.Estou procurando algumas teclas pressionadas para ajudar nessa circunstância, embora concorde que isso seja útil se estiver operando devagar o suficiente para antecipar a necessidade de selecionar novamente a região.
Philip
Na verdade, há outro caso em que isso não é possível: colar de fora do vim (por exemplo, através do registro *). Nesse caso, a pergunta deve ser como entre parênteses: existe uma moção para selecionar visualmente a última pasta? Isso é útil, por exemplo, para o envio de código de exemplo do Stackexchange do vim para um REPL.
Philip
Na verdade, não tenho certeza do que você deseja - lembrar as "coordenadas" da última pasta, antes de outras alterações, para selecioná-las facilmente novamente?
21415 VanLaser

Respostas:

6

Este é um remapeamento simples que permite selecionar novamente o último texto colado (ou alterado):

noremap gV `[v`]

Do comentários no post original, talvez você deseja salvar as coordenadas da última alteração / colar antes de outros / outras alterações, e restaurar que a seleção visual?

VanLaser
fonte
11
OK, sim, testei isso e funciona; isso é ótimo. Realmente, é minha culpa fazer duas perguntas relacionadas em uma. Acho que o que vou fazer é mudar essa pergunta para a que você respondeu corretamente aqui e, em seguida, refaça a pergunta relacionada como uma pergunta separada, a menos que um mod tenha uma idéia melhor.
Philip
Na verdade, essa pergunta é feita e respondida aqui: vi.stackexchange.com/questions/31/… Desculpe - minha culpa foi por fazer uma bagunça.
Philip
4

Para selecionar novamente a forma antiga, você pode fazer o seguinte:

1v
Andreas
fonte
11
Não seleciona novamente a mesma forma, mas o mesmo número de caracteres.
Muru
Testei isso e também parece funcionar com as notas do @muru. Na maioria dos casos, quando a re-seleção não é para selecionar texto colado, mas recriando uma seleção, o posicionamento correto do cursor implica que a seleção do mesmo número de caracteres recriará a mesma forma. MAS, eu posso imaginar exceções. Ainda assim, curioso sobre uma abordagem alternativa que duplica a forma. Talvez isso seja impossível em circunstâncias em que as linhas não tenham o mesmo comprimento.
Philip