Можно ли изменить поведение завершения табуляции в рыбной оболочке?

Обновление: Эта жалоба относится к старой версии fish. См. приведенный ниже комментарий одного из разработчиков fish, в котором описываются удивительные улучшения в поведении пейджера fish, которые аннулировали эту жалобу. >

Оболочка рыбы довольно крутая, однако я ненавижу одну из особенностей табуляции.

Я часто - почти как нервный тик - нажимаю {tab}{tab} при вводе пути при смене каталогов. Это позволяет мне использовать {tab} для проверки содержимого некоторого пути, одновременно решая ту часть проблемы устранения неоднозначности пути, которую позволяют решить мои текущие нажатия клавиш. Это дает отличный способ быстро найти самую быструю комбинацию клавиш, чтобы добраться до определенного места в файловой системе, не задумываясь и не обязательно заранее зная содержимое различных каталогов.

Fish, с другой стороны, интерпретирует {tab} {tab} таким образом, что я считаю невероятно раздражающим. На первой {tab} перечислены возможные завершения, это здорово. При нажатии следующей вкладки рыба выбирает первое завершение в списке и заменяет последнюю часть пути, введенного в данный момент в строке, полным первым завершением - независимо от статуса устранения неоднозначности. Последующие вкладки циклически перебирают следующие возможности. Это похоже на то, что делает командная оболочка Windows.

Это намного хуже, чем обычное поведение bash...

Рассмотрим глубоко вложенную структуру каталогов foo/bar/baz/a/b/c/

Где некоторые из foo, bar, baz — это пустые каталоги. Завершение табуляции в Bash позволяет мне набирать cd foo/{tab}{tab}{tab}{tab}{tab}{tab} -- не задумываясь о том, сколько раз я нажимаю табуляцию, не задумываясь об эффектах. перед тем, как нажать вкладку на текущее состояние моей записи в командной строке.

В обычном случае все эти каталоги не будут пустыми, но приведенное выше все еще работает, чтобы очень быстро обнаружить наименьшее количество символов, которые мне нужно ввести, чтобы перейти к какому-то глубоко вложенному пути.

С поведением bash: cd some/unknown/dir/{tab}{tab} гарантирует, что

(1) Содержимое каталога dir/ я вижу (2) так как многое из того, что можно однозначно выразить из моей команды, пока выполнено, но не более того.

После нажатия на две вкладки выше я могу увидеть следующее содержимое:

abc123 bar123 baz123 bcd123 mnop123

возможны следующие действия:

a{TAB}{TAB} (дает мне abc123 и, если это каталог, перечисляет его содержимое)

m{tab}{tab} (дает мне mnop123 и, если это каталог, перечисляет его содержимое)

Предположим, я хочу перейти к пути bcd123: b -- показывает мне, что я слишком быстро печатал, теперь показаны только 3 варианта. Я легко делаю вывод, что мне нужно только нажать «c», чтобы устранить неоднозначность до моей цели.

b{tab}{tab}c{tab}{tab} (получает нужный мне путь, перечисляет содержимое bcd123, если это каталог)

модель рыбы намного хуже. b{tab}{tab} завершился бы до bar123, и мне нужно нажать табуляцию неизвестное количество раз, чтобы получить желаемое значение, кроме того, у меня нет возможности вернуть контекст ввода только к тем буквам, которые я мы действительно печатали до этого момента (кроме того, что несколько раз нажимали клавишу Backspace). Что, если в этом каталоге окажется целая куча вещей, начинающихся с ba - я полностью облажался, вот что происходит...

В целом модель рыбы хуже:

  • он не позволяет использовать вкладку для завершения вложенных путей - чтобы сделать это с рыбой, вам нужно '/' в нужное время в последовательности команд - что требует умственной обратной связи
  • гораздо труднее обнаружить последовательности значений в больших каталогах
  • в целом требует, чтобы вы «были осторожны», прежде чем нажимать вкладку, что заставляет вас нажимать ее реже и снижает ее полезность ...

Кто-нибудь, пожалуйста, скажите мне, что есть способ изменить поведение рыбы здесь, чтобы оно больше походило на bash ... рыба крутая, но такое поведение непригодно для использования - мне придется вернуться к bash, если нет способа изменить это ...


person Ben    schedule 28.01.2015    source источник
comment
Похоже, вы хотите поднять вопрос на github.com/fish-shell/fish-shell< /а>   -  person glenn jackman    schedule 29.01.2015


Ответы (1)


Я благодарю вас за написание этого подробного и вдумчивого поста, и он заслуживает такого же подробного и вдумчивого ответа!

Поведение завершения табуляции было переписано в fish top-of-tree (еще не выпущено) и называется «новым пейджером». Вы можете ознакомиться с целями разработки и обсуждением здесь. Я положил примечание в нижней части этого ответа о том, как его получить.

