Dosyayı Vim'de açmak için kısayol


123

Eclipse'de olduğu gibi Ctrl+ Shift+ Rveya otomatik doldurma Ctrl+ Nseçeneği ile Vim'de bir dosya açmak istiyorum . Bir klavye kısayolu çağırın, dosya adını / kalıbını yazın ve eşleşen tüm dosya adları arasından seçim yapın.

Normalde açtığını biliyorum:

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

Buradaki sorun, bu durumlarda tüm dosya yolunu belirtmem gerektiğidir.


1
Önerilen komutların farklı etkilere sahip olduğunu, :tabedosyayı yeni bir sekmede :newaçacağını, pencereyi yatay olarak böleceğini ve yenisini :editaçmadan önce mevcut dosyayı kapatacağını unutmayın.
Skippy le Grand Gourou

Yanıtlar:



141

Normalde yaptığım şey e .(e-boşluk-nokta) bana göz atılabilir bir güncel dizin sağlıyor - o zaman yapabilirim /- tıpkı bir metin dosyasında bir kelime bulmak gibi ad parçalarını arayabilirim. Bunu genellikle yeterince iyi, basit ve hızlı buluyorum.


22
Alana ihtiyacınız yok,% 25 daha fazla yazarak tasarruf edin. ( :e.).
Konrad Rudolph

67
Büyük e kullanıyorsanız
noktaya

2
@drozzy Bu vim ile olur :-)
DerMike

7
Davranış arasında :e.ve :Ebununla birlikte bir fark vardır : mevcut dosya düzenlenmişse ve henüz kaydedilmemişse, eski dosya :edit"son değişiklikten bu yana yazma yok" nedeniyle şikayet edecek (gibi ), ikincisi ise pencereyi yatay olarak bölecektir (gibi :new) yeni bir dosyanın açılmasına izin vermek için (her ikisi de mevcut dosyayı değiştirilmemişse yeni dosyayla değiştirecektir (gibi :edit)).
Skippy le Grand Gourou

1
Bir dosyayı açıp daha sonra ikinci bir dosyayla değiştirirseniz, "e #" kullanarak birincisine geri dönebilirsiniz
dkretz

33

:find başka bir seçenektir.

Vim'i projemin kökünden açıyorum ve pathoraya ayarlıyorum.

Ardından, ağacın herhangi bir yerinde bulunan dosyaları şunu kullanarak açabilirim:

:find **/filena< tab >

Sekme, çeşitli eşleşmelerle otomatik olarak tamamlanır. ( **yol boyunca yinelemeli olarak arama yapmasını söyler).


:findÇalışma dizinine göre yolu almak için yararlı bulmuyorum . Soruyu ve @romainl yanıtını burada görün: stackoverflow.com/questions/28224168/… . Çalışma dizinine göre yolu daha kolay elde etmek için @strager yanıtını daha ilginç buluyorum.
ziiweb

25

Şunu kullanarak geçerli yolda bir dosya arayabilirsiniz **:

:tabe **/header.h

Birden fazla eşleşme varsa çeşitli tamamlamaları görmek için sekmeye basın.


Bunu kullanmayı denedim ama bu çok yavaş. Demek istediğim, başvurum büyük ve editör bir süre çalışmayı bıraktı. Editör performansını ve hızını artırmak için herhangi bir ayar biliyor musunuz?
Techmaddy

