Comandos simples do Vim que você gostaria de conhecer antes [fechado]

378

Estou aprendendo novos comandos no Vim o tempo todo, mas tenho certeza de que todos aprendem algo novo de vez em quando. Eu aprendi recentemente sobre isso:

zz, zt, zb - posiciona o cursor no meio, na parte superior ou na parte inferior da tela

Quais são outros comandos úteis ou elegantes que você gostaria de aprender há séculos?

Lin
fonte
46
tecnicamente, zz, zt, zb estão posicionando a tela com o cursor no meio / em cima / em baixo. para posicionar o cursor no meio / em cima / em baixo, use M, H ou L. Ambos os conjuntos de comandos são úteis!
Peter
11
Ler este post meses ou um ano atrás me ajudou todos os dias. dap é algo que eu uso para mover parágrafos várias vezes por hora, graças a este post.
Funkodebat
33
Eu nunca peguei tantos truques em uma página que foi marcada como não construtiva :) Obrigado a todos.
Tasos Bitsios

Respostas:

315

Eu realmente gostaria de saber que você pode usar em CtrlCvez de Escsair do modo de inserção. Esse foi um aumento real de produtividade para mim.

yalestar
fonte
93
Eu remapeei meu Caps-Lock para um Esc. Isso é tanto mais fácil do que o Esc normal e Ctrl-C
Kasper
114
Puta merda. 15 anos de vi e eu nunca soube que isso ...
Chris K
31
outro popular foi usar 'jj' para ESC. Eu gosto dessa abordagem até agora. :mapa! jj <ESC>
claytron
27
Você também pode usar CTRL- [(que eu gosto porque são os dois dedinhos ... apenas uma pequena rotação das duas mãos).
Jason Baixo
42
use 'jk' como uma variante do @ claytron's. se você, sem saber, já está no modo INSERT, jk deixa você onde estava, para que você possa acessá-lo sempre (crédito: outra pessoa ... não é minha ideia).
Kyle
197

O truque mais recente "uau" que eu aprendi é um método de executar pesquisas e substituições complicadas. Muitas vezes, no passado, tive um regexp muito complicado para fazer substituições e não deu certo. Há um caminho melhor:

:set incsearch             " I have this in .vimrc
/my complicated regexp     " Highlighted as you enter characters
:%s//replace with this/    " You don't have to type it again

O "truque" aqui (por falta de uma palavra melhor) é a maneira pela qual você pode usar a pesquisa para criar o regexp (e 'incsearch' o destaca ao inserir caracteres) e, em seguida, usar um padrão vazio na substituição: o vazio o padrão é o último padrão de pesquisa.

Exemplo:

/blue\(\d\+\)
:%s//red\1/

Equivalente a:

:%s/blue\(\d\+\)/red\1/

Vejo:

:help 'incsearch'
:help :substitute
DrAl
fonte
11
uau ... Eu estive procurando algo parecido com isto
figurassa:
11
Sim, eu gostaria de saber sobre isso mais cedo. Mas, novamente, é o que digo sobre tudo o que aprendo que é novo no vim.
Robert Massaioli
26
Para quem realmente ama isso, tente pressionar <Ctrl-R>/para inserir a última consulta de pesquisa. (Consulte :help i_CTRL-R) Realmente útil para semelhante ao acima, mas você deseja capturar parte dos resultados da pesquisa. (assim: %s:/\\([fF]rank\\) and mary/marie and \1/g)
idbrii
4
:%s//...também funciona com *(pesquisar palavra sob o cursor). Um plug-in chamado visual-star-search estende a funcionalidade de *para corresponder ao texto inteiro de uma seleção visual, o que facilita a pesquisa e a substituição do texto selecionado, por exemplo v3e(selecione visualmente 3 palavras) *(pesquise) e :%s//replacement/g(substitua todas as ocorrências por " substituição"). Eu uso isso tantas vezes que tenho um mapeamento para o comando global substituição: :nmap <Leader>s :%s///g<left><left>.
Patrick Oscity
11
@idbrii já que as pessoas lendo pode ser Vim noobs (me), o %s:deve ser :%s, e para o meu sistema, eu necessários \(\)em vez de\\(\\)
Charlie Gorichanaz
155

Eu criei esta referência do meu comando mais usado para um amigo meu:

select                                   v
select row(s)                            SHIFT + v
select blocks (columns)                  CTRL  + v
indent selected text                     >
unindent selected text                   <
list buffers                             :ls
open buffer                              :bN (N = buffer number)
print                                    :hardcopy
open a file                              :e /path/to/file.txt
                                         :e C:\Path\To\File.txt
sort selected rows                       :sort
search for word under cursor             *
open file under cursor                   gf
  (absolute path or relative)
format selected code                     =
select contents of entire file           ggVG
convert selected text to uppercase       U
convert selected text to lowercase       u
invert case of selected text             ~
convert tabs to spaces                   :retab
start recording a macro                  qX (X = key to assign macro to)
stop recording a macro                   q
playback macro                           @X (X = key macro was assigned to)
replay previously played macro *         @@
auto-complete a word you are typing **   CTRL + n
bookmark current place in file           mX (X = key to assign bookmark to)
jump to bookmark                         `X (X = key bookmark was assigned to
                                             ` = back tick/tilde key)
