Atalho para abrir o arquivo no Vim


123

Quero abrir um arquivo no Vim, como no Eclipse, usando Ctrl+ Shift+ Rou através doCtrlN opção + do preenchimento automático. Chame um atalho de teclado, digite o nome / padrão do arquivo e escolha entre todos os nomes de arquivos correspondentes.

Eu sei abri-lo normalmente como:

:tabe <filepath>
:new <filepath>
:edit <filepath>

O problema aqui é que eu tenho que especificar todo o caminho do arquivo nesses casos.


1
Observe que os comandos sugeridos têm efeito diferente: :tabeabrirão o arquivo em uma nova guia, :newdividirão a janela horizontalmente e :editfecharão o arquivo atual antes de abrir o novo.
Skippy le Grand Gourou 22/10/2013

Respostas:


61

Recentemente me apaixonei por fuzzyfinder.vim ... :-)

: FuzzyFinderFile permitirá que você abra arquivos digitando nomes ou padrões parciais.


141

O que normalmente faço é e .(e-space-dot), que me fornece um diretório atual navegável - então eu posso /- procurar por fragmentos de nome, assim como encontrar uma palavra em um arquivo de texto. Acho isso geralmente bom o suficiente, simples e rápido.


22
Você não precisa de espaço, economizando 25% de digitação adicional. ( :e.)
219 Konrad Rudolph

67
Você não precisa do ponto se usar uma letra maiúscula e, por exemplo: E <ENTER>
Andriy Drozdyuk 19/07/10

2
@drozzy Isso acontece com o vim :-)
DerMike 4/12/12

7
Há uma diferença no comportamento entre :e.e :Eembora: se o arquivo atual foi editado e ainda não foi salvo, o primeiro reclamará (como :edit) por causa de "nenhuma gravação desde a última alteração", enquanto o segundo dividirá a janela horizontalmente (como :new) para permitir a abertura de um novo arquivo (enquanto ambos substituirão o arquivo atual pelo novo arquivo se ele não tiver sido modificado (como :edit)).
Skippy le Grand Gourou 22/10

1
Se você abrir um arquivo, em seguida, substituí-lo por um segundo arquivo, você pode voltar ao primeiro usando "e #"
dkretz

33

:find é outra opção.

Abro o vim a partir da raiz do meu projeto e tenho o pathconjunto para lá.

Em seguida, posso abrir arquivos localizados em qualquer lugar da árvore usando:

:find **/filena< tab >

A guia será preenchida automaticamente através de várias correspondências. ( **diz para pesquisar recursivamente pelo caminho).


Não acho útil, :finddesde que, para obter o caminho relativo ao diretório de trabalho. Veja a pergunta e a resposta @romainl aqui: stackoverflow.com/questions/28224168/… . Acho a resposta @strager mais interessante para facilitar o caminho relativo ao diretório de trabalho.
precisa saber é

25

Você pode procurar um arquivo no caminho atual usando **:

:tabe **/header.h

Clique na aba para ver várias conclusões se houver mais de uma correspondência.


Eu tentei usar isso, mas isso é tão lento. Quero dizer, meu aplicativo é grande e o editor parou de funcionar por algum tempo. Você conhece alguma configuração para aumentar o desempenho e a velocidade do editor.
21320 Techmaddy

