Odpowiedzi:
Pierwszą rzeczą, jaka przychodzi mi do głowy, jest użycie touch
polecenia przekazującego mu nazwę pliku pod kursorem.
:map <silent> <leader>cf :!touch <c-r><c-p><cr><cr>
Ale istnieje czyste rozwiązanie Vima, przenośne na różnych platformach. Wbudowana funkcja writefile
zapisuje listę do pliku, linia po linii. Oczywiście, gdy lista wejściowa jest pusta, tworzony jest pusty plik. (Zobacz :help writefile
szczegóły.) Możemy wykorzystać ten efekt uboczny:
:map <silent> <leader>cf :call writefile([], expand("<cfile>"), "t")<cr>
Zauważ, że ekstrakcję nazwy pliku można dostosować za pomocą innego expand
wzorca (patrz :help expand()
).
Nawiasem mówiąc, jeśli nie chcesz tworzyć pliku, ale tylko otworzyć go do edycji, możesz zdefiniować gf
podobne mapowanie:
:map <leader>gf :e <cfile><cr>
gdzie :e
polecenie można zastąpić :tabe
lub podobnym poleceniem.
Wziąłem doskonałą odpowiedź ib powyżej i rozszerzyłem ją w następujący sposób. Moim celem było użycie vima do utworzenia nowych plików Markdown zgodnie z potrzebami dla wiki (w tym przypadku wiki Gollum)
Najpierw próbowałem:
map <silent> <leader>cf :call writefile([], expand("<cfile>"), "t")<cr>`
powyższe działa zgodnie z odpowiedzią. Jednak na początku myślałem, że to nie działa, ponieważ tak naprawdę nie widziałem otwarcia pliku w vimie. Użycie drugiego fragmentu kodu poniżej otworzy nowy plik - tego więcej szukałem. Połączyłem je i spróbowałem:
map <leader>cf :e <cfile><cr>
ale to nie działa w przypadku wiki, ponieważ podczas próby utworzenia nowego pliku na wiki przy użyciu składni takiej jak [[the-new-file]]
składnia wiki nie pozwala na rozszerzenie pliku w nawiasach. Jednak Vim musi znać rozszerzenie podczas tworzenia nowego pliku, aby to działało. W tym przypadku użyłem:
map <leader>cf :e <cfile>.md<cr>
żebym mógł utworzyć nowe pliki przecen. Istnieją sposoby dalszego dostosowania tego (na przykład przez nie kodowanie rozszerzenia na stałe), ale powyższe działa dobrze dla moich potrzeb. Jeśli kiedykolwiek będę potrzebować innego rozszerzenia (na przykład, aby zapisać plik .wiki), prawdopodobnie po prostu wybiorę prostą trasę i utworzę inną mapę, na przykład:
map <leader>cwf :e <cfile>.wiki<cr>
Dodatkową korzyścią jest to, że możesz użyć tego samego polecenia, aby otworzyć już istniejący plik przeceny (standardowe gf
polecenie nie będzie tutaj działać, ponieważ brakuje rozszerzenia pliku).
gf
działa, jeśli set suffixesadd=.wiki
. Ulepszona wersja cf
byłaby taka, która szanuje suffixesadd
, przynajmniej w przypadku, gdy zawiera tylko jeden przedmiot.
<cfile>
zamiast<C-r><C-f>