Як вставити поточне ім'я файлу у вміст Vim?


39

Після деяких пошуків я дізнався, чи :echo @%відображається поточне ім'я файлу в нижньому рядку vim-екрану.

Я хотів би скинути ім'я файлу (з повним контуром і без нього) у вміст файлу, не виходячи з нього vim.

Чи можна це зробити?

Відповіді:


28

Я впевнений, що є інші способи зробити це ... але головна команда, яку ви хочете, - це те, :r[ead]що вставляє вихід команди в буфер.

Отже, щоб вставити лише ім'я файлу:

:r! echo %

І, щоб включити повний шлях:

:r! echo %:p

Для отримання додаткової інформації:

:help read
:help filename-modifiers 

37

Поточне ім'я файлу знаходиться в "%реєстрі, тому його можна вставити (перебуваючи в режимі вставки) за допомогою <c-r>%; повний шлях можна вставити за допомогою <c-r>=expand("%:p"). Ви можете зробити макрос із нього, якщо використовуєте його часто. Для більш, подібних трюків см :h expandі :h "=.


Можливо, я це неправильно читаю, але не <c-r>відображається як команда повтору?
JC Yamokoski

10
У режимі вставки <c-r>вказує, що наступним символом є регістр.
Кевін

Право, дякую. Повністю забув перейти на режим вставки ...
JC Yamokoski

Ви також можете робити "%pв звичайному або візуальному режимах.
naught101

15

Як видно :h registersз "%регістра, реєстр містить поточне ім'я файлу. :pu[t]Команда вставляє вміст регістра в текст.

Отже, щоб вставити власне ім’я файлу, ви можете ввести будь-яке з них у командному режимі:

:put %

або

"%p

Щоб вставити ім'я файлу з повним шляхом, введіть

:put=expand('%:p')

в командному режимі.


Більше інформації:

:h pu[t]

Ввівши "rpви можете вставити вміст реєстру "r.


3
:put "%:p"Чи не схоже на роботу для мене. Здається, він працює лише з функцією розширення () , як у:, :put =expand('%:p')що робить його не набагато громіздкішим, ніж <c-r>=expand('%:p')на жаль.
akavel

@akavel Ви маєте рацію, я оновлю відповідь. Дякую! ;) І, справді, обидва однаково багатослівні.
braunmagrin

5

Простий спосіб - запустити:

!!echo %
  • !! - це заміна поточного рядка результатом команди, що слідує за ним.

  • % замінюється на ім'я відредагованого файлу в команді, тому це ефективно вставить це ім'я в редагований файл.

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

!!basename %

1

Якщо вам потрібно робити це часто, може бути корисним прив’язати послідовність ключів до того, що ви хочете, відповідно до http://vim.wikia.com/wiki/Insert_current_filename

вставляє поточне ім'я файлу без розширення на позиції курсору, коли ви перебуваєте в режимі вставки.

:inoremap \fn <C-R>=expand("%:t:r")<CR>

Щоб зберегти розширення, використовуйте:

:inoremap \fn <C-R>=expand("%:t")<CR>

Щоб вставити абсолютний шлях до каталогу, використовується файл:

:inoremap \fn <C-R>=expand("%:p:h")<CR>

Щоб вставити відносний шлях до каталогу, використовується файл:

:inoremap \fn <C-R>=expand("%:h")<CR>

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


0

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

У вкладишем режимі :

<C-R>=expand("%:t:r")

Тоді наступного разу (з командою вже в історії):

<C-R>=<UP>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.