Виведіть поточне ім'я файлу для видання у командному рядку


10

Як я можу провести шлях до поточного файлу в командному рядку, щоб набрати схоже ім’я файлу? Я не хочу абревіатури, яку було б замінено поточною назвою файлу, я хочу відредагувати ім'я файлу, доповнивши його шлях до каталогу. Наприклад, я хочу до :editфайла з подібним іменем або в подібному каталозі, наприклад

vim src/submodule/frontend/frobnicate2.c

і тепер я хочу редагувати ../trunk/src/submodule/frontend/frobnicate.c, і я хочу лише вставити ../trunkта видалити 2, а не повторно повний шлях.

Звичайно, я можу повернутися до оболонки та використати її історію команд, або я можу скопіювати та вставити шлях через графічний інтерфейс, але я шукаю більш ефективний спосіб, який не потребує залишення Vim.

Відповіді:


11

Окрім того, щоб вставити %реєстр так, як ви виявили, ви можете також використовувати :edit %<Tab>.

Від :help cmdline-special:

In Ex commands, at places where a file name can be used, the following
characters have a special meaning.  These can also be used in the expression
function `expand()`.

        %       Is replaced with the current file name.           :_% c_%

Отже, ви можете, наприклад, використовувати:

:edit %.orig

редагувати file.txt.orig. Для вашого прикладу слід ввести :e ../trunk/%, натисніть, <Tab>щоб отримати ім'я файлу з відносним шляхом, і видаліть 2перед натисканням <Enter>.

Ви можете додати деякі модифікатори до шляху, щоб змінити його; Я вважаю :hсебе особливо корисною, вона отримує "dirname" (або "голова" в Vim-speak ") поточного шляху:

:edit file/in/a/deeply/nested/subdirectory/here.txt
:edit %:h/in_same_dir_as_above.txt

Можна навіть використовувати :hкілька разів. Наприклад:

:edit %:h:h:h/file.txt

Відкриється file/in/a/deeply/file.txt

Там також :pє повний шлях і який може бути корисним у вашому випадку: введіть :e %:p, натисніть <Tab>та відредагуйте шлях за бажанням. Ви навіть можете використовувати кілька модифікаторів, наприклад: :e %:p:h.

Дивіться :help filename-modifiersповний список.

Примітка: якщо ви <Tab>, Vim розширить %. Якщо ви використовуєте <C-d>, Vim не розширить %(але замінить %час, завершуючи шлях).


5

Ой. Шукайте "ім'я файлу" в :help :! Це просто: вставити спеціальний r egister , що означає поточне ім'я файлу.CTRL-R %%


1
Отже, спираючись на свою відповідь: щоб отримати повний шлях, як цього вимагав ОП, ви зробите щось на кшталт Ctrl-r =expand('%:p'). Для цього використовується = register .
lcd047

3

Якщо ви встановили pathзмінну vim , ви володієте повною потужністю :findкоманди, а саме заповненням імен файлів на вкладці (без необхідності вказувати частину каталогу!)

У вашому випадку щось подібне

set path=./**

може бути все, що потрібно для :fin frob<tab>роботи. Для закривавлених деталей, :help find, :help file-searching.


0

Ось відображення, яке ви можете спробувати:

cnoremap <a-q> <c-c>:let @a=expand('%')<CR>:<Up><c-r>a

Це зберігає поточну команду, а потім встановлює регістр 'a' імені поточного файлу. Потім відкликається остання команда та додається вміст реєстру 'a'. Звичайно, якщо у вас є щось корисне в регістрі 'a', це перезаписать.

Ви можете змінити відображені символи на щось інше. Мені подобається використовувати клавішу Alt, але вона не працює в деяких терміналах.

Як зазначив Carpetsmoker у своїй відповіді, ви можете змінити виклик функції на

expand('%:p')

змусити повний шлях.


1
Це безглуздо знищить реєстр a. Спробуйте щось замість цього:cnoremap <M-q> <C-r>=fnameescape(expand('%:p'))<CR>
lcd047,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.