Сопоставление { и } не работает в цепочках команд, таких как `di{`

Я думаю, что лучше всего использовать (фоновый )занятый -цикл ожидания, который обновляет отметку времени sudo, которую вы затем уничтожаете, когда вам больше не нужны sudoпривилегии. Вот пример сценария; он выполняет sleep 6вместо ваших двух -часов command2и запускает видимые /bin/echoкоманды вместо command1иcommand2:

#!/bin/sh
sudo /bin/echo command 1
while :; do sudo -v; sleep 1; done &
infiloop=$!
sleep 6
sudo /bin/echo command 3
kill "$infiloop"

Для вашего сценария я бы рекомендовал более свободный цикл:

#!/bin/sh
sudo command1
while :; do sudo -v; sleep 59; done &
infiloop=$!
command2
sudo command3
kill "$infiloop"

Отрегулируйте sleep 59по вкусу, в зависимости от существующей настройки timestamp_timeoutв sudoers; Я выбрал 59 только для того, чтобы продемонстрировать выбор, который вы могли бы сделать, если бы время ожидания метки времени составляло 60 секунд.

3
01.10.2020, 17:02
1 ответ

Проблема в том, что i{— это целый оператор -, отложенная команда (или текстовый объект ), и сопоставления на самом деле не работают для более поздних частей существующей команды или сопоставления. Если вы хотите поддерживатьi{(и его другаa{)в режиме ожидания оператора -и визуальном режиме, вам потребуется дополнительный набор отображений, чтобы сделать это явно :

.
omap iĸ i{
omap aĸ a{
xmap iĸ i{
xmap aĸ a{

Но гораздо лучший способ выполнить такое сопоставление клавиш — использовать функцию 'langmap', которая позволяет переназначать клавиши в обычном режиме. Для вашего конкретного случая использования вам также необходимо установить 'langremap'.

set langmap=ĸ{
set langremap

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

Режим вставки или режим командной строки -не учитывается. Для этого вы можете либо продолжать использовать :map!(, который обычно работает нормально ), либо также есть опция'keymap'для режима вставки, эквивалентная 'langmap', но 'keymap'значительно сложнее (включает в себя создание отдельного файла сопоставления с уникальным синтаксисом, и есть несколько дополнительных опций, определяющих, где именно активируется сопоставление.)

1
18.03.2021, 23:00

Теги

Похожие вопросы