show all bookmarks                       :marks
delete a bookmark                        :delm X (X = key bookmark to delete)
delete all bookmarks                     :delm!
split screen horizontally                :split
split screen vertically                  :vsplit
navigating split screens                 CTRL + w + j = move down a screen
                                         CTRL + w + k = move up a screen
                                         CTRL + w + h = move left a screen
                                         CTRL + w + l = move right a screen
close all other split screens            :only

*  - As with other commands in vi, you can playback a macro any number of times.
     The following command would playback the macro assigned to the key `w' 100
     times: 100@w

** - Vim uses words that exist in your current buffer and any other buffer you may have open for auto-complete suggestions.
brian newman
fonte
Você lista "~ X" para ir para a marca com o nome X. Isso não funciona para mim - em vez disso, uso "'X" (aspas simples).
Uau. Você está absolutamente certo. Quando eu estava digitando o guia, acho que meus olhos só viram o til e brilharam sobre o tiquetaque traseiro. Vou atualizar em conformidade. Obrigado pela atenção.
22910 brian newman
5
essa lista é legal, mas eu realmente quero saber como você desenhou essa tabela? com o VIM? qual plugin? Estou procurando um atualmente.
Kent
6
Eu usei o VIM, mas nenhum plugin. Contudo; o uso do recurso de seleção de bloco tornou relativamente fácil. Que bom que você encontrou a lista útil! ~ brian
brian newman
11
Ctrl-Q para seleção de bloco é uma especificidade do mswin.vim que permite colar o CTRL-V. A maioria dos usuários do vim consideraria esse mal e desativaria o mswin.vim. "+ P ou Ctrl-R + não é tão difícil digitar para inserir conteúdo da área.
Benoit
144

gi muda para o modo de inserção, colocando o cursor no mesmo local em que estava anteriormente.

Cyber ​​Oliveira
fonte
29
Eu estava tão feliz quando eu descobri sobre g;Agora, isso me leva às lágrimas :-)
Patrick Oscity
@longdeqidao de jeito nenhum. Retorna ao último ponto de inserção. Assim, você pode rolar o conteúdo do seu coração e ele o levará de volta para onde você foi inserido pela última vez.
do Cyber Oliveira
9
FYI, g; (que @PatrickOscity referido acima) coloca o cursor no local em que uma edição foi feita. Você pode usá-lo várias vezes para voltar ao histórico. Observando isso aqui porque minha ajuda do vim não menciona isso por algum motivo estranho.
PonyEars
13
A intuição de Vim nunca deixa de me impressionar. Como o @PonyEars mencionou g;eu tentei se o "oposto" seria g,e eis e eis que podemos voltar e avançar!
Cyber ​​Oliveira
aé mais curto. :) Mas gié realmente muito intuitivo, ggeralmente sendo uma operação oposta.
Erwin Rooijakkers
105
: q!

Eu gostaria de saber isso antes de iniciar o vi pela primeira vez.

Peter Mortensen
fonte
23
como um cara do emacs, esse é o comentário mais engraçado que eu já li. não tenho certeza se você pretendia que fosse. Você me fez feliz hoje.
pjammer
29
Lembro-me de tentar vim e emacs pela primeira vez no mesmo dia, sem saber como sair também. Eu pensei comigo mesmo que diabos há de errado com essas pessoas !?
physicsmichael
13
+1. Na primeira vez que você inicia o vim, a mensagem padrão deve ser "write: q to quit". Eu teria que economizar muito tempo lol
José Ramón
2
@ JoséRamón Mas não mostrá-lo na tela por padrão, se você entra vim sem abrir um arquivo. Isso foi adicionado recentemente? Lembro-me claramente de tentar vim anos atrás e já estava lá. Ele também diz para você usar :q!se tentar sair sem salvar o buffer.
mechalynx
5
@ivy_lynx sim, você pode estar certo, mas apenas se você abrir o vim sem arquivos. Normalmente, a primeira vez que você abre o vim é porque você precisa editar um arquivo de configuração no Unix, então você escreve "$ vim file" e não consegue sair. Ou eu sou o único?
José Ramón
56

^ XF é concluído usando nomes de arquivos do diretório atual. Não é mais necessário copiar / colar no terminal ou verificar novamente com dificuldade.

^ XP é concluído usando palavras no arquivo atual

: set scrollbind força um buffer a rolar ao lado de outro. por exemplo, divida sua janela em dois painéis verticais. Carregue um arquivo em cada (talvez versões diferentes do mesmo arquivo). Faça :set scrollbindem cada um. Agora, quando você rola em um, os dois painéis rolam juntos. Ideal para comparar arquivos.

Brian Agnew
fonte
Como desativar o scrollbind depois de ativá-lo?
Amjith
2
jinxed_coder : :set noscbpara desativá-lo e usá :set scb-lo (não :scrollbind). :h scrollbind
jmdeldin
Ops. Corrigido para ': set scrollbind'.
11139 Brian Agnew
7
^ XP é concluído com preferência às palavras anteriores do arquivo, ^ XN com preferência às próximas palavras do arquivo.
U0b34a0f6ae 14/09/09
Você também pode diferenciar arquivos abrindo file1 e executando :diffsplit file2ou apenas iniciando o vim vim -d file1 file2. O Vim vincula automaticamente os dois arquivos.
Brian McCutchon
51

Você pode usar um conjunto inteiro de comandos para alterar o texto entre colchetes / parênteses / aspas / tags. É super útil evitar encontrar o início e o fim do grupo. Tente ci(, ci{, ci<, ci", ci', ctdependendo do tipo de objeto que você deseja alterar. E as ca(, ca{, ...variantes também excluem os colchetes / aspas.

Fácil de lembrar: altere dentro de uma declaração entre colchetes / altere uma declaração entre colchetes.

Peter
fonte
16
isso não é apenas para c. Você pode fazer isso com dexcluir (por exemplo, di (ou da (), ypara arrancar, vpara selecionar etc.
Nathan Fellman
Olá! Gostaria de saber se a documentação para isso está usando :help? Não consigo encontrar em lugar nenhum. > _ <
Matej 2/12
11
@ Peter Já verifiquei isso antes, mas não consegui encontrar menção ao peculiar comportamento "interno + delimitador". Acontece estar dentro :help motion.txt! Obrigado!
Matej
2
esta ponta é a única razão pela qual i comutada para VI, em primeiro lugar :)
Justin L.
11
Se você estiver editando HTML ou XML, poderá usar citpara alterar o conteúdo da tag atual. Por exemplo <span>Some text</span>, se o cursor estiver sobre o "m", você pode fazer ditpara obter <span></span>.
27616 Jonathan Jonathan
47
  1. Não pressione Escnunca. Veja esta resposta para saber o porquê . Como mencionado acima, Ctrl+ Cé uma alternativa melhor. Eu sugiro fortemente mapear sua Caps Lockchave para escapar.

  2. Se você estiver editando um idioma compatível com Ctags , usar um arquivo de tags e :ta, Ctrl+ ], etc. é uma ótima maneira de navegar pelo código, mesmo em vários arquivos. Além disso, Ctrl+ Ne Ctrl+ Pconclusão usando o arquivo de tags é uma ótima maneira de reduzir o tempo de teclas.

  3. Se você estiver editando uma linha que é quebrada porque é mais larga que seu buffer, você pode mover para cima / para baixo usando gk e gj.

  4. Tente se concentrar no uso eficaz dos comandos de movimento antes de aprender maus hábitos. Coisas como usar 'dt' ou 'd3w' em vez de pressionar x várias vezes. Basicamente, sempre que você pressionar a mesma tecla repetidamente, provavelmente existe uma maneira melhor / mais rápida / mais concisa de realizar a mesma coisa.

anthony
fonte
11
Não use Escape? Isso é heresia. Escape é seu melhor amigo, dentro e fora do trabalho.
Xcramps 14/08/09
28
se é um amigo tão bom, por que está tão distante no teclado?
anthony
porque 99% das pessoas nunca o usam.
Stefano Borini
5
O escape é separado de outras teclas por alguns centímetros no meu teclado. Você não pode perder.
18711 Brian Carper
15
# 3 é incrível! Ainda aprendendo coisas novas ...
Brian Newman
45

A tecla asterisco,, *procurará a palavra sob o cursor.

[+ Tablevará você à definição de uma função C que está sob o seu cursor. (Mas nem sempre funciona).

smcameron
fonte
11
Tente 'man ctags' se você estiver usando o * nix para aprender como gerar um arquivo "tags" que diz ao vim como encontrar a definição de qualquer função ou variável em vários idiomas além de C. Use ctrl +] para encontrar a definição do token sob o cursor ou use: tag tokenToFind para encontrar qualquer token que ele conheça. Você pode até iniciar o vim com "vim -t tokenToFind" para abrir o arquivo apropriado e posicionar o cursor na função que você precisa editar.
21711 Adam Liss
23
a tecla # irá procurar no sentido inverso para a palavra sob o cursor
Funkodebat
O github.com/bronson/vim-visual-star-search permite a busca em estrela de seleções visuais. Não quero mais perder isso.
Patrick Oscity
[ + Tab vai trabalhar sempre quando você estender o pathcom pastas necessários comoset path+=path/to/files
dlmeetei
43

ZZ(funciona como :wq)

E sobre a posição do cursor: descobri que um cursor que sempre fica no meio da tela é legal -

set scrolloff=9999
maykeye
fonte
2
Não sabia disso. :xfaz isso bem
sa125
18
Não é totalmente preciso. Funciona como :x, que só salva o arquivo se houver alterações, enquanto :wqsempre salva o arquivo.
Erik B
ZQ (funciona como: q!)
xialu
42

Algumas das minhas mais recentes adições ao meu brainstore do Vim:

  • ^wi: Pule para a tag abaixo do cursor dividindo a janela.
  • cib/ciB: Altere o texto dentro do conjunto atual de parênteses () ou chaves {}, respectivamente.
  • :set listchars=tab:>-,trail:_ list: Mostra separadores / espaços finais visualmente diferentes de outros espaços. Isso ajuda muito na codificação Python.
Walter
fonte
4
Isso precisa de mais votos! cibé ótimo.
Matt Parker
também: ciw para alterar a palavra atual (ou caw, a mesma mas apenas a mão esquerda) ciW para alterar a atual W = o. (rd) Os mesmos com v em vez de c serão selecionados no visual em vez de substituir
lajarre
5
cib é equivalente a digitar "ci (". Você também pode fazer "ci [", "ci {" ou se o seu vimrc estiver configurado corretamente) "ci <", para outros tipos de colchetes.
Tom Lord
2
Além disso, "cit" para alterar o texto dentro de uma tag. Muito útil ao trabalhar com XML / HTML.
21813 Walter Walter
Também vale a pena mencionar que você pode usar o sufixo com a chave de fechamento, se preferir. Além disso, eu acabei de aprender sobre ci}& cituau, isso vai ser muito útil. vi[m]está provando um programa muito interessante!
underscore_d
37

gv inicia o modo visual e seleciona automaticamente o que você selecionou anteriormente.

demais php
fonte
34

: shell para iniciar um console de shell do Vim. Útil quando, por exemplo, você deseja testar um script sem sair do Vim. Basta clicar em ^ d quando terminar com o console do shell e voltar ao Vim e seu arquivo editado.

peroumal1
fonte
Eu acho que :!shfoi muito difícil. Eu prefiro isso porque é mais fácil de linhas de comando compor usando registros / conclusões do buffer atual ou por exemplo, uso %/ %:hpara o nome do arquivo atual / dirname etc.
sehe
11
Este é muito legal. Eu usá-lo todos os dias .. Antes que era,: wq, fazer coisas cli, reabrir vim com o mesmo arquivo .. Grande otimização
Flashin
7
Ctrl-Z para alternar para o shell e fg <ENTER> para voltar ao vim.
Mario G.
Coloque map <Esc>! :shell<CR>seu .vimrc, e você pode iniciar o shell apenas com Alt + !, ou Alt + Shift + 1. (Mnemônico: :!{cmd}executa {cmd}com o shell.)
musiphil
:shellirá iniciar um novo nível de shell aninhado. Considerando ctrl-zque não.
26618 wisbucky
32

Isso sempre me anima:

:help 42
dogbane
fonte
31

vimcryption

vim -x filename.txt

Você será solicitado a inserir uma senha, editar e salvar. Agora, sempre que você abrir o arquivo no vi novamente, será necessário digitar a senha para visualizar.

anteatersa
fonte
Sincronizar com sua caixa de depósito e você terá um gerenciador de senhas muito bom ;-)
Luis Nell
15
Mas observe que, a menos que você set cryptmethod=blowfish(disponível apenas em 7.3+), ele utilizará um algoritmo com força de riso. Veja help encryptionpara mais detalhes.
AB
3
Por favor, não use criptografia vim, não é boa criptografia e segurança ruim é pior que nenhuma. Mais informações: github.com/neovim/neovim/issues/694
rodrigoq
2
dgl.cx/2014/10/vim-blowfish meta-tldr: "corrigido no Vim 7.4.399 [ groups.google.com/forum/#!msg/vim_dev/D8FyRd0EwlE/bkBOo-hzTzoJ] , por motivos de compatibilidade com versões anteriores necessárias para ser um novo método de criptografia, então use :set cm=blowfish2"
underscore_d
28

Crie e depure seu código no Vim!

Configuração

Na verdade não muito. Você precisa de um Makefileno diretório atual.

Compilar

Enquanto estiver no Vim, digite :makepara chamar um shell e criar seu programa. Não se preocupe quando a saída passar; basta pressionar Enterquando terminar para retornar ao Vim.

A mágica

De volta ao Vim, você tem os seguintes comandos à sua disposição:

  1. :cl lista os erros, avisos e outras mensagens.
  2. :ccexibe a mensagem de erro / aviso atual na parte inferior da tela e pula para a linha incorreta no seu código.
  3. :cc npula para a mensagem nth .
  4. :cn avança para a próxima mensagem.
  5. :cp pula para a mensagem anterior.

Há mais; se você estiver interessado, digite :help :ccno Vim.

Adam Liss
fonte
11
trabalha com mais do que apenas compilar código. Ou seja, qualquer tarefa escrita em um makefile é um ótimo uso para isso.
Dwight Spencer #
25

^ P e ^ N

Complete o texto anterior (^ P) ou o próximo (^ N).

^ O e ^ I

Vá para o local anterior (^ O - "O" para antigo) ou para o próximo (^ I - "I" próximo a "O").

Ao realizar pesquisas, editar arquivos etc., você pode navegar por esses "saltos" para frente e para trás.

Marcas

Pressione ma (marca m, a - nome da marca). Posteriormente, para retornar à posição, digite `a .

