Eu uso um exemplo de código javascript:
1 var a = 1;
2 var b = |{};
O cursor está na posição de |
(no caractere "{" quando a forma do cursor é um bloco), descubro que desejo a
que seja atribuído um objeto a ele, então desejo modificá-lo como abaixo:
1 var a = {};
Então, eu quero saber quando o cursor está em "{", como excluir rapidamente todo o conteúdo antes de "{" até o espaço em branco após o sinal "=" na linha 1?
Em outros editores normais, pressionarei a tecla backspace para excluir o código. Mas não sei como conseguir isso no vim.
insert-mode
normal-mode
Aaron Shen
fonte
fonte
i
e usar a tecla Backspace. Nenhum corpo vai atirar em você por isso. Eu acho que.eol
em seguida, backspace vai eliminar quebras de linha. Você também precisarástart
ser incluído na configuração. (Veja:help backspace
). Não use esse método! Existem vários métodos muito mais rápidos detalhados nas respostas abaixo.Respostas:
Não tenho certeza se entendi totalmente a pergunta, mas se você deseja excluir até ter apenas
var a = {};
, você pode, na posição do cursor, usard?1Enterdfaz um movimento e você pode atribuir a ele um padrão de pesquisa /para uma pesquisa ?para frente ou para uma pesquisa para trás.
Aqui está um pequeno gif demonstrando isso:
fonte
Enter
após digitard?1
.Se você estiver usando o vim (e não o vi clássico), no seu exemplo, você pode fazer
vkd
(ouvkx
).v
colocará no modo 'visual' (selecione)k
subirá uma linha para colocar o cursor no '1', selecionando a parte que você deseja excluird
oux
excluirá a seleçãofonte
Excluir
Para este exemplo específico,
dgk
é uma das maneiras mais rápidas de fazer isso.O
d
comando, como Akshay explicou , pode ser seguido por um movimento, excluindo todos os caracteres entre o local onde o cursor começa e para onde o movimento o leva.No seu código, você deseja excluir tudo entre a posição do cursor e a mesma coluna uma linha mais acima, de modo que mover o cursor para cima com o
gk
movimento (que quando usado com um operador não é linear) alcançará seu objetivo.EDIT: BobH aponta nos comentários que este método só funciona quando
'wrap'
está definido. Como tal, a menos que você sempre tenha um conjunto de envoltórios, provavelmente será melhor usardvk
ouvkd
, conforme sugerido pelas outras respostas nesta página.Excluir palavras para trás
Você também pode usar:
d5b
oud4B
, que excluirá 5 palavras ou 4 PALAVRAS para trás, respectivamente. (1;
é uma PALAVRA, mas duas palavras regulares).fonte
vim -u NONE -U NONE
e exclui as duas linhas.gk
como caractere aparentemente requer:set wrap
(um pouco enigmaticamente). Eu não conseguia descobrir por que isso aparentemente funcionava para todo mundo, menos para mim, quando a ajuda dagk
mesma forma parecia sugerir que deveria funcionar. A única pista era que o significado principalgk
tinha a ver com linhas quebradas. Depois que tentei colocar o wrap (meio que por capricho), pronto, funcionou.Ainda não posso comentar, por isso preciso fazer uma nova resposta. As chaves d kfornecidas por Rich não funcionam para mim, mesmo ao usar a opção nocompatível. Um motivo pode ser que o movimento kseja considerado no sentido da linha pelo vim, caso em que as duas linhas serão excluídas. De
:help d
:Também mostra o remédio: use dvkpara forçar o movimento a ser inteligente. Isso faz o truque para mim.
Eu não sabia o_v antes, então aqui está
:help o_v
:fonte