Komut satırında sürüm için geçerli dosya adını getirin


10

Benzer bir dosya adı yazmak için komut satırındaki geçerli dosyanın yolunu nasıl açabilirim? Geçerli dosya adıyla değiştirilecek bir kısaltma istemiyorum, dizin yoluyla birlikte dosya adını düzenlemek istiyorum. Örneğin, :editbenzer bir ada veya benzer bir dizine sahip bir dosya istiyorum , örn.

vim src/submodule/frontend/frobnicate2.c

ve şimdi düzenlemek istiyorum ../trunk/src/submodule/frontend/frobnicate.cve sadece tam yolu yeniden yazmak değil, eklemek ../trunkve kaldırmak istiyorum 2.

Tabii ki kabuğa geri dönüp komut geçmişini kullanabilirim ya da yolu GUI aracılığıyla kopyalayıp yapıştırabilirim, ancak Vim'den ayrılmayı gerektirmeyen daha verimli bir yol arıyorum.

Yanıtlar:


11

Kaydı %kendiniz keşfettiğiniz gibi eklemenin yanı sıra kullanabilirsiniz :edit %<Tab>.

Gönderen :help cmdline-special:

In Ex commands, at places where a file name can be used, the following
characters have a special meaning.  These can also be used in the expression
function `expand()`.

        %       Is replaced with the current file name.           :_% c_%

Böylece, örneğin şunları kullanabilirsiniz:

:edit %.orig

düzenlemek file.txt.orig. Örneğin, yazarak, göreli yolla dosya adını almak için :e ../trunk/%düğmesine basın <Tab>ve 2düğmesine basmadan önce kaldırın <Enter>.

Değiştirmek için yola bazı değiştiriciler ekleyebilirsiniz; :hÖzellikle yararlı buldum , geçerli yolun "dirname" (veya "Vim-speak" "head" alır):

:edit file/in/a/deeply/nested/subdirectory/here.txt
:edit %:h/in_same_dir_as_above.txt

Hatta :hbirçok kez kullanabilirsiniz . Örneğin:

:edit %:h:h:h/file.txt

Açılacak file/in/a/deeply/file.txt

Ayrıca :psize tam yolu veren ve durumunuzda yararlı olabilecek seçenekler de vardır: yolu istediğiniz gibi yazın :e %:p, basın <Tab>ve düzenleyin. Hatta örneğin çoklu düzenleyiciler, kullanabilirsiniz: :e %:p:h.

Tüm :help filename-modifiersliste için bakınız .

Not: Eğer siz <Tab>, Vim %. Eğer kullanırsanız <C-d>, Vim genişlemez %(ancak yerine gelmez %yolu tamamlarken).


5

Ah. İçinde "dosya adı" ifadesini arayın :help :! Çok basit: özel r egister eklemek , yani geçerli dosya adı.CTRL-R %%


1
Cevabınızı temel alarak: OP'nin istediği gibi tam yolu elde etmek için, benzer bir şey yaparsınız Ctrl-r =expand('%:p'). Bu kullanmaktadır = kayıt .
lcd047

3

Vim pathdeğişkeninizi ayarladıysanız , :findkomutun tam gücüne sahipsiniz , yani dosya adlarının sekme tamamlanması (dizin bölümünü belirtmeye gerek kalmadan!)

Sizin durumunuzda,

set path=./**

:fin frob<tab>çalışmak için ihtiyacınız olan her şey olabilir . Kanlı ayrıntılar için :help find, :help file-searching.


0

İşte deneyebileceğiniz bir harita:

cnoremap <a-q> <c-c>:let @a=expand('%')<CR>:<Up><c-r>a

Bu, geçerli komutu kaydeder ve ardından 'a' kaydını geçerli dosyanın adına ayarlar. Daha sonra son komut çağrılır ve 'a' kayıt içeriğiyle eklenir. Tabii eğer 'a' kaydında faydalı bir şeyiniz varsa, bunun üzerine yazılır.

Eşlenen karakterleri başka bir şeyle değiştirmek isteyebilirsiniz. Alt tuşunu kullanmayı seviyorum, ancak bazı terminallerde çalışmıyor.

Carpetsmoker cevabında işaret ettiği gibi, fonksiyon çağrısını değiştirebilirsiniz.

expand('%:p')

tam yolu zorlamak.


1
Bu, kayıtsız şartsız kaydı silecektir a. Bunun yerine böyle bir şey deneyin:cnoremap <M-q> <C-r>=fnameescape(expand('%:p'))<CR>
lcd047
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.