Подтвердить что ты не робот

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

В 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 -

4b9b3361

Ответ 1

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

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

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

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

Добавьте в .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/*

Ответ 2

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

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