Як я бачу повний шлях поточного файлу?


123

Коли я редагую файл у Vim, чи є команда побачити шлях поточного файлу? Іноді це дуже зручно, якщо в проекті є кілька файлів з однаковою назвою.

Відповіді:


142

Ви можете натиснути {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

4
Хіба Ctrl+Gбільше не схожий на "шлях відносно cdd vim"?
Джаспер

@Jasper Хороший улов! Оновлено відповідь.
thameera

4
Здається, C-gце за замовчуванням 0C-g, і 2C-gвідображає номер індексу буфера (починаючи з 1), а також додатково.

Я так радий, що буду 100-ти, що підтвердив вашу відповідь! Дякую за це 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

Пов'язані:


2
Можливо, варто відзначити, що ви також можете використовувати ці =expand...вирази після того, Ctrl-Rяк у режимі вставки.
dash-tom-bang

22

Ви можете використовувати :!ls %:pповний шлях до поточного файлу.

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

Є кілька інших цікавих модифікаторів імені файлів, таких як:

  • :~: Отримайте шлях до файлу відносно домашнього каталогу (цей мені чомусь не працював)
  • :.: Отримайте шлях до файлу відносно поточного каталогу ( %за замовчуванням)
  • :r: Корінь імені файлу. Ім'я файлу без розширення.
  • :e: Розширення файлу.
  • :h: Розділіть /і поверніть ліву половину (тобто, якщо я редагуватиму файл шляхом /tmp/test.txtта запустіть %:p:h, повернеться/tmp
  • :t: Розділіть /і поверніть праву половину (тобто, якщо я редагую файл у шляху /tmp/test.txtта запустіть %:p:t, повернетьсяtext.txt

Я думаю, ви мали на увазі%: p: t поверне text.txt
Джон О'М.

@ JohnO'M. так, це дякую: D. Виправлено.
CharlesL

7

Можна побачити поточний робочий каталог із :pwd. Звичайно, це лише каталог, а не ім'я файлу. Для отримання робочого каталогу та імені файлів ми можемо скористатися спеціальним реєстром %, який містить інформацію про поточний файл.

Якщо ви використовуєте :echo @%, ви отримаєте каталог та ім’я поточного файлу.
Якщо ви використовуєте :echo expand('%:p'), ви отримаєте повний шлях та ім'я поточного файлу. Це дуже схоже на відповідь CharlesL .

Я пам'ятаю цей, хоча, тому що якщо ви використовуєте допомогу VIM в :h expand, то він зазначає , що %і %:pта їхні родичі.



3

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

:echo resolve(expand('%:p'))

3

Алеаді є кращими відповідями, але якщо (з якихось причин) ви хотіли скористатися оболонкою, щоб отримати повний шлях до файлу (це корисніше, якщо ви збираєтеся виконати якусь іншу операцію над файлом із оболонкою), у подібній системі Unix можна запустити:

:!realpath %

або:

:'<,'>!realpath %

щоб вставити шлях у документ через поточний вибір.

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

:w ! sudo tee %

щоб зберегти файл (крихітний біт офтопік там, але це хороший приклад того, що ще можна зробити з %реєстром).


realpathце не POSIX, тому це може бути простіше:!echo "$PWD/%"
muru

Домовились; гарний дзвінок.
Сем Віт

2

Потрібно встановити рядок статусу таким, що його можна побачити, а також встановити шлях. Я зробив це постійно, додавши два рядки нижче до мого ~ / .vimrc

set laststatus=2
set statusline+=%F

Якщо ви хочете просто запустити це один раз. Потім при VIing документі тип

:set laststatus=2       <ENTER>
:set statusline+=%F     <ENTER>

1
Це та сама відповідь, як та, яку зробив thameera на те саме питання.
statox


1

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

Для цього вам потрібно встановити titleпараметр і titlestring. Поточний Я використовую наступні налаштування:

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

Він покаже ім'я хоста Vim, потім повний шлях до файлу та наступний змінений час файлу. Дивіться малюнок нижче для демонстрації

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

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