dimba
fonte
11
Uau, eu não sabia sobre ^ O e ^ I: isso é incrível. Pode valer a pena incluir :help jump-motionsetc na sua resposta, caso alguém queira mais informações.
DrAl
confira ShowMarks vim.org/scripts/script.php?script_id=152 . Isso o ajudará a lembrar onde e quais são todas as suas marcas em um buffer. você pode alternar a visualização on e off com \ mt
tester
Eu não entendo a diferença entre ^ P e ^ N ...
lajarre
@lajarre que percorrer a lista de completação disponíveis no sentido oposto
Patrick Oscity
2
Costumo usar ^ O ^ O ao abrir o Vim depois que percebi que desejo editar o último arquivo editado novamente. Economia enorme de tempo!
Patrick Oscity
24

Pressione %quando o cursor estiver entre aspas, parênteses, colchete ou colchete para encontrar sua correspondência.

Adam Liss
fonte
20
Se o cursor não estiver sobre nenhum deles, ele se desloca para a direita até atingir um deles.
do Cyber Oliveira
@ Léo: Obrigado pela dica de bônus!
23411 Adam Liss
22

Até [caractere] ( t). É útil para qualquer comando que aceite um intervalo. Meu favorito é ct;ou ct)que exclui tudo até o ponto-e-vírgula / parênteses de fechamento e o coloca no modo de inserção.

