10

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

file1.ext
file2.ext
...

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

2 ответа2

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 like mapping

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

где :e можно заменить на :tabe или что-то подобное.

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .