Создайте файл под курсором в Vim

10

У меня есть список файлов

file1.ext
file2.ext
...

Как создать файл с именем file2.ext, если мой курсор находится внутри file2.ext. Вроде как gfтолько для создания новых файлов (это гипотетическая ситуация, просто подумал, что может быть когда-нибудь полезно).

Alex
источник

Ответы:

17

Первое, что приходит мне в голову, это использовать touchкоманду, передающую ему имя файла под курсором.

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

Но есть чистое решение Vim, переносимое между платформами. Встроенная функция writefileзаписывает список в файл, строка за строкой. Естественно, когда список ввода пуст, он создает пустой файл. (Подробнее :help writefileсм.) Мы можем воспользоваться этим побочным эффектом:

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

Обратите внимание, что извлечение имени файла может быть скорректировано с использованием другого expandшаблона (см. :help expand()).

Кстати, если вы хотите не создавать файл, а просто открыть его для редактирования, вы можете определить gfпохожее отображение:

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

где :eкоманда может быть заменена :tabeили аналогичной командой.

Сообщество
источник
1
+1 за преподавание <cfile>вместо<C-r><C-f>
сехе
2

Я взял превосходный ответ, изложенный выше, и расширил его следующим образом. Моя цель состояла в том, чтобы использовать vim для создания новых файлов разметки, необходимых для вики (в данном случае это Gollum wiki)

Я впервые попробовал:

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

вышеупомянутое работает как указано в ответе. Однако сначала я подумал, что это не работает, потому что на самом деле я не видел открытия файла в vim. Использование второго фрагмента кода ниже откроет новый файл - это больше, чем я искал. Поэтому я объединил их и попробовал:

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

но это не работает для вики, потому что при попытке создать новый файл в вики с использованием синтаксиса, подобного [[the-new-file]]синтаксису вики, не допускается расширение файла в скобках. Однако Vim должен знать расширение при создании нового файла, чтобы это работало. В этом случае я использовал:

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

чтобы я мог создавать новые файлы уценки. Существуют способы дальнейшей настройки этого (например, без жесткого расширения расширения), но вышеописанное прекрасно работает для моих нужд. Если мне когда-нибудь понадобится другое расширение (например, для сохранения файла .wiki), я, вероятно, просто выберу простой маршрут и создам другую карту, например:

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

В качестве дополнительного преимущества вы можете использовать ту же команду, чтобы открыть уже существующий файл уценки (стандартная gfкоманда не будет работать здесь, потому что отсутствует расширение файла).

Snap Shot
источник
gfработает если set suffixesadd=.wiki. Ваша улучшенная версия cfбудет соответствовать той, которая соблюдается suffixesadd, по крайней мере в том случае, если она содержит только один элемент.
13