Vim: maneira mais rápida de selecionar blocos de texto no modo visual

189

Uso o vim há algum tempo e sei que selecionar blocos de texto no modo visual é tão simples quanto SHIFT+ Ve mover a tecla de seta para cima ou para baixo linha por linha até chegar ao final do bloco de texto que eu deseja selecionado.

Minha pergunta é - existe uma maneira mais rápida no modo visual de selecionar um bloco de texto, por exemplo, por SHIFT+ Vseguido de uma especificação do número da linha na qual desejo que a seleção pare? (via, :35por exemplo, onde 35 é o número da linha que eu quero selecionar - isso obviamente não funciona, minha pergunta é descobrir como se algo semelhante a isso pode ser feito ...)

Calvin Cheng
fonte
3
+1 Boa pergunta, já que me vejo fazendo algo assim com frequência. Gostaria de saber se talvez este não seja o lugar para começar a usar v%ou v/patternou algo mais.
user786653
9
vip selecione o parágrafo interno e selecione a frase interna.
SergioAraujo 13/09
27
V35Gselecionará visualmente da linha atual para a linha 35, também V10jou V10kselecionará visualmente as próximas 10 linhas ou as anteriores
Stephan Stephan
1
@ Stephan, é exatamente o que eu estava procurando. Obrigado!!
grito
para a linha seleção atalho eu uso: nnoremap <Space> V. Quando estiver no modo de linha visual, clique com o botão direito do mouse para definir a seleção (pelo menos no Linux é assim). De qualquer forma, mais eficaz do que apenas com o teclado.
Mikhail V

Respostas:

211

Além do que os outros disseram, você também pode expandir sua seleção usando pesquisas de padrões.

Por exemplo, v/foovocê selecionará da sua posição atual para a próxima instância de "foo". Se você realmente deseja expandir para a próxima instância de "foo", na linha 35, por exemplo, basta pressionar npara expandir a seleção para a próxima instância e assim por diante.

atualizar

