После некоторых поисков я узнал, :echo @%
отображает текущее имя файла в нижней строке vim-screen.
Я хотел бы сбросить имя файла (с и без полного пути) в содержимое файла, не выходя vim
.
Есть какой-либо способ сделать это?
После некоторых поисков я узнал, :echo @%
отображает текущее имя файла в нижней строке vim-screen.
Я хотел бы сбросить имя файла (с и без полного пути) в содержимое файла, не выходя vim
.
Есть какой-либо способ сделать это?
Ответы:
Я уверен, что есть другие способы сделать это ... но основная команда, которую вы хотите, - :r[ead]
это вставка вывода команды в буфер.
Итак, чтобы вставить только имя файла:
:r! echo %
И, чтобы включить полный путь:
:r! echo %:p
Для получения дополнительной информации:
:help read
:help filename-modifiers
Текущее имя файла находится в "%
регистре, поэтому вы можете вставить его (в режиме вставки) с помощью <c-r>%
; полный путь можно вставить с помощью <c-r>=expand("%:p")
. Вы можете сделать макрос из этого, если вы используете его часто. Для более похожих трюков смотрите :h expand
и :h "=
.
<c-r>
указывает, что следующий символ является регистром.
"%p
в обычном или визуальном режимах.
Как видно из этого :h registers
, "%
регистр содержит текущее имя файла. Команда :pu[t]
вставляет содержимое регистра в текст.
Таким образом, чтобы вставить фактическое имя файла, вы можете ввести любой из них в командном режиме:
:put %
или
"%p
Чтобы вставить имя файла с полным путем, введите
:put=expand('%:p')
в командном режиме.
Больше информации:
:h pu[t]
Набрав "rp
можно вставить содержимое реестра "r
.
:put "%:p"
Не похоже на работу для меня. Кажется, он работает только с расширением () , как в:, :put =expand('%:p')
что делает его не намного менее громоздким, чем, <c-r>=expand('%:p')
к сожалению.
Простой способ - запустить:
!!echo %
!!
заменяет текущую строку результатом команды, следующей за ней.
%
заменяется именем отредактированного файла в команде, так что это фактически вставит это имя в отредактированный файл.
Это имя файла, которое вы передали команде vi (m), и может содержать относительный или абсолютный путь. Если вы хотите удалить его и сохранить только имя файла, запустите
!!basename %
Если вам нужно делать это часто, может быть полезно связать последовательность клавиш с тем, что вы хотите, в соответствии с 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
(где начальное двоеточие в строке необязательно).
Я гуглил самый простой способ вставить текущее имя файла (без пути или расширения) в текущую позицию (без новой строки, без замены текущей строки). Таким образом, объединяя предыдущие ответы и эту ссылку , это то, что я искал.
В режиме вставки :
<C-R>=expand("%:t:r")
Затем в следующий раз (с командой уже в истории):
<C-R>=<UP>
<c-r>
отображается как команда повтора?