Além disso, Ge ggsão úteis (Vá para baixo e para cima, respectivamente).

MighMoS
fonte
melhor aqui, embora alguns dos outros são úteis também, eu só sabia sobre todos eles já
Funkodebat
11
Também, em fvez de t, o que irá [ação] através desse personagem; por exemplo, ter o cursor no início de um argumento de função df,o excluirá (em idiomas adequados, é claro).
Actorclavilis
t são ótimos para editar parte de uma variável camelCase. Por exemplo, se você só duplicada uma linha e necessidade de mudar firstVariable para secondVariable, posicione o cursor no início do firstVariable, então CTV
Greg
11
T e F também funcionam, mas na direção oposta.
Fede
20

^r^w para colar a palavra sob o cursor no modo de comando.

É realmente útil ao usar comandos grep ou replace.

Peter Mortensen
fonte
Se for a única palavra que você deseja, então * no modo normal procurará a palavra sob o cursor.
Idbrii 19/09/10
17

Digitar um número de linha seguido por gglevará você a essa linha.

xastor
fonte
31
: Seguido pelo número da linha faz o mesmo: 42 vai ao número da linha 42
Anti Veeranna
12
Digitar um número de linha seguido por G tem o mesmo efeito.
do Cyber Oliveira
3
<number>govai para o <number>th caractere no arquivo.
Actorclavilis
17