Оболочки индивидуальны, и, как и все личное, рационализации и оправдания ничего не стоят: они либо нравятся, либо нет, и мы можем даже не осознавать факторы, влияющие на наши чувства. Так что все, что я действительно могу сказать, это попробовать, посмотреть, как вы себя чувствуете, и (пожалуйста) отчитаться.

Я разместил на YouTube небольшой скринкаст нового пейджера. На что следует обратить внимание: 1. меню закрывается, если просто набрать больше, 2. оно «разворачивается» постепенно (требуется несколько вкладок, чтобы стать полностью видимым), никогда модально не захватывает ваш экран, даже когда есть огромное количество завершений, и легко доступен для поиска и навигации, а 3. escape всегда отклонит его и вернет вашу командную строку к тому, что вы набрали.

Позвольте мне рассмотреть ваши проблемы индивидуально:

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

"У меня нет возможности вернуть контекст ввода только к тем буквам, которые я фактически набрал до этого момента". В новом пейджере клавиша выхода делает именно это. Нажимать легко, так как escape находится прямо над вкладкой, где находится ваш палец.

"Что, если в этом каталоге окажется целая куча вещей, начинающихся с ba - я в полном дерьме, вот что происходит". Ни bash, ни old-pager-fish не справляются с большим количеством дополнений. fish перебросит вас в эту модальную среду пейджинга, в то время как bash прерывает ваш поток модальным диалоговым окном «Показать все 1002 возможности? (y или n)», которое заставляет вас прекратить то, что вы делаете, и нажать «n».

Я думаю, вам понравится, как с этим справляется новый пейджер. Сначала вы получаете короткое меню, которое занимает максимум пять строк ниже подсказки (не выше и не заменяя ее). Это меню не модальное, и его можно закрыть, набрав больше или нажав escape. Если вы снова нажмете вкладку, меню увеличится, чтобы показать больше завершений, но по-прежнему будет немодальным. Никогда не бывает резких переходов.

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

«гораздо труднее обнаружить последовательности значений неоднозначности в больших каталогах» С новым пейджером вы можете нажать escape, ввести еще немного, а затем снова нажать Tab. Или вы можете выполнить поиск в меню: поместите фокус в меню и введите что-нибудь, и оно будет отфильтровано. Смотрите скринкаст выше.

"в целом требует от вас "быть осторожным", прежде чем нажимать вкладку, из-за чего вы нажимаете ее реже и снижаете ее полезность" Очень важный момент, который новый пейджер решает несколькими способами. Во-первых, он использует понятие постепенного раскрытия, что означает, что для вывода большого количества данных требуется «работа». Во-вторых, он никогда не «захватывает ваш экран», как старый модальный пейджер. И, наконец, вы можете нажать escape, чтобы вернуться только к тому, что вы набрали, и, поскольку пейджер появляется под приглашением, он не будет оставлять маленькие какашки в вашей прокрутке, как это делает bash.

Если вы используете доморощенный, вы можете установить с мастера через brew install fish --HEAD. Также есть ночные сборки для Linux. И, наконец, не стесняйтесь открывать вопрос по адресу https://github.com/fish-shell/fish-shell/issues с любыми идеями по улучшению, которые у вас есть.

person ridiculous_fish    schedule 29.01.2015
comment
Большое спасибо за взвешенный ответ! Мне пока нравится то, что я вижу в скринкасте, но я еще не установил новейшую версию для взаимодействия с ней (сделаю это через мгновение). Но просто для того, чтобы уточнить, что я имел в виду, это не позволяет использовать вкладку для завершения вложенных путей - после этого tab дополнит компонент пути к каталогу косой чертой, а запись команды будет выглядеть примерно так: /{underline}dir123/{/underline }, в этот момент вкладка не будет продолжать поиск завершения в каталоге dir123/, а вместо этого переключится на какой-либо другой вариант завершения в каталоге a/. - person Ben; 29.01.2015
comment
Я установил из HEAD и мне очень нравится новый дизайн пейджера! Это здорово и огромное улучшение!! На мой взгляд, это намного лучше, чем поведение bash и предыдущее поведение fish shell. - person Ben; 29.01.2015
comment
Взволнован, чтобы услышать это. Спасибо, что попробовали :) - person ridiculous_fish; 30.01.2015
comment
Для параметра он не позволяет использовать вкладку для завершения вложенных путей после нажатия на вкладку и выбора или ввода параметра, который вы хотите нажать Enter, чтобы выбрать эту часть, и продолжить ввод, чтобы углубиться. - person DeMeNteD; 22.07.2015
comment
Есть ли способ перейти прямо в конец списка пейджеров? С ZSH я мог просто прокрутить стрелку вверх и оказаться в конце списка. - person rausch; 26.04.2016
comment
Я так не думаю - стрелка вниз, за ​​которой следует стрелка влево, приближает вас. Это хорошая идея. - person ridiculous_fish; 30.04.2016