Respostas:
Como o vim usa o sinal de porcentagem para fazer referência ao buffer atual, você pode usá-lo para obter tudo rapidamente.
:%yirá puxar todo o buffer
:%y+para o +registrador (e presumivelmente a área de transferência, desde que o vim tenha sido compilado com as opções apropriadas).
:%de :%d+fará o mesmo para exclusão.
Em cada um desses casos, o cursor permanece no lugar.
C-oduas vezes para voltar.
Outra solução é usar um plugin chamado vim-textobj-whole . Por padrão, esse plug-in fornece o objeto de texto aepara todo o buffer, iepara todo o buffer, exceto linhas vazias à esquerda e à direita.
Este plugin depende do vim-textobj-user do mesmo autor, o que permite que os usuários definam qualquer objeto de texto confortavelmente. Existem muitos plugins que fazem bom uso disso.
Por padrão, não há objeto de texto para o arquivo inteiro, mas é possível criá-los usando omap. Nesse caso, seria algo parecido com isto:
onoremap f :<c-u>normal! mzggVG<cr>`z
Aqui está um detalhamento de como funciona:
onoremap f " make 'f' the text object name
:<c-u> " use <c-u> to prevent vim from inserting visual selection marker at the beginning of the command automatically.
normal! " use normal to make key presses ignoring any user mappings
mzggVG<cr>`z " make a marker in register z, select the entire file in visual line mode and enter the normal command, and go back to the z marker
Notas:
Ctrlupode ser usado no modo de linha de comando para excluir tudo à esquerda da posição do cursor. A razão pela qual isso é feito é porque, se você inserir a linha de comando diretamente do modo visual, ela será inserida automaticamente '<,'>na linha de comando, e não é isso que queremos. Eu também sugiro que você use algo diferente f, porque fnormalmente é usado para passar para o próximo caractere pesquisado na linha. Por exemplo, fiirá para o próximo ina linha atual.
Tópicos de ajuda relevantes:
:help omap-info
:help :normal
:help c_CTRL-U
:help v_:
``ao final retornará o cursor para o local anterior.
Aqui estão alguns mapeamentos rápidos e sujos para realizar a tarefa:
nnoremap yY :%yank <c-r>=v:register<cr><cr>
nnoremap dD :%delete <c-r>=v:register<cr><cr>
Agora você pode usar yYe dDpara puxar / excluir respectivamente. Não é tão bom quanto usar um objeto de texto completo, mas às vezes as soluções mais simples são as melhores.
Para obter mais ajuda, consulte:
:h :y
:h :d
:h [range]
:h v:register
:h c_ctrl-r
:h @=
mmgg"+yG`me nunca pensei nisso. Obrigado, isso está indo bem no .vimrc.