Respostas:
Como o vim usa o sinal de porcentagem para fazer referência ao buffer atual, você pode usá-lo para obter tudo rapidamente.
:%y
irá 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).
:%d
e :%d+
fará o mesmo para exclusão.
Em cada um desses casos, o cursor permanece no lugar.
C-o
duas vezes para voltar.
Outra solução é usar um plugin chamado vim-textobj-whole . Por padrão, esse plug-in fornece o objeto de texto ae
para todo o buffer, ie
para 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 f
normalmente é usado para passar para o próximo caractere pesquisado na linha. Por exemplo, fi
irá para o próximo i
na 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 yY
e dD
para 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`m
e nunca pensei nisso. Obrigado, isso está indo bem no .vimrc.