Como obtenho o nome e a extensão do arquivo atual?


24

Existe uma maneira de obter o nome e a extensão de um arquivo usando o vimscript?

Nesse caso, gostaria do nome e da extensão separadamente.


"um arquivo"? Qual arquivo? Aquele no buffer atual? Um arquivo em algum lugar no caminho de pesquisa?
Muru

O arquivo que o usuário abre via `vim <nome do arquivo>
iProgram


Eu não quero o caminho completo. Eu só quero o nome e a extensão do arquivo. Não é o caminho que eu também quero usar isso no vimscript.
IProgram 8/03/15

Sim, ambas as respostas são realmente na questão ligada (especificamente, de CharlesL resposta) ...
Martin Tournoij

Respostas:


27

De :he filename-modifiers:

    :t      Tail of the file name (last component of the name).  Must
            precede any :r or :e.
    :r      Root of the file name (the last extension removed).  When
            there is only an extension (file name that starts with '.',
            e.g., ".vimrc"), it is not removed.  Can be repeated to remove
            several extensions (last one first).

    :e      Extension of the file name.  Only makes sense when used alone.
            When there is no extension the result is empty.
            When there is only an extension (file name that starts with
            '.'), the result is empty.  Can be repeated to include more
            extensions.  If there are not enough extensions (but at least
            one) as much as possible are included.
Examples, when the file name is "src/version.c", current dir
"/home/mool/vim":
  :p                    /home/mool/vim/src/version.c
  :t                                       version.c
  :t:r                                     version
  :e                                               c

Você pode usar a expandfunção para expandi-los e obter seus valores:

:let b:baz=expand('%:e')

Por exemplo:

$ vim '+ exe ":normal i" . expand("%:t") . "^M" . expand("%:e")' +wqa foo.bar; cat foo.bar
foo.bar
bar

:t" Deve preceder qualquer: r ou: e", ainda :e"só faz sentido quando usado sozinho". Pelo exemplo, eu ficaria do lado do último, mas interessante que os documentos se contradizem lá.
precisa saber é o seguinte

@SnoringFrog Acredito que isso significa que você não pode fazer :e:t, mas :t:eé permitido, se não tiver sentido.
Muru

Oh, eu vejo como isso poderia ser lido dessa maneira. Isso faz sentido então.
SnoringFrog

10

Você pode usar expand(), veja:h expand()

Em um script, você pode fazer isso para obter o nome do arquivo:

let file_name = expand('%:t:r')

Para obter a extensão que você pode fazer:

let extension = expand('%:e')

A expand()função pode expandir curingas e símbolos especiais . Aqui eu usei o %que se expande para o nome do arquivo atual.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.