Eu gostaria de ter conhecido as coisas básicas do modo de bloco visual anteriormente. Mesmo que você não use o Vim para mais nada, pode ser um grande poupador abrir um arquivo no Vim apenas para algumas operações de bloco. Tenho certeza de que perdi muito tempo fazendo esse tipo de coisa manualmente.

Exemplos que achei particularmente úteis quando, digamos, refatorar listas de nomes constantes simbólicos de forma consistente:

Entre no modo Visual Block ( Ctrl+ Qpara mim no Windows em vez de Ctrl+ V)

Mova o cursor para destacar o bloco desejado.

Em seguida, I whatever textpressione Escpara inserir o texto na frente do bloco em todas as linhas.

Use em Avez de Ipara inserir o texto após o bloco em todas as linhas.

Além disso - simplesmente alternar o caso de uma seleção visual ~pode economizar muito tempo.

E simplesmente excluir colunas também, é dclaro.

Anon
fonte
15

^ y copiará o caractere acima do cursor.

innaM
fonte
6
... e ^ E irá inserir o caractere sob o cursor
muito php
não funciona para mim, ele só se move o cursor para o início do texto
Alex
14

q <letra> - grava uma macro.

e

@ <same-letter> - reproduz.

Esses são, de longe, os comandos mais úteis no Vim, pois você pode fazer com que o computador faça muito trabalho para você, e você nem precisa escrever um programa ou algo assim.

