Utwórz plik pod kursorem w Vimie

10

Mam listę plików

file1.ext
file2.ext
...

Jak utworzyć plik o nazwie file2.ext, jeśli mój kursor znajduje się w pliku file2.ext. Coś w rodzaju gftylko do tworzenia nowych plików (jest to hipotetyczna sytuacja, myśl, że kiedyś może być pomocna).

Alex
źródło

Odpowiedzi:

17

Pierwszą rzeczą, jaka przychodzi mi do głowy, jest użycie touchpolecenia 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 writefilezapisuje listę do pliku, linia po linii. Oczywiście, gdy lista wejściowa jest pusta, tworzony jest pusty plik. (Zobacz :help writefileszczegół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 expandwzorca (patrz :help expand()).

Nawiasem mówiąc, jeśli nie chcesz tworzyć pliku, ale tylko otworzyć go do edycji, możesz zdefiniować gfpodobne mapowanie:

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

gdzie :epolecenie można zastąpić :tabelub podobnym poleceniem.

Społeczność
źródło
1
+1 za nauczanie <cfile>zamiast<C-r><C-f>
patrz
2

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 gfpolecenie nie będzie tutaj działać, ponieważ brakuje rozszerzenia pliku).

Snap Shot
źródło
gfdziała, jeśli set suffixesadd=.wiki. Ulepszona wersja cfbyłaby taka, która szanuje suffixesadd, przynajmniej w przypadku, gdy zawiera tylko jeden przedmiot.
hjdivad