Вообще говоря, вам нужно доработатьzstyle
вызов , чтобы он применялся не ко всем завершениям, а только к завершению файла. Для обычного завершения синтаксис спецификатора контекста — :completion:WIDGET:COMPLETER:COMMAND:ARGUMENT:TAG
.
WIDGET
устанавливается только некоторыми специальными виджетами, оставьте его общим(*
). COMPLETER
соответствует complete
для нормального завершения и может иметь другие значения для таких задач, как автоисправление. COMMAND
обычно является именем команды, аргументы которой завершаются. Точнее, это слово после compdef
. Некоторые сложные команды меняют его при выполнении подкоманд. Для особых мест в синтаксисе оболочки это имя контекста между тире , например -parameter
после $
или -command-
для первого слова в команде. ARGUMENT
обычно что-то вроде argument-3
для третьего аргумента опции, отличной от -, или option--foo-1
для аргумента опции --foo
. TAG
используется внутри некоторых функций завершения, часто, но не всегда, одним из обычных имен тегов . Вzstyle
объявлениях более конкретные объявления имеют приоритет над менее конкретными.
:
)является более конкретным, чем объявление с меньшим количеством двоеточий. *
является более конкретным, чем что-либо еще. Таким образом, чтобы сделать исключение для имен команд, просто добавьте еще одно zstyle
объявление, относящееся именно к командам.
Тем не менее, есть поворот :matcher-list
, который применяется глобально, а не в контексте завершения. В вашем случае, если вам нужен только один сопоставитель, вместо этого вы можете использовать matcher
.
zstyle ':completion:*' matcher 'm:{a-zA-Z}={A-Za-z} l:|=* r:|=*'
zstyle ':completion:*:*:-command-:*' matcher 'm:{a-zA-Z}={A-Za-z}'
$ cat tst.awk
{
sub(/\r$/,"")
txt = substr($0, index($0,$3))
}
/\[(FATAL|ERROR)[^]]*] \[.*]/ {
if ( /error running program:/ ) {
pfx = txt OFS
cnt = 4
}
else {
cnt = 1
}
}
cnt && !--cnt { print pfx txt; pfx="" }
$ awk -f tst.awk file
[ERROR ] [PID] error running program: message from n lines below
[ERROR ] [PID] some error:
[ERROR ] [PID] error running program: message from n lines below