leeand00
fonte
O uso de qmatérias simplifica, mas você não é obrigado a usá-lo: basta salvar em um chamado de buffer de comando tampão "- por exemplo, usando tampão a- "ad$...
Mei
@Mei qgrava uma macro; macros podem conter comandos, não apenas texto, portanto "ad$é diferente de qa.
precisa saber é o seguinte
@ Sortofabeginner Isso é irrelevante aqui. O comando "ad $ coloca o texto no buffer ae qa o executa. #
311 Mei
2
@Mei qanão executa; qagrava e @aexecuta. É verdade que você pode escrever uma macro em texto sem formatação, armazená-la no registro acom algo como "ad$e executá-la com @a, mas isso é um pouco mais trabalhoso. Há uma diferença fundamental entre recortar e colar e gravar e executar.
precisa saber é o seguinte
Doh! Eu sabia. Obrigado pela correção
Mei
13

Abrindo vários arquivos usando guias

:tabe filepath

Navegando entre Arquivos Abertos

gt and gT or :tabn and :tabp

Salve a sessão aberta para poder voltar à sua lista de arquivos abertos posteriormente

:mksession session_file_name.vim

Abra uma sessão criada

vim -S session_file_name.vim

Feche todos os arquivos de uma só vez

:qa

Outro comando que aprendi recentemente

