Supondo que o buffer atual seja um arquivo aberto para edição, :e
ele não será exibido E32: No file name
.
Gostaria de arrancar um ou todos:
- O nome do arquivo exatamente como mostrado na linha de status, por exemplo
~\myfile.txt
- Um caminho completo para o arquivo, por exemplo
c:\foo\bar\myfile.txt
- Apenas o nome do arquivo, por exemplo
myfile.txt
Respostas:
TL; DR
:let @" = expand("%")
>isso copiará o nome do arquivo para o registro sem nome e você poderá usá
p
-lo para colá-lo. e é claro que você pode mapear isso para uma chave para uso mais rápido.:nmap cp :let @" = expand("%")<cr>
você também pode usar isso para o caminho completo
:let @" = expand("%:p")
Explicação
O Vim usa o registro sem nome para armazenar o texto que foi excluído ou copiado (arrancado), da mesma forma que quando você o cola, o texto é lido desse registro.
Usando
let
podemos armazenar manualmente o texto no registro usando,:let @" = "text"
mas também podemos armazenar o resultado de uma expressão.No exemplo acima, usamos a função
expand
que expande curingas e palavras-chave. no nosso exemplo, usamosexpand('%')
para expandir o nome do arquivo atual. Podemos modificá-lo comoexpand('%:p')
para o nome completo do arquivo.Veja
:help let
:help expand
:help registers
para detalhesfonte
unnamedplus
como seu uso pranchetalet @+ = expand("%")
"%:h"
para obter o caminho completo sem o nome do arquivo.Quase o que você está pedindo, e isso pode fazer:
Ctrl+R %
puxa o nome do arquivo atual para onde você está (prompt de comando, editar buffer, ...). Veja esta dica do Vim para obter mais informações.fonte
Ctrl+R %
funciona enquanto estiver noinsert
modo - mas noedit
modo,Ctrl+R
significa refazer.Se você deseja colocar o nome do arquivo do buffer atual na área de transferência no nível do sistema, tente alterar o registro para @ +:
Edit 20140421: Eu costumo usá-los, então criei alguns atalhos. Aparentemente, o Linux Vims opera de maneira um pouco diferente do Mac Vims ; portanto, também existe um caso especial. Se você colocar o seguinte em seu
~/.vimrc
:Então, por exemplo
<leader>cf
, copiará o caminho relativo do buffer atual (o líder padrão é barra invertida (\
)). Costumo usá-los para executar comandos em um arquivo ou fazer outras coisas na linha de comando. Eu realmente não uso o último nome de arquivo / diretório com freqüência.Você pode considerar mapeamentos mais intuitivos, como
<leader>cfr
para relativo,<leader>cfa
para absoluto,<leader>cff
apenas para nome de arquivo,<leader>cfd
para diretório.fonte
"*
e"+
são equivalentes, para que possa suprimir os controlos plataforma e use apenas@+
Se você
:reg
ver o nome do arquivo atual no%
registro. Você pode colá-lo com"%p
, por exemplo.Se, como eu, você costuma alternar para o buffer 'alternativo', é muito útil que seu nome completo do caminho e do arquivo seja colocado no
#
registro. Você pode colá-lo com"#p
, por exemplo.Nota (apenas no caso de comportamento específico da minha instalação): Estou usando o VIM 7.4.52 no Ubuntu 14.04.4 LTS.
fonte
Combinando informações de algumas outras respostas: Se você deseja puxar o caminho completo atual para um arquivo e colocá-lo no buffer de comando em outra janela, faça-o primeiro
:let @" = expand("%:p")
e depois vá para outra janela e digiteCtrl+R "
.Útil para copiar um arquivo enquanto permanece no mesmo diretório e mantém o antigo aberto. Por exemplo:
fonte
Aqui está a minha solução:
fonte
Eu uso o xclip para acessar a área de transferência do X, então eu uso:
fonte