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


10

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

file1.ext
file2.ext
...

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

Ответы:


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команда не будет работать здесь, потому что отсутствует расширение файла).


gfработает если set suffixesadd=.wiki. Ваша улучшенная версия cfбудет соответствовать той, которая соблюдается suffixesadd, по крайней мере в том случае, если она содержит только один элемент.
13
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.