2012-12-18 20 views
7

Haskell programlarım için, yoldaki yürütülebilir dosyanın adının geçerli yöneticimin adıyla aynı olduğunu biliyorum. Şimdi şöyle bir eşleme oluşturmak istiyorum:Geçerli dizini Vim komutlarında kullanın

:map <leader>rr :!curdir()<cr> 

Ancak, bildiğim tek komutu yerine bana sadece dizinin adına tam yolunu veren getcwd() olduğunu.

Sadece yöneticinin adını çıkarmanın kolay bir yolu var mı?

split(getcwd(), "/")[-1] 
+0

Bkz. [Bu yanıt] (http://stackoverflow.com/a/13908273/546861). – romainl

+0

Aşağıdaki cevaplar iyi vimscript çözümleridir. Bir haritanız yoksa, bunu dinamik olarak = register ile de değerlendirebilirsiniz. ('Gibi eski bir komuta bölümünü yazdıktan sonra:!..' Tipi 'CR =' aşağıda vimscript çözümlerden biri tarafından takip – darcyparker

+0

@darcyparker Ne iyi böyle bir iş için düzenli ifadeler her türlü kullanmayın orada adanmış olarak 'varsayarak bu. Hiçkimsenin fonksiyon /' bir yol ayırıcı olmak yanlıştır. herkes 'varsayarak /' ve '\' vardır * hem * yol ayırıcıları gibi yanlıştır. Daha, herkes \ '* daima yol ayırıcı açık' varsayarak . pencereler Ben de koşullar yol ayırıcı 'olacağı altında hiçbir fikrim yok da yanlıştır:' ama bunu olabilir çoğu \ * nix sistemleri '\' ve 'sahip olabilir:.. dosya adlarında' – ZyX

cevap

13

Kullanım

fnamemodify(getcwd(), ':t') 

veya

fnamemodify('.', ':p:h:t') 

:

0

Sen gibi bir şey kullanabilirsiniz. İkinci durumda :h gereklidir, çünkü :p, izleyen yol ayırıcıyı yayar (bu nedenle :t tarafından seçilen son yol bileşeni artık boş dizedir).

, harita kullanımı

:noremap \rr :!<C-r>=shellescape(fnamemodify('.', ':p:h:t'), 1)<CR><CR> 

içine bu taşıyın. :map'u neden kullanmamanız gerektiğiyle ilgili açıklama için bkz. here.

+0

yol ayırıcı değil . '& shellslash' seçenek bağlı olarak burada yol ayırıcı ya' \ 'ya'/'AFAIK Macintosh bazen burada yol ayırıcı olabilir':? gerekli '/' – ZyX

+0

@ZyX, hangi işletim sistemi hakkında – taro

+0

, Windows söz ediyoruz.: ', ama hangi durumlarda olduğunu bilmiyorum – ZyX