Вопрос: Как я могу перебирать возможные пополнения в gnu readline?


В оболочке, которая реализует GNU Readline, Я могу щелкнуть ключ, чтобы получить список возможных дополнений к тому, что я начал печатать. Например:

C:\>cd P<TAB>
PerfLogs\             Program Files (x86)\  Python27\
Program Files\        ProgramData\

Как я могу выбрать, какое завершение я хочу использовать?

Я знаю, что если я хочу «Program Files» в приведенном выше примере, я могу ввести «rogram Files», но я ленивый :).

Разве не есть какой-то способ для меня нажать комбинацию клавиш, которая будет проходить через возможные доработки, чтобы я мог быстро выбрать один? Что-то похожее на автозаполнение / intellisense в современных IDE?

Редактировать: Мое решение - использовать GNU Readline menu-complete команда (описано ниже)? Но как мне привязать его к комбинации клавиш?

menu-complete ()

    Similar to complete, but replaces the word to be completed with a single match
from the list of possible completions. Repeated execution of menu-complete steps 
through the list of possible completions, inserting each match in turn. At the end of 
the list of completions, the bell is rung (subject to the setting of bell-style) and 
the original text is restored. An argument of n moves n positions forward in the list 
of matches; a negative argument may be used to move backward through the list. This 
command is intended to be bound to TAB, but is unbound by default. 

2
2017-08-03 13:44


Источник


Вы можете просто продолжить, набрав r  Tab (который будет завершен Program) а потом \   Tab чтобы добраться до Program Files, \  может быть раздражающим представлять единое пространство, которое связано с соглашением, чтобы избежать пробелов в именах файлов в целом. В этом случае было бы всего шесть нажатий клавиш Program Files: Pr  Tab  \   Tab, Я тестирую это в Bash; вы, очевидно, в системе Windows, но, я думаю, он работает так же, как и там. Я не знаю, как включить «intellisense» как завершение. - Daniel Andersson
@DanielAndersson Windows tab-complete работает по-разному; каждый Tab дает вам другой вариант, в отличие от bash, который требует от вас ввода другого символа, чтобы сузить его - nc4pk


Ответы:


В оболочке, которая использует readline, вам необходимо связать menu-complete к ключу. Он не связан по умолчанию, complete является.

Для этого отредактируйте ~/.inputrc и добавьте следующее:

TAB: menu-complete

Это, вероятно, повлияет на все программы, которые используют readline, Используйте следующее, чтобы это применимо только к bash:

$if Bash
   TAB: menu-complete
$endif

5
2017-08-03 14:15



Большое спасибо! Любая идея, что мне делать, если я нахожусь в Windows, используя клик? :) code.google.com/p/clink - urig
@urig Он должен использовать путь в INPUTRC переменная среды или файл _inputrc в вашем домашнем каталоге. Видеть rl_read_init_fileв readline/readline/bind.c - Daniel Beck♦
Найди его! Для clink файл inputrc имеет значение где-то вроде: C: \ Program Files (x86) \ clink \ 0.3.1 \ clink_inputrc_base - urig
@urig True - просто хотел добавить это. Это то, что clink устанавливает INPUTRC переменная среды в clink/clink/dll/rl_env.c, Он даже, кажется, игнорирует любые предопределенные INPUTRC также, всегда отменяя его. - Daniel Beck♦
Вы не должны изменять clink_inputrc_base поскольку он будет перезаписан при обновлении clink, Этот файл содержит следующие строки: $include ~/clink_inputrc, $include ~/_inputrc, $include ~/.inputrc, поэтому вы можете использовать любой из этих файлов в своем HOME каталог. - Dawid Ferenczy


Завершение командной строки работает по-разному, в зависимости от платформы.

Windows (NT и более поздние версии)

Прежде всего, командный процессор Windows (cmd.exe) не реализовать GNU Readline. Несмотря на это, он поддерживает завершение табуляции.

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

В вашем примере нажмите табуляция в первую очередь даст вам PerfLogs, тогда Program Files, и т.д.

bash (и другие оболочки Unix)

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

Видеть эта секция связанной статьи выше Википедии для более подробной информации.


1
2017-08-03 14:08



Спасибо, я не знал, как Windows справилась с этим. Не использовали командную строку в этом контексте с момента фактического MS-DOS. - Daniel Andersson
Фактически, командная строка Windows выполняет итерацию через параметры завершения - вот где я привык к этой функции :) - urig


В частности, в отношении этой части вопроса

Разве не есть какой-то способ для меня нажать комбинацию клавиш, которая будет проходить через возможные доработки, чтобы я мог быстро выбрать один? Что-то похожее на автозаполнение / intellisense в современных IDE?

я бы сказал fzf это то, что вы можете исследовать. Его довольно быстрый нечеткий инструмент поиска и выбора.


0
2018-06-27 18:12



Добро пожаловать в Superuser. Пожалуйста, постарайтесь содержать наиболее релевантную информацию из ссылки в вашем сообщении. Подробнее об этом Вот, - styrofoam fly