O Vim tem algo como <Cw> no modo de inserção que exclui de volta um Word?


5

No modo de inserção, o Vim excluirá a wordse você pressionar <C-w>(control + w). Existe um comando semelhante que exclui de volta a Word?

(Por exemplo, excluiria tudo em http://www.example.comvez de apenas a comparte.)

Caso contrário, estou pensando em mapear <C-BS>(controle + backspace) para fazer isso.

Respostas:


2

Não, não existe esse comando interno, mas o seguinte deve ser útil:

:inoremap <silent> <expr> <C-S-BS>
\   col('.') == 1 ?
\       '<C-w>' :
\       col('.') >= col('$') ?
\           '<C-o>:normal! Bd$<CR>' :
\           '<C-o>:normal! m"Bdg`"<CR>'

Quando no início da linha, apenas executa o <C-w>comando para se juntar à linha anterior. No final da linha, ele retorna à WORD e exclui o restante. Caso contrário, ele estabelece uma marca temporária m", retorna uma PALAVRA Be exclui essa parte do texto.

Editar: corrigido para o cursor no final da linha


Isso é bom, mas um pouco de buggy. Se meu cursor estiver diretamente em seguida whatevere eu o usar, acabo com as rsobras. Se meu cursor estiver depois whatever (após o espaço), ele excluirá a palavra inteira, mas deixará dois espaços após a palavra anterior.
Nathan Long

Isso parece funcionar para mim: imap <C-BS> <C-o>vBd. Você parece ter mais Vim-fu do que eu. Você vê alguma desvantagem? Se não, você deseja incluir isso na sua solução?
Nathan Long

Usando o modo visual; isso é inteligente! Infelizmente, ele só funciona com :set selection=exclusivee atrapalha a seleção visual, o que um mapeamento bem-comportado não deve fazer.
Ingo Karkat 04/12/12

Ah, eu não testei para o fim da linha; Eu editei em uma correção. Agora é ainda mais feio do que sua alternativa.
Ingo Karkat 04/12/12

1

Se eu entendi, você está em um arquivo no modo de inserção com o cursor em um caractere em algum lugar no 'com' e pressiona <c-w>para excluir http://www.example.come permanecer no modo de inserção?

blabla ffd http://www.example.com fds fsdf dsfd

este mapa chave faz o truque: imap <C-w> <ESC>lciW

<ESC> -> vá normal

l -> vá para a direita (porque ao pressionar ESC, ele vai para a esquerda)

ciW -> substitua todo o Word e entre no modo de inserção


Isso vai ao contrário? Você não precisa usar B?
Scott Scott

No meu exemplo, meu cursor está em algum lugar http://www.example.com, então, depois de definir esse 'inoremap', ele exclui tudo http://www.example.come permanece no modo de inserção. Mas sim, se eu estivesse no primeiro espaço ao lado http://www.example.com, não funcionaria.
precisa saber é o seguinte

-1

enquanto no modo de inserção, Ctrl+OseguidadB

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.