Улучшение завершения первой вкладки

Настройка zsh позволяет вам просто нажимать клавишу табуляции и переключаться между каталогами. См. этот ответ.

Это потрясающее улучшение рабочего процесса, но мне нужна помощь в следующем:

Как я могу добиться, чтобы завершение вкладки zsh показывало мне ВСЕ файлы и папки и позволяло мне циклически просматривать их? (На самом деле он показывает файлы только тогда, когда больше нет каталога для перехода.)

Кроме того, было бы очень полезно, чтобы он не ставил "cd" перед завершением, когда выбор - это файл, а не папка.

(Я использую системный мим для открытия файлов из терминала.)

Спасибо.


person stackunderflow    schedule 07.06.2015    source источник
comment
Если вы используете сценарий, указанный в ответе другого пользователя, то нажатие клавиши табуляции позволит вам перемещаться по каталогам (И только к каталогам с текущим статусом...). Я также хочу, чтобы я мог просматривать файлы и, конечно же, выполнять их. Первая проблема заключается в том, что вы можете перемещаться по файлам только в том случае, если больше нет каталогов для перехода, а во-вторых, он помещает cd в начало строки, тогда... даже если это файл...   -  person stackunderflow    schedule 08.06.2015
comment
Stack Overflow — это сайт для вопросов по программированию и разработке. Этот вопрос кажется не по теме, потому что он не о программировании или разработке. См. раздел О каких темах я могу задать здесь в Справочном центре. Возможно, Суперпользователь или Unix & Linux Stack Exchange лучше спросить. См. также раздел Где размещать вопросы о Dev Ops?.   -  person jww    schedule 08.06.2015
comment
@jww Я не понял, почему это не так. Программирование виджетов ZLE — это своего рода программирование.   -  person 4ae1e1    schedule 08.06.2015


Ответы (1)


Немного изменив ответ здесь:

function complete_pwd_items_on_empty_buffer
{
    if [[ -z $BUFFER ]]; then
        BUFFER="./"
        CURSOR=2
        zle list-choices
    else
        zle expand-or-complete
    fi
}
zle -N complete_pwd_items_on_empty_buffer
bindkey '^I' complete_pwd_items_on_empty_buffer

Это вставит ./ и перечислит исполняемые файлы или каталоги, если командная строка пуста и вы нажмете клавишу TAB. Вы можете выполнить исполняемый файл в текущем дереве каталогов таким образом или cd в подкаталог таким образом, если вы установили опцию AUTO_CD.

На самом деле мы можем сделать немного лучше, включив этот трюк в командной строке только с пробелами:

function complete_pwd_items_on_empty_buffer
{
    if [[ $BUFFER =~ ^[[:space:]]*$ ]]; then
        BUFFER+="./"
        CURSOR+=2
        zle list-choices
    else
        zle expand-or-complete
    fi
}
zle -N complete_pwd_items_on_empty_buffer
bindkey '^I' complete_pwd_items_on_empty_buffer
person 4ae1e1    schedule 07.06.2015
comment
Спасибо за ваш полезный ответ. Это работает именно так, как я хочу! Здорово! На ваш вопрос: из-за cd функция автозаполнения показывала только каталоги. Если вы зайдете так глубоко в дерево каталогов, чтобы больше не было каталога для перехода, ТОГДА он показал файлы (потому что не было каталога, в который можно было бы перейти). Это лучшее объяснение? - person stackunderflow; 08.06.2015
comment
@stackunderflow Я вижу. Читаю только... когда... по-другому. - person 4ae1e1; 08.06.2015
comment
@stackunderflow Но эй, зачем завершать cd файлы списка, когда он достигает листа? В этом случае он должен возвращать ненулевой статус и печатать совпадения (если вы включили этот тип сообщений). - person 4ae1e1; 08.06.2015
comment
Я не знаю, почему это так. Но вы можете попробовать сами. И нет, сообщения об ошибке нет. - person stackunderflow; 08.06.2015
comment
@stackunderflow Я не знаю, почему это происходит. Но не должно. Я полагаюсь на завершение табуляции для cd почти ежечасно и знаю это довольно хорошо. С Prezto или без (без Prezto означает ванильный Zsh) я не могу воспроизвести. Я предполагаю, что у вас есть какие-то неправильные настройки. - person 4ae1e1; 08.06.2015
comment
Вот еще один более сложный вариант. Он будет перечислять файлы на ‹TAB› в пустой командной строке и в середине любой команды. Он будет перечислять каталоги на ‹ПРОБЕЛ›‹TAB› в пустой командной строке. Он будет перечислять исполняемые файлы на ‹ПРОБЕЛ›‹ПРОБЕЛ›‹TAB› в пустой командной строке. Его можно настроить для добавления cd или ./ в тех случаях, когда используется глобальная переменная. Подробнее ownyourbits.com/2017 /30/01/. Я не могу разместить код здесь, потому что это закрытый вопрос - person nachoparker; 31.01.2017