Vim'de imlecin altında dosya oluşturma


10

Bir dosya listem var

file1.ext
file2.ext
...

İmlecim file2.ext içindeyse, file2.ext isimli bir dosyayı nasıl oluştururum? gfSadece yeni dosyalar oluşturmak için bir tür (bu varsayımsal bir durum, sadece bir gün yararlı olabilir).

Yanıtlar:


17

Aklıma gelen ilk şey touch, imlecin altındaki dosya adını ileten komutu kullanmaktır .

:map <silent> <leader>cf :!touch <c-r><c-p><cr><cr>

Ancak platformlar arasında taşınabilir saf bir Vim çözümü var. writefileYerleşik işlev , bir dosyaya satır satır bir liste yazar. Doğal olarak, giriş listesi boş olduğunda, boş bir dosya oluşturur. (Ayrıntılar :help writefileiçin bakınız.) Bu yan etkiden faydalanabiliriz:

:map <silent> <leader>cf :call writefile([], expand("<cfile>"), "t")<cr>

Dosya adı çıkarmanın farklı bir expanddesen kullanılarak ayarlanabileceğini unutmayın (bkz. :help expand()).

Bu arada, bir dosya oluşturmak istemiyor, ancak sadece düzenleme için açmak istiyorsanız, benzer bir gfeşleme tanımlanabilir :

:map <leader>gf :e <cfile><cr>

burada :ekomut :tabeveya benzer bir komutla değiştirilebilir.


1
Öğretim için 1 <cfile>yerine<C-r><C-f>
sehe

2

Yukarıdaki ib ile mükemmel cevabı aldım ve aşağıdaki gibi genişlettim. Amacım, bir wiki için gerektiğinde yeni markdown dosyaları oluşturmak için vim kullanmaktı (bu durumda bir Gollum wiki)

İlk denedim:

map <silent> <leader>cf :call writefile([], expand("<cfile>"), "t")<cr>` 

yukarıdaki cevapta belirtildiği gibi çalışır. Ancak, ilk başta çalışmadığını düşündüm çünkü aslında vim'de dosya açılışını görmedim. Aşağıdaki kodun ikinci bitini kullanmak yeni bir dosya açacaktır - aradığım şey budur. Bu yüzden onları birleştirdim ve denedim:

map <leader>cf :e <cfile><cr>

ancak wiki sözdizimi gibi sözdizimini kullanarak wiki'de yeni bir dosya oluşturmaya çalıştığınızda [[the-new-file]]dosyanın parantez içindeki uzantısına izin vermediğinden, bu bir wiki için çalışmaz. Ancak, bunun çalışması için yeni bir dosya oluştururken Vim'in uzantıyı bilmesi gerekir. Bu durumda kullandım:

    map <leader>cf :e <cfile>.md<cr>

böylece yeni markdown dosyaları oluşturabilirim. Bunu daha da özelleştirmek için yollar vardır (örneğin, uzantıyı zor kodlayarak değil), ancak yukarıdaki benim ihtiyaçları için iyi çalışıyor. Şimdiye kadar başka bir uzantıya ihtiyacım varsa (örneğin bir .wiki dosyasını kaydetmek için) muhtemelen basit yolu seçeceğim ve aşağıdaki gibi başka bir harita yapacağım:

    map <leader>cwf :e <cfile>.wiki<cr>

Bir yan fayda olarak, zaten mevcut olan markdown dosyasını açmak için aynı komutu kullanabilirsiniz ( gfdosya uzantısı eksik olduğu için standart komut burada çalışmaz).


gfeğer çalışır set suffixesadd=.wiki. Geliştirilmiş bir sürümü , en azından yalnızca bir öğe içerdiği durumlarda cfsaygı duyan bir sürüm olacaktır suffixesadd.
hjdivad
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.