autocmd

Ele permite que você execute um comando em um evento; portanto, você pode, por exemplo, executar o comando make ao salvar um arquivo usando algo como:

:autocmd BufWritePost *.cpp :make
Mansuro
fonte
12

qx começará a gravar as teclas digitadas. Você pode executar praticamente qualquer tarefa de edição e o Vim se lembra dela. Pressione q novamente quando terminar e pressione @x para reproduzir as teclas digitadas. Isso é ótimo para edições repetitivas, que são muito complexas para se escrever um mapeamento. Você pode ter muitas gravações usando um caractere diferente de x .

muito php
fonte
5
Além disso, o mesmo caractere 'x' é compartilhado entre o comando da macro de registro 'q' e as pranchetas nomeadas ("x ...). Você pode deixar trechos de macros ao redor do arquivo e copiá-los para uma prancheta nomeada (por exemplo," xyy ) e depois reproduza-os (@x).
do Cyber Oliveira
E se você criar a macro impressionante nunca, poderá colar essa área de transferência no seu _vimrc com um 'let @x = ""' (colocando a macro no "") e salvá-la para sempre!
Kearns
11

Eu diria que um dos meus favoritos está colocando a janela de ajuda em uma nova guia:

:tab help <help_topic>

Isso abre a ajuda em uma nova guia e, como alguém que ama as guias do Vim, isso é ridiculamente útil.

Robert Massaioli
fonte
2
Buffers são as guias do vim. Eles são mais suportados pelo fluxo de trabalho do vim. Eu suspeito que as guias foram adicionadas apenas ao vim porque muitas pessoas não entendiam os buffers.
still_dreaming_1
Ok, logo depois de dizer isso, achei um uso para abas no vim. É verdade que se você estiver usando um buffer por guia, precisará aprender sobre buffers. Não é assim que as guias devem ser usadas no vim. Os usuários mais avançados do vim usam buffers da maneira como as guias são usadas na maioria dos programas. Muitas pessoas pensam que as guias deveriam ter sido nomeadas layouts no vim. Eles são principalmente para ter diferentes coleções de janelas abertas em diferentes guias. Você também pode ter um buffer específico para o qual você abre muito em uma guia e usa a outra guia para visualizar todos os outros buffers.
still_dreaming_1
9

cw

Alterar palavra - exclui a palavra sob o cursor e coloca você no modo de inserção para digitar uma nova. É claro que isso funciona com outras teclas de movimento, para que você possa fazer coisas como c $ para mudar para o final da linha.

personagem f +

Localiza a próxima ocorrência do caractere na linha atual. Então você pode fazer o vft para selecionar todo o texto até o próximo "t" na linha atual. É outra tecla de movimento, por isso também funciona com outros comandos.

Adam Neal
fonte
9

:b [any portion of a buffer name]para alternar buffers. Portanto, se você tiver dois buffers, "somefile1.txt" e "someotherfile2.txt", poderá alternar para o segundo simplesmente ":b 2.t<enter>". Ele também suporta a conclusão da guia, embora não seja necessário.

Falando na conclusão da guia, a configuração :set wildmode=full wildmenutambém é muito útil. Ele permite a conclusão completa da guia no modo de comando, bem como um menu muito útil no estilo ncurses de todas as correspondências possíveis ao usá-lo.

Michael
fonte
9

:% s, / pesquisa, / substituição,

Você pode usar outros caracteres que não sejam /(barra) para separar padrões para substituição. Dessa forma, você não precisa escapar das barras dos caminhos dos arquivos.

hfs
fonte
2
oh inferno sim. Eu sabia que sedtinha isso, mas não vim. Quanto mais você conhece
beerbajay