Como posso ver o caminho completo do arquivo atual?

123

Quando estou editando um arquivo no Vim, existe um comando para ver o caminho do arquivo atual? Às vezes, isso é muito útil se houver vários arquivos com o mesmo nome em um projeto.

thameera
fonte

Respostas:

143

Você pode pressionar {count}Ctrl-G:

{count}CTRL-G       Like CTRL-G, but prints the current file name with
                    full path.  If the count is higher than 1 the current
                    buffer number is also given.

Pressionar 1seguido de Ctrl+ Gmostra o caminho completo do arquivo atual. Se {count}for maior que 1, o nome do buffer também será mostrado.

(Pressionar apenas Ctrl+ Gmostra o caminho relativo ao diretório de trabalho atual do Vim, conforme apontado por Jasper nos comentários.)

Você pode usar o seguinte comando no seu .vimrcpara adicionar o caminho completo à linha de status, para que esteja sempre visível:

set statusline+=%F
thameera
fonte
4
Não é Ctrl+Gmais como 'caminho em relação ao cwd do vim'?
Jasper
@ Jasper Boa captura! Atualizado a resposta.
thameera 03/02
4
Parece C-gser o padrão para 0C-ge 2C-gmostra também o número do índice do buffer (começando em 1).
Estou muito feliz por ser o 100º a votar sua resposta! Obrigado por isso 1C-g!
vault
53

Registrar %contém o nome do arquivo atual.

Os seguintes comandos podem ser inseridos para exibir as informações mostradas:

:echo @%                |" directory/name of file
:echo expand('%:t')     |" name of file ('tail')
:echo expand('%:p')     |" full path
:echo expand('%:p:h')   |" directory containing file ('head')

Se tudo o que se deseja é para exibir o nome do atual do arquivo, tipo :f/ :lsou pressione Ctrl- g(para a imprensa caminho completo 1, em seguida, Ctrl- g).

No modo de inserção, digite Ctrl- e rdepois %para inserir o nome do arquivo atual.

Os seguintes comandos inserem linhas que consistem no caminho completo dos arquivos atuais e alternativos no buffer:

:put =expand('%:p')
:put =expand('#:p')

Fonte: Obtenha o nome do arquivo atual no vim wikia

Palavras-chave:

kenorb
fonte
2
Pode ser interessante notar que você também pode usar essas =expand...expressões depois do Ctrl-Rmodo de inserção.
dash-tom-bang
22

Você pode usar :!ls %:ppara obter o caminho completo para o arquivo atual.

Dependendo do contexto ex, %significará o conteúdo do arquivo ou o nome do arquivo. Ao descascar, representa o caminho do arquivo em relação ao diretório atual. O comando ' %:p' adicionará o modificador de nome de arquivo do caminho completo a %.

Existem alguns outros modificadores de nome de arquivo interessantes, como:

  • :~: Obtenha o caminho do arquivo relativo ao diretório inicial (este não funcionou para mim por algum motivo)
  • :.: Obtém o caminho do arquivo relativo ao diretório atual ( %padrão)
  • :r: Nome do arquivo raiz. O nome do arquivo sem a extensão.
  • :e: Extensão do arquivo.
  • :h: Divida /e retorne a metade esquerda (ou seja, se eu estiver editando um arquivo no caminho /tmp/test.txte execute %:p:h, retornará/tmp
  • :t: Divida /e retorne a metade direita (ou seja, se eu estiver editando um arquivo no caminho /tmp/test.txte execute %:p:t, retornarátext.txt
CharlesL
fonte
Eu acho que você quis dizer%: p: t retornará text.txt
John O'M.
@ JohnO'M. sim, isso mesmo, obrigado: D. Fixo.
precisa
7

Pode-se ver o diretório de trabalho atual com :pwd. Obviamente, este é apenas o diretório, e não o nome do arquivo. Para obter o diretório de trabalho e o nome do arquivo, podemos usar o registro especial %, que contém informações sobre o arquivo atual.

Se você usar :echo @%, obterá o diretório e o nome do arquivo atual.
Se você usar :echo expand('%:p'), obterá o caminho completo e o nome do arquivo atual. Isso é muito semelhante à resposta de CharlesL .

Lembro-me este, porém, porque se você usar a ajuda de vim :h expand, então ele menciona que %e %:pe seus familiares.

davidlowryduda
fonte
4

Eu uso:

:f[ile]

Isso é :fou :file.

Estou surpreso que ninguém mencione isso nas respostas, estou perdendo alguma coisa?

Cédric Van Rompay
fonte
Simples e útil
Morteza Ziyae
3

Para mostrar o caminho completo de todos os arquivos, incluindo links simbólicos resolvidos, use o seguinte.

:echo resolve(expand('%:p'))
joelostblom
fonte
3

Já existem respostas melhores, mas se (por algum motivo) você quiser usar o shell para obter o caminho completo do arquivo (isso é mais útil se você for realizar alguma outra operação no arquivo com o shell), Em um sistema semelhante ao Unix, você pode executar:

:!realpath %

ou:

:'<,'>!realpath %

para inserir o caminho no documento sobre a seleção atual.

O registro %sempre contém o nome do arquivo. Um exemplo do mundo real pode ser se você estiver editando um arquivo de configuração, mas não tiver permissões de gravação (e não desejar executar o Vim como root), poderá editar o arquivo e, em seguida, execute:

:w ! sudo tee %

para salvar o arquivo (um pouco offtopic lá, mas é um bom exemplo do que mais pode ser feito com o %registro).

Sam Whited
fonte
realpathnão é POSIX, por isso pode ser mais simples:!echo "$PWD/%"
muru
Acordado; boa decisão.
Sam Whited
2

Você precisa definir sua linha de status para estar visível e também defini-la como caminho. Fiz isso permanentemente adicionando as duas linhas abaixo ao meu ~ / .vimrc

set laststatus=2
set statusline+=%F

Se você quiser apenas executar isso uma vez. Então, ao exibir um tipo de documento

:set laststatus=2       <ENTER>
:set statusline+=%F     <ENTER>
user34612
fonte
1
Esta é a mesma resposta que a feita por thameera na mesma pergunta.
Statox
1

Eu uso o vim airlines para isso e alguns recursos interessantes:

insira a descrição da imagem aqui

goldylucks
fonte
1

Você pode mostrar o caminho completo do arquivo que está editando na barra de título, o que é uma maneira conveniente de mostrar o caminho do arquivo na minha opinião.

Para fazer isso, você precisa definir a titleopção e titlestring. Atual, estou usando as seguintes configurações:

set title
set titlestring=%{hostname()}\ \ %F\ \ %{strftime('%Y-%m-%d\ %H:%M',getftime(expand('%')))}

Ele mostrará o nome do host do Vim, o caminho completo do arquivo e o tempo da última modificação do arquivo. Veja a figura abaixo para uma demonstração

insira a descrição da imagem aqui

jdhao
fonte