Створіть файл під курсором у 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>
sehe

2

Я прийняв чудову відповідь ib вище і розширив її наступним чином. Моєю метою було використовувати vim для створення нових файлів розмітки у міру необхідності для вікі (у цьому випадку вікі Gollum)

Я вперше спробував:

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

вище працює, як зазначено у відповіді. Однак спочатку я подумав, що це не працює, тому що я фактично не бачив відкриття файлу у vim. Використання другого біта коду нижче відкриє новий файл - це більше те, що я шукав. Тому я поєднав їх і спробував:

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

але це не працює для вікі, тому що при спробі створити новий файл у вікі за допомогою синтаксису, як [[the-new-file]]синтаксис wiki, не дозволяє розширити файл у дужках. Однак Vim потрібно знати розширення під час створення нового файлу, щоб це працювало. У цьому випадку я використав:

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

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

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

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


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