2013-03-23 1 views
17

В Zsh я могу использовать завершение имени файла с помощью косой черты, чтобы нацелить файл в глубину моего исходного дерева. Например, если я типа:Как автозаполнять пути к файлу в Vim, как и в zsh?

vim s/w/t/u/f >TAB< 

ЗШ заменяет шаблон с:

vim src/wp-contents/themes/us/functions.php 

То, что я хотел бы, чтобы быть в состоянии целевых файлов точно так же в командной строке Vim, так что печатать

:vi s/w/t/u/f >TAB< 

будет автозаполнения:

:vi src/wp-contents/themes/us/functions.php 

Я пытаюсь разобрать документы Vim для wildmode, но я не вижу, какие настройки дадут мне это. Он делает автозаполнение для отдельных имен файлов, но не путей к файлам. Поддерживает ли Vim это изначально? Или как я могу настроить алгоритм автозаполнения файлов?

Спасибо за любой совет! -mykle-

+0

Я ответил на это неправильно, основываясь на неправильном понимании вопроса. Я не знаю, как это сделать в Виме. Это определенно невозможно с любым вариантом Vim, и ничего, связанное с 'wildmode', не поможет. Его можно реализовать с помощью плагина. Я не знаю, существует ли он. Я вдруг хочу это сейчас, когда вы его подняли, поэтому, если я не смогу найти плагин, я его напишу. –

ответ

8

Я не мог найти плагин, чтобы сделать это, поэтому я написал один. Это называется vim-zsh-path-completion. Он делает то, что вы ищете, хотя через <C-s> вместо <Tab>. Вы можете использовать его с <Tab> для еще большего контроля над тем, что соответствует.

У него есть ошибки, но для базовых путей без пробелов/специальных символов он должен работать. Я думаю, что это полезно в текущем состоянии, чтобы быть полезным. Я надеюсь сгладить ошибки и очистить код, но я решил, что сейчас начну запрашивать обратную связь.

Спасибо за идею!

Оригинальный (неправильный) ответ, но с некоторой полезной информацией о дикой природе Вима.

Поместите следующее в вашем .vimrc:

set wildmenu 
set wildmode=list:longest 

Это завершит до самого длинного уникального матча на <Tab>, в том числе и присоединяя / и спуска в каталоги, где это необходимо. Если есть несколько совпадений, он покажет список совпадений для того, что вы ввели до сих пор. Затем вы можете ввести еще несколько символов и <Tab> еще раз.

Я предпочитаю следующую настройку, которая завершает в первом уникальном матче на <Tab>, а затем выскакивает меню, если вы еще раз ударить <Tab>, который вы можете перемещаться с помощью клавиш со стрелками и нажмите клавишу ВВОД, чтобы выбрать из:

set wildmode=list:longest,list:full 

Отъезд :help wildmenu и :help wildmode. Вы также можете установить wildignore в список шаблонов для игнорирования при заполнении. У меня есть как:

set wildignore=.git,*.swp,*/tmp/* 
+0

erhegerd! как рад? огромное спасибо! –

+0

Я все еще пытаюсь заставить его работать ... он указан в моем: scriptnames, но я не получаю никаких действий с помощью Ctrl-S. Кажется, что-то делать с gvim, но не с обычным старым vim. Существуют ли особые требования к vim-версии? –

+0

Он в состоянии, извините. В основном это работало, когда я впервые разместил это, но это было немного преждевременным требованием. Я разрабатываю ошибки и тестирую их прямо сейчас. Проверяйте GitHub через несколько дней и не стесняйтесь записывать там ошибки. Я напишу еще один комментарий здесь, когда я уверен, что существует стабильная версия, но это не правильный форум для обновлений статуса. –

5

У Vim эта функция отсутствует. Ближайшей встроенной функцией является комманда wildmenu/wildmode, но она по-прежнему очень отличается.

A quick look at the script section of vim.org ничего не возвращал, но я не выглядел слишком далеко: вы должны копать дальше. Может быть, это где-то.

Вы пробовали Command-T, LustyExplorer, FuzzyFinder, CtrlP или один из многих подобных плагинов?

Я использую CtrlP и нечеткое сопоставление может быть выполнено по пути к файлу или имени файла. Когда это сделано на FilePath, я могу использовать keysequence ниже, чтобы открыть src/wp-contents/themes/us/functions.php (предполагая, что functions.php единственный файл под us, который начинается с f):

,f " my custom mapping for the :CtrlP command 
swtuf<CR> 

редактировать

Размышляя про возможное решение. Боюсь, я был немного близоруким. Я был сосредоточен на ваших точных требованиях, но у Vim есть интересные трюки, когда дело доходит до открытия файлов!

Команда :e[dit] принимает два вида масок: * подобно * вы будете использовать в своей скорлупе и ** означает «любой подкаталог».

Так что вполне возможно сделать:

:e s*/w*/t*/u*/f*<Tab> 

или что-то вроде:

:e **/us/f<Tab> 

или даже:

:e **/fun<Tab> 

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

+0

CtrlP - хороший материал. Интересно, есть ли простой способ подключиться к нему в командной строке. –

+0

Я, очевидно, согласен. Вы имеете в виду «использовать функцию из CtrlP для обеспечения завершения командной строки»? – romainl

+1

Я действительно удалил свой ответ, потому что я неправильно понял вопрос. Но потом я пошел и написал автономный плагин, чтобы сделать это. Подробнее см. Мой новый ответ. Я добавил комментарии «wildmode» в новый ответ для другого варианта. –