Может ли zsh kill -слово игнорировать экранированные пробелы?

В конце концов я отвечаю сам себе.

OpenVPN был запущен как цель systemd (? ), а его конфигурационный файл указан PrivateTmp=true. Итак, он действительно работал, и скрипт действительно запускался, но он не записывался в фактическую папку /tmp.

И, кстати, также следует использовать полный путь к бинарным файлам (например. /usr/bin/whoami), так как $PATHисполняемого скрипта может не совпадать с $PATHобычного шелла.

1
07.03.2021, 23:59
2 ответа

Невозможно указать встроенному -виджету backward-kill-word(, который убивает следующее слово слева от курсора ), чтобы он сделал это, но вы можете просто свернуть свой собственный:

backward-kill-word() { 
  # LBUFFER -- all text left of the cursor
  # (z)     -- split into shell words
  # (A)     -- force the resulting words into an array
  # [-1]    -- take the right-most element
  # :t      -- strip all path ancestors from it
  # %       -- remove the shortest matching substring from the right
  LBUFFER=${LBUFFER%${${(zA)LBUFFER}[-1]:t}*} 
  zle -f kill  # Tell the Zsh Line Editor that we've killed text.
}
zle -N backward-kill-word  # Replace the default widget.

Замена kill-word(, уничтожающая следующее слово справа от курсора ), очень похожа:

kill-word() { 
  # RBUFFER -- all text to the right of the cursor
  # [1]     -- take the left-most element
  # :h1     -- strip all path descendants from it
  # #       -- remove the shortest matching substring from the left
  RBUFFER=${RBUFFER#*${${(zA)RBUFFER}[1]:h1}} 
  zle -f kill
}
zle -N kill-word
3
18.03.2021, 22:27

Если вы не против ввести несколько клавиш, вы можете использовать ^R / ^K, чтобы вернуться к предыдущей косой черте, а затем убить до конца строки. Если изначально после курсора есть еще слова, вы можете использовать ^@ ^R / ESC-x kill-region RET(, к сожалению, kill-regionпо умолчанию не привязан к клавише; привязка Emacs ^Wвместо backward-kill-wordдается для совместимости со стандартными привязками tty ).

В режиме vi, начиная с командного режима и заканчивая режимом вставки, вы можете использовать что-то вроде T/Cдля удаления до конца строки или vT/sили dT/sдля удаления до исходного местоположения курсора включительно.


select-word-style shellможет вас заинтересовать :это заставляет движение слов использовать синтаксис оболочки.

autoload -Uz select-word-style
select-word-style shell

К сожалению, это не решает вашу проблему, потому что косая черта является частью слова. Я не вижу способа использовать его, чтобы останавливаться на определенных символах в словах, не меняя код match-words-by-style.

0
18.03.2021, 22:27

Теги

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