Geralmente não faço isso, mas sei que algumas pessoas usam marcas extensivamente para fazer seleções visuais. Por exemplo, se estou na linha 5 e quero selecionar a linha 35, posso pressionar mapara colocar a marca ana linha 5, depois :35para passar para a linha 35. Shift+ vpara entrar no modo visual linha a linha e, finalmente, `apara retornar à marca a.

Jay
fonte
21
Se você precisar incluir o padrão, você pode usar v/foo/e. A esignifica "fim" do padrão combinado.
Peter Rincker 13/09/11
6
E você pode modificar a partir dessa linha com deslocamentos: V / foo / + 5 ou V / foo / -5 (estou usando o modo visual linear como o autor).
precisa saber é o seguinte
O que você faria se quisesse selecionar o intervalo de texto correspondente à sua pesquisa; ou seja: encontre e selecione (palavra inteira) seu termo de pesquisa?
Daniel Parque
5
@DanielPark Para selecionar a palavra atual, use v i w. Se você deseja selecionar o espaço não em branco contíguo atual, use v i Shift+ w. A diferença seria quando o cursor estiver aqui MyCla|ss.Method, o primeiro combo selecionaria MyClasse o segundo selecionaria a coisa toda.
Jay
1
Obrigado. Constatou que o uso também v i w spermite efetivamente uma operação de "substituição".
Daniel Parque
113
G                       Goto line [count], default last line, on the first
                        non-blank character linewise.  If 'startofline' not
                        set, keep the same column.
                        G is a one of jump-motions.

V35G alcança o que você deseja

bheeshmar
fonte
89

Vim é uma linguagem. Para realmente entender o Vim, você precisa conhecer o idioma. Muitos comandos são verbos, e o vim também possui objetos e preposições.

V100G
V100gg

Isso significa "selecionar a linha atual até e incluindo a linha 100".

Os objetos de texto são onde está a maior parte da energia. Eles introduzem mais objetos com preposições.

Vap

Isso significa "selecionar em torno do parágrafo atual", ou seja, selecione o parágrafo atual e a linha em branco a seguir.

V2ap

Isso significa "selecionar em torno do parágrafo atual e do próximo parágrafo".

}V-2ap

Isso significa "vá para o final do parágrafo atual e, em seguida, selecione-o visualmente e o parágrafo anterior".

Entender o Vim como um idioma ajudará você a obter a melhor milhagem possível.

Depois de selecionar para baixo, você pode combinar com outros comandos:

Vapd

Com o comando acima, você pode selecionar em torno de um parágrafo e excluí-lo. Altere dpara a ypara copiar ou para a cpara alterar ou para a ppara colar.

Depois de entender como todos esses comandos funcionam juntos, você não precisará selecionar nada visualmente. Em vez de selecionar visualmente e excluir um parágrafo, você pode simplesmente excluí-lo com o dapcomando

kzh
fonte
} V-2ap O uso de -2 é realmente inteligente.
Ambareesh
40

v35G selecionará tudo, desde o cursor até a linha 35.

vcoloca você no modo de seleção, 35especifica o número da linha que você deseja Gacessar.

Você também pode usar o v}que selecionará tudo até o início do próximo parágrafo.

michaelmichael
fonte
16

Para selecionar o número de linhas:

shift + v 9j - selecione 10 linhas

mateusz.fiolka
fonte
2
Para pequenos intervalos isso é bom, especialmente quando combinadas com:set rnu
Peter Rincker
9

Shift+V n j ou Shift+V n k

Isso seleciona a linha atual e as próximas / nlinhas anteriores . Eu acho isso muito útil.

Peng Zhang
fonte
Esta é uma maneira simples que eu estava procurando. Obrigado
Arsal
6

v 35 j

texto adicionado para um mínimo de 30 caracteres

µBio
fonte
6

v%

selecionará o bloco inteiro.

Jogue com também:

v}, vp, vs, Etc.

Veja a ajuda:

:help text-objects

que lista as diferentes maneiras de selecionar letras, palavras, frases, parágrafos, blocos e assim por diante.

bjfletcher
fonte
4

Você pode pressionar vi}para selecionar o bloco entre {}colchetes onde o cursor está localizado atualmente.

Realmente não importa onde você está dentro desse bloco (apenas verifique se você está no mais externo). Além disso, você pode mudar {para qualquer coisa que tenha um par como )ou ].

iggy
fonte
3

Você sempre pode usar apenas números antecedentes para repetir ações:

  • No modo visual, digite 35e o cursor se moverá para baixo 35 vezes, selecionando as próximas 35 linhas
  • No modo normal:
    • excluir 35 linhas 35dd
    • cole 35 vezes 35p
    • desfazer 35 alterações 35u
    • etc.
Jackson
fonte
2

simples basta pressionar Shift v line number gg

exemplo: sua linha atual para a linha 41 Basta pressionar Shift v 41 gg

ReyApr
fonte
1

} significa mover o cursor para o próximo parágrafo. então, use v}para selecionar o parágrafo inteiro.

mabeiyi
fonte
0

Para selecionar tudo no visual: Digite Esc para garantir que você esteja no modo normal

:0 

digite ENTER para ir para o início do arquivo

vG
Sergio Abreu
fonte
Você pode usar ggno modo normal para ir para a primeira linha também.
huangzonghao
0

Pode ser útil saber:

Para selecionar a mesma quantidade de linhas, por exemplo, use 1v Você deve ter feito algumas modificações para poder usar 1v, em sentido horário ou em linha.

Hoje eu vi essa dica incrível daqui :

 :5mark < | 10mark > | normal gvV
 :5mark < | 10mark > | normal gv

Você também pode redefinir os limites do bloco visual fazendo o seguinte:

m< .......... sets the visual mode start point
m> .......... sets the visual mode end point
SergioAraujo
fonte
0

Eu uso isso com fold no modo recuo:

v abra o modo Visual em qualquer lugar do bloco

zaza toogle duas vezes

yoann guillard
fonte