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.

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

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:


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

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.



3

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

:echo resolve(expand('%:p'))

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).


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>

1
Esta é a mesma resposta que a feita por thameera na mesma pergunta.
Statox


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

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.