Предполагая, что текущий буфер является файлом, открытым для редактирования, :e
он не отображается E32: No file name
.
Я хотел бы выдернуть одно или все из:
- Имя файла точно так же, как показано в строке состояния, например
~\myfile.txt
- Полный путь к файлу, например
c:\foo\bar\myfile.txt
- Просто имя файла, например
myfile.txt
Ответы:
TL; DR
:let @" = expand("%")
>это скопирует имя файла в неисследованный регистр , затем вы можете использовать старый добрый файл,
p
чтобы вставить его. и, конечно, вы можете сопоставить это с ключом для более быстрого использования.:nmap cp :let @" = expand("%")<cr>
Вы также можете использовать это для полного пути
:let @" = expand("%:p")
объяснение
Vim использует безымянный регистр для хранения текста, который был удален или скопирован (восстановлен), также, когда вы вставляете его, он читает текст из этого регистра.
Используя,
let
мы можем вручную сохранить текст в регистре, используя,:let @" = "text"
но мы также можем сохранить результат выражения.В приведенном выше примере мы используем функцию,
expand
которая расширяет символы подстановки и ключевые слова. в нашем примере мы используемexpand('%')
для расширения текущего имени файла. Мы можем изменить его какexpand('%:p')
для полного имени файла.Смотрите
:help let
:help expand
:help registers
для деталейисточник
unnamedplus
качестве буфера обменаlet @+ = expand("%")
"%:h"
чтобы получить полный путь без имени файла.Почти то, что вы просите, и это может сделать:
Ctrl+R %
перетянуть текущее имя файла туда, где вы находитесь (командная строка, редактировать буфер, ...). Смотрите этот Vim Совет для более.источник
Ctrl+R %
работает вinsert
режиме - но вedit
режимеCtrl+R
означает повтор.Если вы хотите поместить текущее имя буфера в буфер обмена системного уровня, попробуйте изменить регистр на @ +:
Изменить 20140421: я обычно использую их, поэтому я создал несколько ярлыков. Linux Vims, по-видимому, работает немного иначе, чем Mac Vims , поэтому для этого также есть особый случай. Если вы добавите следующее в свой
~/.vimrc
:Затем, например
<leader>cf
, скопирует относительный путь текущего буфера (лидером по умолчанию является обратная косая черта (\
)). Я часто использую их для запуска команд в файле или выполнения других действий в командной строке. Я не часто использую последнее имя файла / имя каталога.Вы можете рассмотреть более интуитивные отображения, например,
<leader>cfr
для относительного,<leader>cfa
для абсолютного,<leader>cff
просто для имени файла,<leader>cfd
для каталога.источник
"*
и"+
эквивалентны, так что вы можете обойтись без проверок платформы и просто использовать@+
Если вы это сделаете,
:reg
вы увидите имя текущего файла в%
реестре. Вы можете вставить его"%p
, например.Если, как и я, вы часто переключаетесь на «альтернативный» буфер, очень удобно, что его полный путь и имя файла заносятся в
#
регистр. Вы можете вставить его"#p
, например.Примечание (на всякий случай, это поведение, специфичное для моей установки): я использую VIM 7.4.52 в Ubuntu 14.04.4 LTS.
источник
Объединение информации из пары других ответов: Если вы хотите восстановить текущий полный путь к файлу и поместить его в буфер команд в другом окне, сначала выполните
:let @" = expand("%:p")
, затем перейдите в другое окно и введитеCtrl+R "
.Полезно для копирования файла, оставаясь в том же каталоге и сохраняя старый открытый. Например:
источник
Вот мое решение:
источник
Я использую xclip для доступа к буферу обмена X, поэтому я использую:
источник