Как я могу увидеть полный путь к текущему файлу?

123

Когда я редактирую файл в Vim, есть ли команда, чтобы увидеть путь к текущему файлу? Иногда это очень удобно, если в проекте несколько файлов с одинаковыми именами.

thameera
источник

Ответы:

143

Вы можете нажать {count}Ctrl-G:

{count}CTRL-G       Like CTRL-G, but prints the current file name with
                    full path.  If the count is higher than 1 the current
                    buffer number is also given.

Нажатие, 1сопровождаемое Ctrl+, Gпоказывает полный путь к текущему файлу. Если {count}больше 1, имя буфера также будет показано.

(Нажатие только Ctrl+ Gпоказывает путь относительно текущего рабочего каталога Vim, как отметил Джаспер в комментариях.)

Вы можете использовать следующую команду, .vimrcчтобы добавить полный путь к строке состояния, чтобы он всегда был виден:

set statusline+=%F
thameera
источник
4
Разве это не Ctrl+Gпохоже на «путь относительно cwd» vim?
Джаспер
@ Джаспер Хороший улов! Обновил ответ.
thameera
4
Кажется, C-gэто значение по умолчанию для 0C-g, и кроме того 2C-gпоказывает номер индекса буфера (начиная с 1).
Я так рад быть сотым, чтобы поддержать ваш ответ! Спасибо за это 1C-g!
хранилище
53

Регистр %содержит имя текущего файла.

Для отображения отображаемой информации можно ввести следующие команды:

:echo @%                |" directory/name of file
:echo expand('%:t')     |" name of file ('tail')
:echo expand('%:p')     |" full path
:echo expand('%:p:h')   |" directory containing file ('head')

Если все, что вам нужно, это отобразить имя текущего файла, введите :f/ :lsили нажмите Ctrl- g(для полного пути нажмите 1затем Ctrl- g).

В режиме вставки, типа Ctrl- а rзатем %вставить имя текущего файла.

Следующие команды вставляют в буфер строки, состоящие из полного пути текущего и альтернативного файлов:

:put =expand('%:p')
:put =expand('#:p')

Источник: Получить имя текущего файла на vim wikia.

Связанный:

kenorb
источник
2
Возможно, стоит отметить, что вы также можете использовать эти =expand...выражения после того, Ctrl-Rкак в режиме вставки.
дэш-том-бэнг
22

Вы можете использовать, :!ls %:pчтобы получить полный путь к текущему файлу.

В зависимости от контекста ex, %будет означать либо содержимое файла, либо имя файла. При выделении он представляет путь к файлу относительно текущего каталога. Команда ' %:p' добавит модификатор полного пути к имени файла %.

Есть несколько других интересных модификаторов имени файла, таких как:

  • :~: Получить путь к файлу относительно домашнего каталога (по какой-то причине он у меня не работал)
  • :.: Получить путь к файлу относительно текущего каталога (по %умолчанию)
  • :r: Имя файла root. Имя файла без расширения.
  • :e: Расширение файла.
  • :h: Разделить /и вернуть левую половину (т. Е. Если я редактирую файл по пути /tmp/test.txtи запустить %:p:hвернется/tmp
  • :t: Разделить /и вернуть правую половину (т. Е. Если я редактирую файл по пути /tmp/test.txtи запустить %:p:tвернетсяtext.txt
CharlesL
источник
Я думаю, что вы имели в виду%: p: t вернет text.txt
Джон ОМ.
@ JohnO'M. да, правильно спасибо: D. Исправлена.
CharlesL
7

Можно увидеть текущий рабочий каталог с :pwd. Конечно, это только каталог, а не имя файла. Чтобы получить рабочий каталог и имя файла, мы можем использовать специальный регистр %, который содержит информацию о текущем файле.

Если вы используете :echo @%, вы получите каталог и имя файла текущего файла.
Если вы используете :echo expand('%:p'), вы получите полный путь и имя файла текущего файла. Это очень похоже на ответ CharlesL .

Я помню этот, хотя, потому что если вы используете помощь VIM в :h expand, то он отмечает , что %и %:pи их родственники.

davidlowryduda
источник
4

Я использую:

:f[ile]

Это :fили :file.

Я удивлен, что никто не упомянул это в ответах, я что-то упустил?

Седрик Ван Ромпей
источник
Просто и полезно
Мортеза Зияе
3

Чтобы показать полный путь для всех файлов, включая разрешенные символические ссылки, используйте следующее.

:echo resolve(expand('%:p'))
joelostblom
источник
3

Есть несколько лучших ответов, но если (по какой-то причине) вы хотите использовать оболочку, чтобы получить полный путь к файлу (это более полезно, если вы собираетесь выполнить какую-либо другую операцию над файлом с оболочкой), в Unix-подобной системе вы можете запустить:

:!realpath %

или же:

:'<,'>!realpath %

вставить путь в документ поверх текущего выделения.

Регистр %всегда содержит имя файла. Пример реального мира может быть, если вы редактируете файл конфигурации, но у вас нет прав на запись (и вы не хотите запускать Vim от имени пользователя root), вы можете отредактировать файл, а затем запустить:

:w ! sudo tee %

сохранить файл (немного оффтоп, но это хороший пример того, что еще можно сделать с помощью %регистра).

Сэм Уитед
источник
realpathне POSIX, так что это может быть проще сделать:!echo "$PWD/%"
Muru
Согласовано; хороший звонок.
Сэм Уитед
2

Вам необходимо установить строку состояния для просмотра, а также установить путь. Я сделал это навсегда, добавив две строки ниже в мой ~ / .vimrc

set laststatus=2
set statusline+=%F

Если вы хотите просто запустить это один раз. Затем при просмотре типа документа

:set laststatus=2       <ENTER>
:set statusline+=%F     <ENTER>
user34612
источник
1
Это тот же ответ, что и Тамира на тот же вопрос.
statox
1

Вы можете показать полный путь к файлу, который вы редактируете, в строке заголовка, что, на мой взгляд, является удобным способом показать путь к файлу.

Для этого вам нужно установить titleопцию и titlestring. В настоящее время я использую следующие настройки:

set title
set titlestring=%{hostname()}\ \ %F\ \ %{strftime('%Y-%m-%d\ %H:%M',getftime(expand('%')))}

Он покажет имя хоста Vim, затем полный путь к файлу и время последнего изменения файла. Смотрите рисунок ниже для демонстрации

введите описание изображения здесь

jdhao
источник