Como descobrir qual arquivo está aberto no vim?


61

Isso pode parecer trivial, mas, em mais de uma ocasião, eu me esqueci de qual arquivo vimeu abri (por exemplo, quando eu estou examinando arquivos de log diferentes) e a única maneira que eu sabia descobrir era fechar o arquivo e procure no histórico de comandos o comando mais recente.

Existe um comando no vim para informar qual arquivo você abriu no momento sem sair do programa ou o arquivo que você abriu (por exemplo :<which_file_cmd>?)


5
Se você não ligou vimcom tantos argumentos, use :args.
41754

Respostas:


76

Além da resposta do uprego , você pode pressionar Ctrl+ G(no modo normal) para obter o nome do buffer atual, bem como o número total de linhas nele e sua posição atual nele.

Atualizar

Conforme o comentário do rxdazn , você pode pressionar 1antes de Ctrl+ Gpara obter o caminho completo do arquivo. Se você pressionar 2, obterá o caminho completo do arquivo e o número do buffer que você abriu no momento (útil quando você tiver aberto vários arquivos vim).


Como muitos comandos vim, isso também se aplica ao lesscomando que eu uso ao visualizar arquivos em vez de editar.
jmathew

18
Também, pressionando 1 antes Ctrl + G lhe dá o caminho completo do arquivo
rxdazn

23

Quando em, vimeu sempre uso o :lscomando

Exemplo

:ls
  1 %a   "blah.txt"                         line 1

Onde blah.txtestá o nome do arquivo.


20
:f

fornece o nome do arquivo aberto no momento.


1
brilhante e muito minimalista
anfíbio

7

Quando vimnão é chamado com muitos argumentos, :argsé útil.


4
O outro problema é que, se o arquivo foi aberto após o lançamento do vim, ele não será listado.
Patrick

4

Se você pode ter um arquivo de configuração padrão do vim, pode adicionar um statuslinepara sempre ter os detalhes do arquivo disponíveis. Entendo que, se você estiver constantemente remotando em servidores diferentes, isso não ajudará muito. Aqui está o meu um pouco complexo retirado do meu .vimrc.

" %F(Full file path)
" %m(Shows + if modified - if not modifiable)
" %r(Shows RO if readonly)
" %<(Truncate here if necessary)
" \ (Separator)
" %=(Right align)
" %l(Line number)
" %v(Column number)
" %L(Total number of lines)
" %p(How far in file we are percentage wise)
" %%(Percent sign)
set statusline=%F%m%r%<\ %=%l,%v\ [%L]\ %p%%

" Change the highlighting so it stands out
hi statusline ctermbg=white ctermfg=black

" Make sure it always shows
set laststatus=2

E parece assim no MacVim (mas funciona também em terminais). insira a descrição da imagem aqui

Como sempre, você pode fazer :help statuslinepara obter mais algumas opções e detalhes. E confira o manual Learning Vim the Hard Way, capítulo 17, para obter uma boa explicação da linha de status.


Eu sempre uso statusline também. 1
Rob

1

Há também :echo @%, que fornece o nome do arquivo em relação ao diretório atual.


1

Existem inúmeras maneiras de obter esse tipo de informação, mas se você deseja algo para pressionar apenas uma tecla e o nome do arquivo será exibido, insira o seguinte no seu ~/.vimrc:

map <F4> <ESC>:file<CR>

Isto diz,

bind the `F4' key to the following sequence: Escape-key, :file, Carriage-Return (enter-key)

E o filecomando, como provavelmente aparente, retorna o nome do arquivo atual junto com outras informações.

Você também pode configurar uma linha de status para não precisar fazer nada além de procurar.

Para manter a linha de status, sempre insira o seguinte no seu ~/.vimrc:

set laststatus=2

Isso diz ao ViM para sempre exibir uma linha de status; outras opções são 0, para nunca, e 1somente quando você tem duas ou mais janelas abertas no ViM.


1

Normalmente, apenas digito :e e isso me mostra o caminho completo do arquivo e o número de linhas e caracteres também.

Advertência : reabre o arquivo do disco essencialmente, por isso é mais útil quando o arquivo já está salvo.

:help :e diz:

                          *:e* *:edit*
Edit the current file.  This is useful to re-edit the
current file, when it has been changed outside of Vim.
This fails when changes have been made to the current
buffer and 'autowriteall' isn't set or the file can't
be written.

1

Eu meu vimrc eu tenho esse mapeamento

nnoremap <leader>pfn :echo expand('%:p')<CR>

Portanto, se eu digitar ,pfn, ou "imprimir nome do arquivo", ele repetirá todo o caminho do arquivo.

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.