Ярлик відкрити файл у Vim


123

Я хочу відкрити файл у Vim, як у Eclipse, використовуючи Ctrl+ Shift+ Rабо через Ctrl+ Nопцію автозаповнення. Виберіть ярлик клавіатури, введіть ім'я / шаблон файлу та виберіть із усіх відповідних імен файлів.

Я знаю, що це відкриття зазвичай:

:tabe <filepath>
:new <filepath>
:edit <filepath>

Проблема тут полягає в тому, що я повинен вказати весь шлях до файлів у цих випадках.


1
Зауважте, що запропоновані команди мають різний ефект :tabe, відкриють файл на новій вкладці, :newгоризонтально розділять вікно та :editзакриють поточний файл перед відкриттям нового.
Skippy le Grand Gourou

Відповіді:


61

Нещодавно я закохався у fuzzyfinder.vim ... :-)

: FuzzyFinderFile дозволить вам відкривати файли, ввівши часткові імена або шаблони.


141

Те, що я зазвичай роблю, - це e .(e-space-dot), яке дає мені доступний /для перегляду поточний каталог - тоді я можу - шукати фрагменти імен, як і пошук слова в текстовому файлі. Я вважаю, що це загалом досить добре, просто і швидко.


22
Вам не потрібно місця, заощаджуючи додаткові набрання 25%. ( :e.).
Конрад Рудольф

67
Точка вам не потрібна, якщо ви використовуєте велику літеру, наприклад: E <ENTER>
Андрій Дроздюк,

2
@drozzy Це трапляється з vim :-)
DerMike

7
Існує різниця в поведінці між :e.і :Eхоча: якщо поточний файл був відредагований і ще не збережений, перший буде скаржитися (як :edit) через "не записувати з останньої зміни", а другий горизонтально розділить вікно (наприклад :new), щоб дозволити відкриття нового файлу (при цьому обидва замінять поточний файл новим файлом, якщо він не був змінений (як :edit)).
Skippy le Grand Gourou

1
Якщо ви відкриєте файл, а потім заміните його на другий файл, ви можете повернутися до першого, використовуючи "e #"
dkretz

33

:find інший варіант.

Я відкриваю vim з кореня свого проекту і маю pathнабір.

Потім я можу відкрити файли, розташовані в будь-якому місці дерева, використовуючи:

:find **/filena< tab >

Вкладка автоматично заповнюватиметься через різні матчі. ( **вказує на пошук рекурсивно через шлях).


Я не вважаю корисним, :findоскільки отримати шлях відносно робочого каталогу. Дивіться питання і відповідь @romainl тут: stackoverflow.com/questions/28224168 / ... . Мені здається більш цікавою відповідь @strager, щоб легше було пройти шлях відносно робочого каталогу.
ziiweb

25

Ви можете шукати файл у поточному шляху за допомогою **:

:tabe **/header.h

Натисніть вкладку, щоб побачити різні доповнення, якщо збіг більше.


Я намагався використовувати це, але це так повільно. Я маю на увазі, що моя програма велика, і редактор на деякий час перестав працювати. Чи знаєте ви якісь налаштування для підвищення продуктивності та швидкості редактора.
Techmaddy