1
Boa resposta. Use algo como :tabe **/*der.hse você não se lembrar do nome completo do arquivo.
ziiweb

16

Considere usar o plug-in CtrlP .

Está incluído no Janus Distributive .

Permite encontrar arquivos no diretório atual, buffers abertos ou arquivos usados ​​mais recentemente usando "correspondência difusa" ou expressão regular.


1
na verdade, eu o uso como parte da distribuição do Janus.
Alex11

A repo CtrlP original está inativo, mas há um garfo ativa
jpyams

12

a menos que esteja faltando alguma coisa,: o nome do arquivo é a maneira mais rápida que encontrei.

Você pode usar a guia para preencher automaticamente o nome do arquivo.


@ dirkgently, é. Ainda é um atalho, como sugere o título desta pergunta, mas acho que não é o que o questionador está procurando.
21310

Para mim, o preenchimento automático da guia não funciona para: e. Além disso, nem sempre você deseja procurar um nome de arquivo que comece com algo, mas sim uma palavra do meio em um nome de arquivo.
Andriy Drozdyuk


9

Eu uso alguns atalhos no meu arquivo .vimrc (sintaxe exata abaixo).

Eles se baseiam no fato de que em 90% dos casos, desejo abrir outro arquivo no mesmo diretório que o arquivo que estou editando no momento ou em um diretório muito próximo da hierarquia do arquivo editado.

Aqui está o que os comandos fazem:

,cd : Altere o diretório de trabalho atual para o diretório em que o arquivo atual está sendo editado.

,e: Abre um arquivo com o diretório de trabalho atual já preenchido para que você tenha que especificar apenas o nome do arquivo.

Coloque-os no seu .vimrc:

map ,e :e <C-R>=expand("%:p:h") . "/" <CR>

map ,cd :cd %:p:h <CR>

Aqui está uma sequência de eventos:


  1. Você está editando um arquivo chamado test.java em "/ home / prog"
  2. ,cd -> O diretório de trabalho atual agora se torna "/ home / prog"
  3. ,e -> Expande para ": e / home / prog" para que você possa simplesmente preencher o nome do arquivo, diga test.h.

  1. ,e -> Expande para ": e / home"
  2. tab -> Alterne entre subdiretórios de / home
  3. enter-> cdpara o diretório que você quer dizer / home / prog
  4. ,e -> Expande para ": e / home / prog"


6

Use guias, eles funcionam ao inserir caminhos de arquivos no modo de escape do vim!


4

Se você possui tags (e deve), é possível abrir um arquivo na linha de comando apenas pelo nome da classe ou método ou função c, com "vim -t DBPlaylist" e no vim com ": tag ShowList "


4

Se você estiver editando arquivos em um diretório comum, poderá fazê-lo :cdnesse diretório e use :eapenas o nome do arquivo.

Por exemplo, em vez de:

:e /big/long/path/that/takes/a/while/to/type/or/tab/complete/thingy.rb
:sp /big/long/path/that/takes/a/while/to/type/or/tab/complete/other_thingy.c
:vs /big/long/path/that/takes/a/while/to/type/or/tab/complete/one_more_thingy.java

Você pode fazer:

:cd /big/long/path/that/takes/a/while/to/type/or/tab/complete/
:e thingy.rb
:sp other_thingy.c
:vs one_more_thingy.java

Ou, se você já possui um arquivo no diretório desejado aberto, pode usar a %abreviação do nome do arquivo atual e apará-lo no diretório atual com o :hmodificador ( :help :_%:):

:e /big/long/path/that/takes/a/while/to/type/or/tab/complete/thingy.rb
:cd %:h
:sp other_thingy.c
:vs one_more_thingy.java

E, como outros já disseram, você pode tab-complete os nomes dos arquivos na linha externa (veja :help cmdline-completionpara mais).


4

Isto não é exatamente que você está procurando, mas é bom em muitos casos (embora nem todos).

Se você abrir o VIM e houver um nome de arquivo no buffer, poderá colocar o cursor nesse nome de arquivo e tipo gf. Isso abre o arquivo cujo nome está sob o cursor no mesmo buffer. É o mesmo que

:e CTRL+r CTRL+w


1
Pressionei gf e agora abri o novo arquivo que está sob o cursor. Agora, como voltar ao arquivo original. !!
vrbilgi

@ user430294: Está aberto em um buffer diferente. Use:b oldname
Nathan Fellman

@vrbilgi, use Ctrl + o para voltar ao arquivo editado anteriormente. Use Ctrl + i para avançar novamente para o arquivo do qual você voltou.
Беров

3

Conheço três plugins que permitem abrir arquivos, oferecem suporte ao preenchimento automático e não exigem a inserção do nome completo do caminho do (s) arquivo (s) a ser aberto (desde que os arquivos estejam sob um dos diretórios da &pathopção vim) :

Ultimamente, tenho visto outro plug-in com um recurso semelhante, mas não me lembro do nome.

Em breve,: find provavelmente suporta suporte à conclusão automática - os patches sobre esse tópico estão circulando na lista de discussão do vim_dev atualmente.


1
  • você pode usar (definir menu selvagem)
  • você pode usar a guia para preencher automaticamente os nomes de arquivos
  • você também pode usar a correspondência, por exemplo: e p*.datou algo parecido (como nos antigos)
  • você também pode: procurar confirmar e (para uma janela gráfica)

  • mas você provavelmente também deve especificar qual versão do vim está usando e como essa coisa no emacs funciona. Talvez possamos encontrar uma alternativa exata para o vim.


1

O FuzzyFinder foi mencionado, no entanto, eu amo o comportamento do colega de texto como o FuzzyFinderTextmate in que estende o comportamento para incluir todos os subdiretórios.

Verifique se você está usando a versão 2.16 do fuzzyfinder.vim - as versões superiores quebram o plugin.


1

Com ctags Exuberant, você pode criar arquivos de tags com informações sobre o arquivo:

ctags --extra=+f -R *

Em seguida, abra o arquivo do VIM com

:tag filename

Você também pode usar <tab>para preencher automaticamente o nome do arquivo.


1

No GVIM, o arquivo pode ser navegado usando o diálogo abrir / ler / gravar;

:browse {command}

{comando} - abrir / ler / gravar

open - Abre o arquivo lido - Anexa o arquivo write - SaveAs dialog


0

Eu instalei o FuzzyFinder. No entanto, a limitação é que ele encontra apenas arquivos no diretório atual. Uma solução alternativa é adicionar o FuzzyFinderTextmate. No entanto, com base nos documentos e nos comentários, isso não funciona de maneira confiável. Você precisa da versão correta do FuzzyFinder e da sua cópia do Vim para ser compilada com o suporte ao Ruby.

Uma solução diferente que estou testando agora é abrir todos os arquivos que provavelmente precisarei no início da sessão de edição. Por exemplo, abra todos os arquivos nos principais diretórios ...

:args app/**
:args config/**
:args test/**
etc...

(Isso significa que eu teria vários arquivos abertos, no entanto, até agora, ainda parece funcionar bem.)

Depois disso, eu posso usar o FuzzyFinder no modo buffer e ele funcionará um pouco como o command-oatalho do TextMate ...

:FuzzyFinderBuffer

Tem certeza que? Eu tenho alguma configuração no meu .vimrc, procure por "g: fuf_abbrevMap". Eu devo ter encontrado um exemplo na documentação. Quando digito o atalho, digito uma abreviação como "web:" e ele pesquisa todos os arquivos em uma pasta de minha escolha. Meu problema, na verdade, é que, por algum motivo, ele não abre mais arquivos, vejo [NEW DIRECTORY] na barra de status. Mas tenho o mesmo problema com: o, parece não estar relacionado ao fuf.
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.