Respostas:
Tenho certeza de que existem outras maneiras de fazer isso ... mas o comando principal que você deseja é :r[ead]inserir a saída de um comando no buffer.
Então, para inserir apenas o nome do arquivo:
:r! echo %
E, para incluir o caminho completo:
:r! echo %:p
Para mais informações:
:help read
:help filename-modifiers
O nome do arquivo atual está no "%registro, para que você possa inseri-lo (enquanto estiver no modo de inserção) com <c-r>%; o caminho completo pode ser inserido com <c-r>=expand("%:p"). Você pode fazer uma macro se a usar com frequência. Para mais, truques semelhantes, consulte :h expande :h "=.
<c-r>especifica que o próximo caractere é um registro.
"%pnos modos normal ou visual.
Como pode ser visto em :h registers, o "%registro contém o nome do arquivo atual. O :pu[t]comando insere o conteúdo de um registro no texto.
Portanto, para inserir o nome do arquivo real, você pode digitar um destes, no modo de comando:
:put %
ou
"%p
Para inserir o nome do arquivo com o caminho completo, digite
:put=expand('%:p')
no modo de comando.
Mais informações:
:h pu[t]
Digitando, "rpvocê pode colar o conteúdo do registro "r.
:put "%:p"não parece trabalhar para mim. Parece funcionar apenas com expand () , como em :put =expand('%:p'):, o que o torna não menos complicado do que <c-r>=expand('%:p')infelizmente.
Uma maneira simples é executar:
!!echo %
!! está substituindo a linha atual pelo resultado do comando a seguir.
% é substituído pelo nome do arquivo editado no comando, para que ele efetivamente insira esse nome no arquivo editado.
O nome do arquivo é aquele que você passou para o comando vi (m) e pode conter um caminho relativo ou absoluto. Se você desejar removê-lo e reter apenas o nome do arquivo, execute
!!basename %
Se você precisar fazer isso com frequência, pode ser útil vincular uma sequência de chaves ao que você deseja, conforme http://vim.wikia.com/wiki/Insert_current_filename
insere o nome do arquivo atual sem a extensão na posição do cursor, quando você estiver no modo de inserção.
:inoremap \fn <C-R>=expand("%:t:r")<CR>Para manter a extensão, use:
:inoremap \fn <C-R>=expand("%:t")<CR>Para inserir o caminho absoluto do diretório em que o arquivo está sendo usado:
:inoremap \fn <C-R>=expand("%:p:h")<CR>Para inserir o caminho relativo do diretório em que o arquivo está sendo usado:
:inoremap \fn <C-R>=expand("%:h")<CR>
Acima, todos trabalham diretamente vimpara a sessão ou você pode colocá-lo no .vimrc(onde os dois pontos principais na linha são opcionais).
Eu estava pesquisando no Google uma maneira mais simples de inserir o nome do arquivo atual (sem caminho ou extensão) na posição atual (sem nova linha, sem substituir a linha atual). Então, combinando respostas anteriores e este link , é isso que eu estava procurando.
No modo de inserção :
<C-R>=expand("%:t:r")
Da próxima vez (com o comando já no histórico):
<C-R>=<UP>
<c-r>mapeado como o comando refazer?