Как автозаполнять пути к файлу в Vim, как и в zsh?

17

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

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

zsh заменяет шаблон следующим образом:

 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 -

    
задан Mykle Hansen 23.03.2013 в 01:19
источник
  • Я ответил на это неправильно, основываясь на неправильном понимании вопроса. Я не знаю, как это сделать в Виме. Это определенно невозможно с любым вариантом Vim, и ничего, связанное с wildmode, не поможет. Его можно реализовать с помощью плагина. Я не знаю, существует ли он. Я вдруг хочу это сейчас, когда вы его подняли, поэтому, если я не смогу найти плагин, я его напишу. –  Jim Stewart 23.03.2013 в 07:04

2 ответа

8

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

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

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

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

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

set wildmenu
set wildmode=list:longest

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

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

set wildmode=list:longest,list:full

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

set wildignore=.git,*.swp,*/tmp/*
    
ответ дан Jim Stewart 23.03.2013 в 06:53
  • erhegerd! как рад? огромное спасибо! –  Mykle Hansen 27.03.2013 в 22:56
  • Я все еще пытаюсь заставить его работать ... он указан в моих сценариях, но я не получаю никаких действий с помощью Ctrl-S. Кажется, что-то делать с gvim, но не с обычным старым vim. Существуют ли особые требования к vim-версии? –  Mykle Hansen 27.03.2013 в 23:02
  • Он в состоянии, извините. В основном это работало, когда я впервые разместил это, но это было немного преждевременным требованием. Я разрабатываю ошибки и тестирую их прямо сейчас. Проверяйте GitHub через несколько дней и не стесняйтесь записывать там ошибки. Я напишу еще один комментарий здесь, когда я уверен, что существует стабильная версия, но это не правильный форум для обновлений статуса. –  Jim Stewart 27.03.2013 в 23:45
5

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

Быстрый просмотр раздела сценария vim.org ничего не вернул, но я не выглядел слишком далеко: вы должны копать дальше. Может быть, он где-то там.

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

Я использую CtrlP и нечеткое сопоставление может быть выполнено по пути к файлу или имени файла. Когда это делается на пути к файлу, я могу использовать 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 в ответе Джима, я думаю, у вас есть довольно мощный инструмент для навигации по файлам.

    
ответ дан romainl 23.03.2013 в 08:20
  • CtrlP - хороший материал. Интересно, есть ли простой способ подключиться к нему в командной строке. –  Jim Stewart 23.03.2013 в 08:40
  • Я, очевидно, согласен. Вы имеете в виду «использовать функцию из CtrlP для обеспечения завершения командной строки»? –  romainl 23.03.2013 в 08:52
  • Я действительно удалил свой ответ, потому что я неправильно понял вопрос. Но потом я пошел и написал автономный плагин, чтобы сделать это. Подробнее см. Мой новый ответ. Я поместил комментарии wildmode в новый ответ для другого варианта. –  Jim Stewart 23.03.2013 в 10:53