Comecei a usar o gvim e não consigo entender como a edição de múltiplas linhas funciona no gvim.
Por exemplo:
Texto original:
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
ctrl + q, jjjjjj, $ everything está selecionado, então eu pressiono I para fazer uma inserção de várias linhas.
Minha intenção é inserir aspas como na primeira linha e pressionar Esc:
asd "asd asd" asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
O que aconteceu? Eu esperava um comportamento semelhante ao do sublimetext:
Se você não sabe como isso funciona, apenas repete as ações para cada linha. Como conseguir isso? E o que o vim está fazendo aqui?
vim
sublimetext
text-editor
AlfredoVR
fonte
fonte
Respostas:
Faça um favor a si próprio soltando a camada de compatibilidade do Windows.
O atalho normal para entrar no modo de bloqueio visual é
<C-v>
.Outros já lidaram com macros de gravação, eis algumas outras idéias:
Usando apenas o modo de bloqueio visual .
Coloque o cursor na segunda palavra:
Pressione
<C-v>
para entrar no modo de bloco visual e expanda sua seleção para baixo:Clique
I"<Esc>
para obter:Coloque o cursor no último caractere da terceira palavra:
Pressione
<C-v>
para entrar no modo de bloco visual e expanda sua seleção para baixo:Clique
A"<Esc>
para obter:Com modo de bloqueio visual e Surround.vim .
Coloque o cursor na segunda palavra:
Pressione
<C-v>
para entrar no modo de bloco visual e expanda sua seleção na parte inferior e direita:Clique
S"
para cercar sua seleção com ":Com o modo de linha visual e
:normal
.Pressione
V
para selecionar a linha inteira e expanda-a para a parte inferior:Execute este comando:
:'<,'>norm ^wi"<C-v><Esc>eea"<CR>
para obter::norm[al]
permite executar normal comandos do modo em várias linhas (a'<,'>
peça é adicionada automaticamente pelo Vim e significa "atuar na área selecionada")^
coloca o cursor no primeiro caractere da linhaw
passa para a próxima palavrai"
insere um"
antes do cursor<C-v><Esc>
é a maneira do Vim inserir um caractere de controle nesse contexto, aqui é<Esc>
usado para sair do modo de inserçãoee
move para o final da próxima palavraa"
acrescenta a"
depois do cursor<CR>
executa o comandoUsando o Surround.vim, o comando acima se torna
fonte
gv
para recuperar sua seleção visual anterior e depois mover horizontalmente, talvez com2e
. (Quanto mais linhas, o mais valiosogv
é!)s
no modo normal, mas uma grandeS
no modo visual, isso na etapa 3 do método surround.vim, as teclas devem serS"
S"
, nãos"
.
.Essas são algumas boas soluções prontas para uso fornecidas acima, mas também podemos experimentar alguns plugins que fornecem vários cursores como o Sublime.
Eu acho que este parece promissor:
Pareceu abandonado por um tempo, mas teve algumas contribuições em 2014.
É bastante poderoso, embora demorei um pouco para me acostumar com o fluxo (que é bastante sublime, mas ainda modal como o Vim).
Na minha experiência, se você tiver muitos outros plugins instalados, poderá encontrar alguns conflitos!
Existem outras tentativas para esse recurso:
Sinta-se à vontade para editar se você perceber alguma dessas melhorias.
fonte
Existem várias maneiras de conseguir isso no Vim. Não sei quais são mais parecidas com as do Sublime Text.
O primeiro seria através do modo de inserção de múltiplas linhas . Coloque o cursor no segundo "a" na primeira linha, pressione
Ctrl-V
, selecione todas as linhas, depois pressioneI
e coloque aspas duplas. Pressionar<esc>
repetirá a operação em todas as linhas.O segundo é via macros. Coloque o cursor no primeiro caractere e comece a gravar uma macro com
qa
. Vá à sua direita comllll
, entre no modo de inserção coma
, coloque uma citação dupla, saia do modo de inserção e volte ao início da sua linha com<home>
(ou equivalente). Pressionej
para descer uma linha. Pare de gravar comq
. E, em seguida, reproduza a macro com@a
. Várias vezes.Alguma das abordagens acima funciona para você?
fonte
se você usar o comando "global", poderá repetir o que pode fazer em uma linha ou em qualquer número de linhas.
exemplo:
O comando acima localiza todas as linhas que possuem foo e substitui todas as ocorrências de barra nessa linha por baz.
vai fazer em todas as linhas
fonte
:g
comando descrito aqui. Eu gosto de usar/gc
para pedir "confirmações" para que eu possa clicar emy
oun
para cada substituição, oua
para alterar todas elas.fonte
I
não é possível entrar no modo de inserção, você sabe por que isso acontece?vim -u NONE
e tente executar a ação desejada novamente, pode haver algum mapa ou plugin alterando o comportamento do seu vim.Não tenho certeza do que
vim
está fazendo, mas é um efeito interessante. A maneira como você está descrevendo o que deseja soa mais como as macros funcionam (:help macro
). Algo assim faria o que você quer com macros (iniciando no modo normal):qa
: Grave macro paraa
registrar.0w
:0
vá para o início da linha,w
pule uma palavra.i"<Esc>
: Entre no modo de inserção, insira a"
e retorne ao modo normal.2e
: Salte para o final da segunda palavra.a"<Esc>
: Anexar a"
.jq
Vá para a próxima linha e termine a gravação de macro.Tomados em conjunto:
qa0wi"<Esc>2ea"<Esc>
Agora você pode executar a macro com
@a
, repita a última macro com@@
. Para aplicar ao restante do arquivo, faça algo como o99@a
que supõe que você não tenha mais de 99 linhas, a execução da macro será encerrada quando atingir o final do arquivo.Aqui está como conseguir o que deseja
visual-block-mode
(iniciando no modo normal):visual-block-mode
, selecione as linhas que deseja afetar,G
para ir para a parte inferior do arquivo.I"<Esc>
."
..
seja suficiente.fonte
9999@a
pode ser feio, mas é muito mais fácil digitar:%norm! @a
e não é executado novamente na linha que você acabou de editar. Ainda é bom saber de qualquer maneira. :)Minha solução é usar esses 2 mapeamentos:
Como usá-los:
V12j
<leader>n
<leader>m
Para fazer outra edição, você não precisa fazer a seleção novamente. Basta pressionar
<leader>n
, fazer sua edição e pressionar<leader>m
para aplicar.Como isso funciona:
<Esc><Esc>0qq
Saia da seleção visual, vá para o início da linha e comece a gravar uma macro.q
Pare de gravar a macro.:'<,'>-1normal!@q<CR>
Desde o início da seleção visual até a linha antes do final, toque a macro em cada linha.<Down>
Volte para a última linha.Você também pode mapear a mesma tecla, mas para modos diferentes:
Embora isso atrapalhe sua capacidade de fazer outra edição. Você terá que selecionar novamente suas linhas.
fonte