Как исправить завершение вкладки, чтобы она не скрывала записи?

17

Я использую oh-my-zsh в Mac OS X с homebrew'ed zsh 4.3.12. Я недавно наткнулся на странную проблему. У scripts/not-usedменя есть несколько .Rфайлов:

breakdowns.R             eventloop.R              process-largeclients.R   process-qt.R
reprocess-pinning.R      calculate-qt-error.R     generate_decision_tree.R process-net.R
process-scalingexp.R

Тем не менее, когда я пытаюсь ls scripts/not-used/+ Tabпервое завершение, ls scripts/not-used/_.Rгде _представляет позицию курсора. Если я нажму Tabснова, я получу это странное завершение:

$ ls scripts/not-used/.R                                                                          
breakdowns.R  eventloop.R

Как сбросить это уродливое (неправильное) поведение?

Опции, которые установлены:

alwaystoend autocd autonamedirs autopushd cdablevars completeinword
correctall extendedglob extendedhistory noflowcontrol
histexpiredupsfirst histignoredups histignorespace histreduceblanks histverify
incappendhistory
interactive login longlistjobs monitor promptsubst 
pushdignoredups pushdminus pushdsilent pushdtohome
sharehistory shinstdin zle
Никола Кнежевич
источник
2
как breakdowns.R eventloop.Rнеправильное завершение? Попробуйте отключить эту completeinwordопцию, поскольку это позволяет выполнять завершение с обоих концов курсора, слева и справа. Это означает, что если я наберу « pacкак» pacmanи будет вызвана команда arpac, то arpacона будет в списке завершений, так как завершение происходит с обеих сторон курсора, а не только справа.
Алексей Магура
Я не знал о вопросе ... Итак, breakdowns.R eventloop.Rэто неправильное завершение, в смысле неполноты. Если вы внимательно посмотрите на список файлов, то здесь есть не только эти 2, заканчивающиеся на .R.
Никола Кнежевич
Я попытался задействовать несколько файлов с такими же именами, как те, которые вы перечислили, а также zR, az, .R и z_test.R для целей тестирования - z_test.R не будет появляться при попытке его автозаполнения, но Z, .R будет. Догадываясь, что это какая-то неудача с регулярным выражением
Дмитрий Д.Б.
Это может быть связано с github.com/robbyrussell/oh-my-zsh/issues/1398 , который является старой проблемой, но последняя версия имеет аналогичный код завершения. Я не пытался обойти, чтобы подтвердить.
rjewell

Ответы:

1

Проблема заключается в zstyleсписке совпадений.

Если вы добавите следующее к вашему .zshrc, это исправит это:

zstyle ':completion:*' matcher-list 'm:{a-zA-Z}={A-Za-z}' 'e:|[._-]=* e:|=*' 'l:|=* e:|=*'

e:(Вместо значения по умолчанию r:) заставляет матч до конца строки.

Подробную информацию об этих опциях можно найти в документах ZSH: Completion Matching Control.

Герт
источник
0

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

Автозаполнение использует "оба конца", как описано Tshepang.

Попробуйте поместить файл в эту папку без имени .R, и вы увидите, что этот бит .R исчезнет.

Честно говоря, автозаполнению действительно нужно что-то, чтобы «завершить» не слепое предположение о каталоге.

Би Кей
источник
0

Герт вполне может быть правильным для исправления. Однако я подозреваю, что причина неполного характера списка файлов (breakdowns.R и eventloop.R) заключается в том, что эти файлы являются единственными файлами в текущем рабочем каталоге, которые помечены как исполняемые. Вы можете подтвердить это с помощью "ls -l" и посмотреть разрешения для чего-то вроде rwx. Если у вас нет «./» или этого каталога явно в PATH, то я ожидаю, что эти два файла тоже не появятся.

 8 -rwxr--r-- 1 userbob    groupbob      4420 May 28 15:55 filebob.R
Вольтер
источник