1
Güzel cevap. :tabe **/*der.hDosyanın tam adını hatırlamıyorsan gibi bir şey kullan .
ziiweb

16

CtrlP eklentisini kullanmayı düşünün .

Janus Distributive'e dahildir .

Geçerli dizindeki dosyaları, açık arabellekleri veya en son kullanılan dosyaları "bulanık eşleştirme" veya normal ifade kullanarak bulmanızı sağlar.


1
aslında onu Janus dağıtımının bir parçası olarak kullanıyorum.
Alexey

Orijinal CtrlP deposu etkin değil, ancak aktif bir çatal var
jpyams

12

bir şeyi kaçırmıyorsam: e dosya adı bulduğum en hızlı yoldur.

Dosya adını otomatik olarak tamamlamak için sekmeyi de kullanabilirsiniz.


@dirkgently, öyle. Bu sorunun başlığından da anlaşılacağı gibi hala bir kısayol, ancak soruyu soranın aradığını sanmıyorum.
strager

Benim için sekme otomatik tamamlama aşağıdakiler için çalışmıyor: e. Ayrıca, her zaman bir şeyle başlayan dosya adını aramak istemezsiniz, bunun yerine dosya adındaki orta sözcüğü aramak istersiniz.
Andriy Drozdyuk


9

.Vimrc dosyamda birkaç kısayol kullanıyorum (tam sözdizimi aşağıdadır).

Vakaların% 90'ında şu anda düzenlemekte olduğum dosyayla aynı dizinde veya hiyerarşide o düzenlenen dosyaya çok yakın bir dizinde başka bir dosya açmak istediğim gerçeğine dayanıyorlar.

İşte komutların yaptığı şey:

,cd : Geçerli çalışma dizinini, düzenlemekte olduğunuz geçerli dosyanın bulunduğu dizine değiştirin.

,e: Mevcut çalışma dizini önceden doldurulmuş bir dosya açar, böylece sadece dosya adını belirtmeniz gerekir .

Bunları .vimrc dosyanıza ekleyin:

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

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

İşte bir dizi olay:


  1. "/ Home / prog" içinde test.java adlı bir dosyayı düzenliyorsunuz
  2. ,cd -> Mevcut çalışma dizini artık "/ home / prog" olur
  3. ,e -> ": e / home / prog" olarak genişler, böylece sadece dosya adını doldurabilirsiniz, örneğin test.h.

  1. ,e -> ": e / home" olarak genişler
  2. tab -> / home alt dizinleri arasında geçiş yap
  3. enter-> cdistediğiniz dizine / home / prog deyin
  4. ,e -> ": e / home / prog" olarak genişler


6

Sekmeleri kullanın, vim kaçış modunda dosya yollarını girerken çalışırlar!


4

Etiketleriniz varsa (ve yapmanız gerekir), komut satırından bir dosyayı yalnızca sınıfın veya yöntemin veya c işlevinin adıyla, "vim -t DBPlaylist" ile ve vim içinde ": tag ShowList ile açabilirsiniz. ".


4

Dosyaları ortak bir dizinde düzenliyorsanız, :cdo dizine gidebilir ve ardından:e yalnızca dosya adını kullanabilirsiniz.

Örneğin, bunun yerine:

: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

Yapabilirsin:

: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

Veya, istediğiniz dizinde zaten açık bir dosyanız varsa %, geçerli dosya adı için kısaltmayı kullanabilir ve :hdeğiştiriciyle ( :help :_%:) geçerli dizine kırpabilirsiniz :

: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

Ve diğerlerinin de söylediği gibi, dosya adlarını eski satırda sekmeyle tamamlayabilirsiniz ( :help cmdline-completiondaha fazlası için bakın ).


4

Bu tam olarak değil aradığınız , ancak çoğu durumda iyidir (hepsi olmasa da).

VIM'i açarsanız ve arabellekte bir dosyanın adı varsa, imleci bu dosya adına ve türüne koyabilirsiniz gf. Bu, aynı tamponda imlecin altında adı olan dosyayı açar. İle aynı

:e CTRL+r CTRL+w


1
Gf'ye bastım ve şimdi imleç altındaki yeni dosyayı açtım. Şimdi orijinal dosyaya nasıl geri dönülür. !!
vrbilgi

@ user430294: Farklı bir arabellekte açık. Kullan:b oldname
Nathan Fellman

@vrbilgi, daha önce düzenlenen dosyaya geri dönmek için Ctrl + o tuşlarını kullanın. Geri döndüğünüz dosyaya tekrar ileri gitmek için Ctrl + i tuşlarını kullanın.
Беров

3

Dosyaları açmaya izin veren, otomatik tamamlamayı destekleyen ve açmak için dosya (lar) ın tam yol adını girmeye gerek duymayan üç eklenti biliyorum (dosyalar &pathvim seçeneğindeki dizinlerden birinin altında olduğu sürece ) :

Son zamanlarda benzer bir özelliğe sahip başka bir eklenti gördüm, ancak adını hatırlamıyorum.

Yakında,: bul büyük olasılıkla otomatik tamamlamayı destekliyor - bu konudaki yamalar bu günlerde vim_dev posta listesinde dolaşıyor.


1
  • kullanabilirsiniz (wildmenu ayarla)
  • dosya adlarını otomatik tamamlamak için sekmeyi kullanabilirsiniz
  • eşleştirmeyi de kullanabilirsiniz, örneğin: e p*.datveya bunun gibi bir şey (eski 'dos'daki gibi)
  • ayrıca: gözat onayla e (bir grafik pencere için)

  • ama muhtemelen hangi vim sürümünü kullandığınızı ve emacs'teki o şeyin nasıl çalıştığını da belirtmelisiniz. Belki size tam bir vim alternatifi bulabiliriz.


1

FuzzyFinder'dan bahsedildi, ancak davranışı tüm alt dizinleri içerecek şekilde genişleten FuzzyFinderTextmate eklentisinin metin arkadaşı benzeri davranışını seviyorum .

Fuzzyfinder.vim'in 2.16 sürümünü kullandığınızdan emin olun - Daha yüksek sürümler eklentiyi bozar.


1

Exuberant ctags ile, dosya bilgileriyle etiket dosyaları oluşturabilirsiniz:

ctags --extra=+f -R *

Ardından, VIM'den dosyayı açın.

:tag filename

<tab>Dosya adını otomatik tamamlamak için de kullanabilirsiniz .


1

GVIM'de, dosya, açma / okuma / yazma iletişim kutusu kullanılarak taranabilir;

:browse {command}

{command} - aç / oku / yaz

open - Dosyanın okunmasını açar - Dosya yazma - SaveAs diyalog penceresini ekler


0

FuzzyFinder'ı kurdum. Ancak sınırlama, yalnızca geçerli dizindeki dosyaları bulmasıdır. Buna bir çözüm, FuzzyFinderTextmate'i eklemektir. Ancak, dokümanlara ve yorumlara göre bu güvenilir bir şekilde çalışmıyor. FuzzyFinder'ın doğru sürümüne ihtiyacınız var ve Vim kopyanızın Ruby desteğiyle derlenmesine ihtiyacınız var.

Şimdi denediğim farklı bir çözüm, düzenleme oturumunun başında ihtiyaç duyabileceğim tüm dosyaları açmaktır. Örneğin, anahtar dizinlerdeki tüm dosyaları açın ...

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

(Bu, muhtemelen çok sayıda dosyamın açık olacağı anlamına gelir, ancak şu ana kadar hala iyi çalışıyor gibi görünüyor.)

Bundan sonra, FuzzyFinder'ı arabellek modunda kullanabilirim ve bir şekilde TextMate'in command-okısayolu gibi davranacaktır ...

:FuzzyFinderBuffer

Emin misin? .Vimrc dosyamda bazı yapılandırmalarım var, "g: fuf_abbrevMap" arayın. Belgelerde bir örnek bulmuş olmalıyım. Kısayolu yazdığımda, "web:" gibi bir kısaltma yazıyorum ve seçtiğim bir klasördeki tüm dosyaları arar. Aslında benim sorunum, bir nedenden dolayı artık dosyaları açmaması, bunun yerine durum çubuğunda [YENİ DİZİN] ifadesini görmem. Ama aynı sorunla karşılaşıyorum: o, fuf ile ilgisiz görünüyor.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.