2012-12-18 13 views
7

Dla moich programów Haskell, wiem, że nazwa pliku wykonywalnego w ścieżce jest taka sama jak nazwa mojego bieżącego katalogu. Teraz chcę utworzyć odwzorowanie tak:Użyj bieżącego katalogu w komendach Vima

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

Jednak tylko komenda Znam to getcwd(), co daje mi całą ścieżkę zamiast nazwy tylko z katalogów.

Czy istnieje prosty sposób wyodrębnienia tylko nazwy katalogu?

+0

Zobacz [tę odpowiedź] (http://stackoverflow.com/a/13908273/546861). – romainl

+0

Poniższe odpowiedzi są dobrymi rozwiązaniami vimscript. Jeśli nie masz mapy, możesz również ocenić ją dynamicznie za pomocą = register. (po wpisaniu części polecenia ex jak ':!' wpisz 'CR =', a następnie jedno z poniższych rozwiązań vimscript: – darcyparker

+0

@darcyparker Żadne nie jest dobre.Nie używaj żadnych wyrażeń regularnych do takich zadań, jak jest dedykowane do tego celu ktoś, kto zakłada, że ​​'/' jest separatorem ścieżek jest błędny. Każdy, kto zakłada '/' i '\' to * oba * separatory ścieżek jest tak samo błędny.Bądźmy wszyscy, zakładając '\' jest * zawsze * separator ścieżek na Windows też się myli, ja też nie mam pojęcia, w jakich okolicznościach separatorem ścieżek będzie ':', ale może to być. Większość systemów \ * nix może mieć '\' i ':' w nazwach plików – ZyX

Odpowiedz

13

użytkowania

fnamemodify(getcwd(), ':t') 

lub

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

. :h w drugim przypadku jest konieczne, ponieważ :p wysyła końcowy separator ścieżki (w ten sposób ostatni komponent ścieżki wybrany przez :t jest teraz pustym łańcuchem).

Aby przenieść to do swojego użytku mapowania

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

. Aby uzyskać opis, dlaczego nie powinieneś nigdy używać :map, zobacz .

0

Można użyć coś takiego:

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

Separator ścieżek nie jest konieczny '/'. – ZyX

+0

@ZyX, o jakim systemie operacyjnym mówisz? – taro

+0

Windows: tutaj separatorem ścieżek jest '\' lub '/' w zależności od opcji '& shellslash' .AFAIK Macintosh czasami, tutaj separatorem ścieżek może być': ', ale nie wiem, w których przypadkach. – ZyX

Powiązane problemy