1
Гарна відповідь. Використовуйте щось на зразок, :tabe **/*der.hякщо ви не пам’ятаєте повне ім’я файлу.
ziiweb

16

Подумайте про використання плагіна CtrlP .

Він включений у Janus Distributive .

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


1
насправді я використовую його як частину дистрибуції Janus.
Олексій

Оригінальний репортаж CtrlP неактивний, але є активна вилка
jpyams

12

якщо я чогось не пропускаю, e: ім'я файлу - це найшвидший спосіб, який я знайшов.

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


@dirkgently, Це так. Це все ще є ярликом, як підказує назва цього питання, але я не думаю, що це те, що шукає запитувач.
страгер

Для мене вкладка автозаповнення не працює для: e. Крім того, ви не завжди хочете шукати ім'я файлу, яке починається з чогось, а скоріше середнє слово у назві файлу.
Андрій Дроздюк


9

Я використовую пару ярликів у своєму .vimrc-файлі (точний синтаксис нижче).

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

Ось що роблять команди:

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

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

Вставте їх у свій .vimrc:

map ,e :e <C-R>=expand("%:p:h") . "/" <CR>

map ,cd :cd %:p:h <CR>

Ось послідовність подій:


  1. Ви редагуєте файл під назвою test.java у "/ home / prog"
  2. ,cd -> Поточний робочий каталог тепер стає "/ home / prog"
  3. ,e -> Розгортається на ": e / home / prog", щоб ви могли просто заповнити ім'я файлу, скажімо test.h.

  1. ,e -> Розгортається до ": e / home"
  2. tab -> Цикл по підкаталогах / home
  3. enter-> cdв каталог, який ви хочете сказати / home / prog
  4. ,e -> Розгортається до ": e / home / prog"

8

Є також команда-t, яку я вважаю найкращою з групи (і я їх все пробував). Встановити це - незначні клопоти, але, як тільки він буде встановлений, використовувати це мрія.

https://wincent.com/products/command-t/


1
Ви також можете спробувати ctrlp.vim ( github.com/kien/ctrlp.vim ). Це в основному те саме, що Command-T, але написане в чистому Vimscript. (ІМХО простіше використовувати і)
datentyp

6

Використовуйте вкладки, вони працюють під час введення шляхів до файлів у режимі vim escape!


4

Якщо у вас є теги (і вам слід), ви можете відкрити файл із командного рядка просто за назвою класу чи методу чи функцією c, за допомогою "vim -t DBPlaylist", а в vim - ": tag ShowList ".


4

Якщо ви редагуєте файли в загальному каталозі, ви можете :cdдо цього каталогу, а потім використовувати :eлише ім'я файлу.

Наприклад, а не:

:e /big/long/path/that/takes/a/while/to/type/or/tab/complete/thingy.rb
:sp /big/long/path/that/takes/a/while/to/type/or/tab/complete/other_thingy.c
:vs /big/long/path/that/takes/a/while/to/type/or/tab/complete/one_more_thingy.java

Ви можете зробити:

:cd /big/long/path/that/takes/a/while/to/type/or/tab/complete/
:e thingy.rb
:sp other_thingy.c
:vs one_more_thingy.java

Або якщо у вас вже відкритий файл у потрібному каталозі, ви можете скористатись %скороченням для поточного імені файлу та обрізати його у поточному каталозі за допомогою :hмодифікатора ( :help :_%:):

:e /big/long/path/that/takes/a/while/to/type/or/tab/complete/thingy.rb
:cd %:h
:sp other_thingy.c
:vs one_more_thingy.java

І, як уже говорили інші, ви можете вкласти вкладки імен файлів на попередньому рядку (див. :help cmdline-completionДокладніше).


4

Це не зовсім те , що ви шукаєте, але це добре у багатьох випадках (хоча і не у всіх).

Якщо ви відкриваєте VIM і в буфері є ім'я файлу, ви можете поставити курсор на це ім'я файлу та ввести gf. Це відкриває файл, ім'я якого знаходиться під курсором у тому самому буфері. Це те саме, що

:e CTRL+r CTRL+w


1
Я натиснув gf і тепер я відкрив новий файл, який знаходиться під курсором. Тепер як повернутися до вихідного файлу. !!
vrbilgi

@ user430294: відкрито в іншому буфері. Використання:b oldname
Натан Фелман

@vrbilgi, використовуйте Ctrl + o, щоб повернутися до раніше відредагованого файлу. Використовуйте Ctrl + i, щоб знову перейти до файлу, з якого ви повернулися.
Беров

3

Я знаю три плагіни, які дозволяють відкривати файли, підтримують автоматичне завершення, і не потрібно вводити повну назву файлу для відкриття (якщо файли знаходяться в одному з каталогів з &pathпараметра vim) :

Останнім часом я бачив ще один плагін із подібною функцією, але ім'я не пам’ятаю.

Незабаром: find, швидше за все, підтримує автоматичне завершення - патчі на цю тему циркулюють у розсилці vim_dev сьогодні.


1
  • ви можете використовувати (встановити wildmenu)
  • ви можете використовувати вкладку для автозаповнення імен файлів
  • Ви також можете використовувати відповідність, наприклад: e p*.datабо щось подібне (наприклад, у старих "dos")
  • Ви також можете: переглянути підтвердження e (для графічного вікна)

  • але, ймовірно, слід також вказати, яку версію vim ви використовуєте, і як працює ця річ у emacs. Можливо, ми могли б знайти точну альтернативу vim.


1

Згадано про FuzzyFinder, однак я люблю текст, як поведінка плагіна FuzzyFinderTextmate, який розширює поведінку на всі підкаталоги.

Переконайтеся, що ви використовуєте версію 2.16 fuzzyfinder.vim - вищі версії розбивають плагін.


1

За допомогою Exuberant ctags ви можете створювати файли тегів з інформацією про файл:

ctags --extra=+f -R *

Потім відкрийте файл з VIM за допомогою

:tag filename

Ви також можете використовувати <tab>для автозаповнення імені файлу.


1

У GVIM файл можна переглядати за допомогою діалогового вікна відкриття / читання / запису;

:browse {command}

{command} - відкривати / читати / писати

відкрита - відкриває файл читання - Додає файл запис - SaveAs діалог


0

Я встановив FuzzyFinder. Однак обмеженням є те, що він знаходить лише файли в поточному режимі. Одне вирішення цього питання - додати FuzzyFinderTextmate. Однак, виходячи з документів і коментарів, це не працює надійно. Вам потрібна правильна версія FuzzyFinder, і вам потрібна ваша копія Vim для компіляції з підтримкою Ruby.

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

:args app/**
:args config/**
:args test/**
etc...

(Це означає, що я мав би можливо відкрити безліч файлів, однак поки що, здається, це працює нормально.)

Після цього я можу використовувати FuzzyFinder в буферному режимі, і він буде діяти якось як command-oярлик TextMate ...

:FuzzyFinderBuffer

Ти впевнений? У мене є. Config у своєму .vimrc, шукайте "g: fuf_abbrevMap". Я, мабуть, знайшов приклад у документації. Коли я набираю ярлик, то я набираю абревіатуру типу "web:", і вона знайде всі файли в папці, яку я вибрав. Моя проблема насправді полягає в тому, що вона чомусь більше не відкриває файли, натомість я бачу [NEW DIRECTORY] у рядку стану. Але у мене така ж проблема: o, здається, не має відношення до fuf.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.