1
Você pode obter esses ou melhores mapeamentos de comando (mindinho) muito rapidamente. Não estou recomendando esta solução, mas como exemplo, se você quiser mover o cursor para o início da linha, <C-a>
poderá executar a seguinte linha depois de :
sair do modo normal (ou adicionar a linha ao seu vimrc)
inoremap <C-a> <C-o>0
ou, se o início da linha significa o primeiro caractere não em branco da linha
inoremap <C-a> <C-o>^
Curioso, acabei de testar esses mapeamentos no buffer no qual estou escrevendo esta resposta e fiquei confuso por um momento porque eles não funcionaram. Então percebi que tinha esquecido de entrar no modo de inserção. Parece difícil deixar o modo de inserção para executar comandos no modo normal. Você pode descobrir depois de usar o Vim por um tempo que é o inverso - que você permanece no modo normal enquanto pensa e só faz excursões para inserir o modo em ocasiões específicas. Provavelmente, o Vim vale apenas (ou principalmente) o aprendizado, se você achar que faz mais edição do que escrevendo texto.
Portanto, é parte de uma resposta à sua pergunta sobre a execução rápida de comandos no modo normal a partir do modo de inserção <C-o>
, que permite sair temporariamente do modo de inserção para executar um comando no modo normal e entrar novamente. Leia sobre isso em :help i_Ctrl-o
. Isso é útil para conveniências pontuais. Uma rota mais sustentável é provavelmente tentar adotar o modo normal como padrão para navegação e edição e entrar no modo de inserção apenas quando você realmente deseja inserir novos caracteres manualmente no buffer.
2
Seus exemplos são muito gerais, por isso é difícil dar respostas específicas. Vou criar um exemplo específico na esperança de que se encaixe ou seja traduzível para algo que você encontrar. Para o seu número 1, depende de como você sabe para onde o parêntese de fechamento deve ir. digamos que eu tenho uma linha como
let cchar = s:cchar["atx"]
Isso deve ser uma linha do VimL, a linguagem de script do vim, e (ou algo parecido) ocorre em um arquivo de sintaxe do Vim em que estou discordando. Digamos que eu queira alterar a parte direita dessa expressão para uma chamada de função, talvez porque a função forneça padrões quando o dicionário s:cchar
ainda não tiver um valor atribuído à "atx"
chave. Com o cursor (no modo normal) no primeiro caractere, 'l', devo digitar
f=wcf[MyFunction(<Esc>$r)
Resumidamente, isso diz
f=
- avance para '=' (eu poderia ter dito fs
, mas provavelmente não pararia o suficiente para ver que os 's' que eu quero alcançar são os primeiros na linha, então eu iria para o personagem que é obviamente único e continue a partir daí)
w
- próxima palavra, agora meu cursor está no 's' de 's: cchar'
cf[
- mude para encaminhar para '['
Neste ponto, a linha parece
let cchar = |"atx"]
onde |
está o cursor e eu estou no modo de inserção. Digito MyFunction(
e saio do modo de inserção ( <Esc>
).
$
- mova o cursor para o final da linha. Eu poderia ter usado E
para o final da palavra grande ou f]
para a frente para ']' ou alguma outra moção, mas $
me ocorreu primeiro.
r)
- substitua o caractere sob o cursor por um ')'
Agora mudei a expressão de atribuição de atribuir de um dicionário de script local para usar o valor de retorno de uma função e, ao fazê-lo, apresentei parênteses. Não sei como é a sua necessidade particular de parênteses, talvez seja muito diferente; nesse caso, haverá uma sequência de comandos diferente para alcançá-lo. Se eu parasse para pensar mais no meu exemplo inventado, também encontraria maneiras mais eficientes de conseguir isso, mas quem tem tempo para parar e pensar.
(Experimente, copie e cole (desculpe, arranque) o texto e o comando para um buffer e, com o cursor no primeiro caractere, 'f', do comando hit y$
. Agora, o comando está no seu registro sem nome. Vá para o início da primeira linha e pressione :normal <C-r>"
a) para entrar no modo de linha de comando, b) começar a executar um comando de modo normal a partir da linha de comando ec) colar ( atchoo put) o registro sem nome na linha de comando como normal comando de modo a ser executado. A única coisa que você precisa alterar no comando é substituir a <Esc>
série de caracteres falsos (porque você copiou o atchoo do seu navegador) pelo código da tecla Escape real, exclua-o e pressione <C-v>
e, em seguida, pressione a tecla Esc. Será algo como^[
. Agora pressione return para executar o comando. Ou ... apenas digite a sequência de teclas para testar os comandos, eu só queria mostrar que você pode interagir com o modo normal também no modo cmdline, e <C-v>
, e <C-r>
, e todas as outras glórias do país das maravilhas. Veja também :help Cmdline-mode
.)
3
Para excluir uma palavra para trás, você pode usar o mapeamento padrão <C-w>
(consulte :help i_Ctrl-w
). Não sei se existe um mapeamento padrão para excluir uma palavra, mas suponho que você possa fazer uma com
inoremap <C-S-w> <C-o>dw
Mais uma vez, <C-o>
você sairá do modo de inserção para um comando único e dw
"excluirá" o movimento "word". Veja :help d
, :help w
. Se as palavras avançadas que você exclui não são palavras reais, mas nomes de classe.função #, você pode usar W
(consulte :help W
). Se você já está principalmente no modo normal você não precisa desses mapeamentos, basta fazer dw
, db
ou amigos.
Alguns capítulos ajudam a examinar mais de perto
:help <C-o>
:help Insert
:help f
e as seções seguintes ( F
, t
, T
, ;
e ,
)
:help word-motions