Как сделать так, чтобы Vim выполнял обычное (похожее на Bash) дополнение для имен файлов?


289

Когда я открываю новый файл в Vim и использую завершение табуляции, он завершает полное имя файла вместо частичного сопоставления, как это делает Bash. Есть ли возможность сделать так, чтобы завершение этой вкладки с именем файла работало как Bash?


10
С технической точки зрения, я уверен, что "bash" не выполняет никаких вкладок. Это readline, который делает это.
Maxy-B

2
Речь идет о настройке поведения функции ^ X ^ F?
BrunoJCM

Ответы:


413

Я лично пользуюсь

set wildmode=longest,list,full
set wildmenu

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

Bash-like будет просто

set wildmode=longest,list 

но полный это очень удобно.


1
Я бы хотел, чтобы это было поведение по умолчанию в vim. Я думал, что до полного завершения вкладки не было никакого смысла, пока я не увидел этот пост.
Неха Каранджкар

6
@NehaKaranjkar Я рекомендую поддерживать архив dotfiles, чтобы облегчить его развертывание в новых средах
Майкл

2
Есть ли способ начать полный, только когда результатов мало? что - то вроде set wildmode=longest,5full,list. С большим количеством результатов бесполезно, но очень удобно с немногими. Это будет прекрасно с чем-то вроде «показывать полное, только если завершение помещается на одной строке экрана»
albfan

1
Раньше это работало в прошлом (gVim / ubuntu), но сейчас это не работает (macvim8.x / macOS). Смотрите пример . Любые идеи?
Пасхалис

1
После того, как я допустил завершение закладки в течение 2 месяцев, я думаю, что должен быть способ упростить ее. Спасибо.
ramwin

23

Самое близкое поведение к завершению Баша должно быть

set wildmode=longest:full,full

Если набрать несколько символов, нажатие клавиши табуляции даст все совпадения, доступные в wildmenu. Это отличается от ответа Майкла, который открывает окно, похожее на быстрое исправление, под командной строкой.

Затем вы можете продолжать печатать остальные символы или снова нажимать клавишу Tab, чтобы автоматически завершить первое совпадение и обвести его.


Я думаю, что предпочитаю этот путь.
Эдди Экофо

8

Если вы не хотите устанавливать подстановочное меню, вы всегда можете нажать Ctrl+, Lкогда хотите открыть файл. Ctrl+ Lзавершит имя файла, как завершение Bash.


Ctrl-L не действует как автозаполнение bash. Он не перебирает все возможные варианты.
дождь

2
Мой Баш делает действовать таким образом. <Tab>завершает текущую строку настолько, насколько это возможно (как CTRL-Lв Vim), и <Tab><Tab>показывает список возможных совпадений (как CTRL-Dв Vim).
Glts

8

Помимо предложенного wildmode / wildmenu, Vim также предлагает возможность показать все возможные дополнения с помощью Ctrl+ D. Это может быть полезно для некоторых пользователей, которые сталкиваются с этим вопросом при поиске различных вариантов автозаполнения в Vim, как я.


4

Я предполагаю, что вы используете автозаполнение в Vim через Ctrl+ Nдля поиска в текущем буфере. Когда вы используете эту команду, вы получаете список решений; просто повторите команду, чтобы перейти к следующему пункту в списке. То же самое верно для всех команд автозаполнения. Пока они заполняют все слово, вы можете продолжать перемещаться по списку, пока не дойдете до того, который хотите использовать.

Это может быть более полезной командой: Ctrl+ P. Единственное отличие состоит в том, что Ctrl+ Pвыполняет поиск в буфере назад, а Ctrl+ Nищет вперед ... Реально, они оба предоставят список с одинаковыми элементами, и они могут просто появиться в другом порядке.


0

Попробуйте использовать :set wildmenu. Кроме того, я не уверен, что именно вы пытаетесь.

Ах да, и, возможно, попробуйте эту ссылку: ссылка

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.