Zsh: как выполнить автозаполнение после команды?

0

каждый. Немного сложно объяснить, что я хочу сделать.

Я хочу создать скрипт «example», который может вводить для вас длинные команды после того, как вы запустите его с короткими параметрами. Например,

$ example server # I input this line manually
$ ssh user@192.168.1.2 # This line is automatically generated by the above command

Так что я могу редактировать командную строку в текущей строке.

Я использую оболочку ZSH, И я попробовал что-то вроде history но не удалось в конце. Любое предложение?

Libin Wen
источник

Ответы:

1

Я думаю, что невозможно (или, по крайней мере, очень хакерски) запустить внешний сценарий, чтобы в приглашении было что-либо добавлено

При этом можно расширить zle (редактор командной строки zsh) своими собственными функциями, так называемыми виджетами.

Любой пользовательский виджет имеет доступ к BUFFER, который содержит буфер редактирования и также может быть изменен.

Вот краткий прототип:

function example () {
    if [[ $BUFFER = 'server' ]]; then
        LBUFFER='ssh user@192.168.1.2 '
    else
        zle accept-line
    fi
}

zle -N example
bindkey '^M' example

zle -N example создает новый виджет с именем example и сопоставляет его с функцией с тем же именем. bindkey '^M' example карты контроль + M , также известен как Вернуть к виджету example, Поэтому каждый раз, когда вы просто набираете "сервер" и нажимаете Вернуть это заменяется ssh user@192.168.1.2 и курсор помещается в конец для дальнейшего редактирования, в то время как любая другая строка выполняется / принимается как есть.

Adaephon
источник
1

Вместо использования функции оболочки вы также можете использовать связывание клавиш. Например, вот так:

bindkey -s '\C-e\C-l' 'ssh user@192.168.1.2'

Вот -s создает подстановку строки, см. man zshzle:

-s in-string out-string ... Свяжите каждую строку с каждой строкой. Когда набирается in-string, out-string будет отталкиваться и обрабатываться как                        вход в редактор строк. Когда также используется -R, интерпретируйте строки как диапазоны.

С приведенным выше примером вы можете использовать CTRL + E , CTRL + L во вставке ssh user@192.168.1.2 в командной строке в текущей позиции курсора.

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

cat foo |  CTRL + E ,  CTRL + L  = & GT; кот фу | ssh user@192.168.1.2 
mpy
источник