Como insiro o nome do arquivo atual no conteúdo do Vim?

35

Após algumas pesquisas, eu pude saber que :echo @% exibe o nome do arquivo atual na linha inferior da tela do vim.

Eu gostaria de despejar o nome do arquivo (com e sem caminho completo) no conteúdo do arquivo sem deixar vim .

Existe alguma maneira de fazer isso?

    
por mtk 04.12.2012 / 15:31

5 respostas

25

Tenho certeza de que existem outras maneiras de fazer isso ... mas o comando principal que você quer é :r[ead] , que insere 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 
    
por 04.12.2012 / 15:41
35

O nome do arquivo atual está no registro "% , para que você possa inseri-lo (no modo de inserção) com <c-r>% ; o caminho completo pode ser inserido com <c-r>=expand("%:p") . Você poderia fazer uma macro dela, se você usá-lo com freqüência. Para mais, truques semelhantes, consulte :h expand e :h "= .

    
por 04.12.2012 / 15:55
13

Como pode ser visto em :h registers , o "% register contém o nome do arquivo atual. O comando :pu[t] insere o conteúdo de um registro no texto.

Então, para inserir o nome do arquivo atual, você pode digitar qualquer um deles, 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 "rp você pode colar o conteúdo do registro "r .

    
por 04.12.2012 / 22:55
4

Uma maneira simples é executar:

!!echo %
  • !! está substituindo a linha atual pelo resultado do comando.

  • % é substituído pelo nome do arquivo editado no comando, de modo que isso 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ê quiser retirá-lo e reter apenas o nome do arquivo, execute

!!basename %
    
por 04.12.2012 / 15:40
0

Se você precisar fazer isso com frequência, pode ser útil associar uma sequência de teclas ao que você deseja, conforme link

inserts the current filename without the extension at the cursor position, when you are in insert mode.

:inoremap \fn <C-R>=expand("%:t:r")<CR>

To keep the extension use:

:inoremap \fn <C-R>=expand("%:t")<CR>

To insert the absolute path of the directory the file is in use:

:inoremap \fn <C-R>=expand("%:p:h")<CR>

To insert the relative path of the directory the file is in use:

:inoremap \fn <C-R>=expand("%:h")<CR>

O acima de tudo funciona diretamente em vim para a sessão, ou você pode colocá-lo no .vimrc (onde o cólon inicial na linha é opcional).

    
por 20.10.2017 / 20:36

Tags