ZSH Bindkey для запуска команды и нажатия Enter

Сperl

$ perl -lane '($i) = grep {$F[$_] eq "fn0"} 0..$#F;
              print "$F[$i-1] $F[$i+1]"' ip.txt
tail logfile
tail3 logfile1
tail4 logfile2
  • -lудалит символ новой строки из строки ввода и добавит его обратно при печати
  • -aразбить строку ввода на основе пробелов, @Fмассив будет содержать данные
  • ($i) = grep {$F[$_] eq "fn0"} 0..$#Fполучить индекс элемента, точное содержимое которогоfn0
  • print "$F[$i-1] $F[$i+1]"распечатать необходимые поля


С sed, который поддерживает ERE

$ sed -E 's/^(.* )?([^ ]+) fn0 ([^ ]+).*/\2 \3/' ip.txt
tail logfile
tail3 logfile1
tail4 logfile2
  • ^(.* )?необязательные поля в начале строки
  • ([^ ]+) fn0 ([^ ]+)захватить поля до и послеfn0(с использованием одного пробела в качестве разделителя полей)
  • .*остаток строки
  • \2 \3обязательные поля в выводе
0
13.09.2021, 21:56
2 ответа

Вы не можете сделать это только командой bindkey. Однако, если вы установите мойzsh-editплагин , то вы можете просто использовать этот:

bind '^F' 'tmux-sessionizer'
0
14.09.2021, 11:04

Код, который вы опубликовали, запускается tmux-sessionizer, если вы нажмете Ctrl+F в пустом приглашении (, по крайней мере, в конфигурации по умолчанию — на практике у вас может быть установлен очень полезный параметр extended_glob, который требует цитирования ^, напримерbindkey '^f' 'tmux-sessionizer\n'). Но обычно она не делает ничего полезного и может сделать что-то плохое, если вы нажмете ее в непустом приглашении -. Лучшим способом запуска внешней команды было бы не использовать для нее ввод оболочки, а вместо этого запустить ее напрямую. Для этого:

  1. Определите функцию , которая делает то, что вы хотите.
  2. В конце функции скажите редактору строк повторно отобразить подсказку .
  3. Зарегистрируйте функцию как виджет редактора строк .
  4. Привязать клавишу к виджету редактора.
function run-tmux-sessionizer { tmux-sessionizer; zle redisplay; }
zle -N run-tmux-sessionizer
bindkey '^f' run-tmux-sessionizer
1
14.09.2021, 16:45

Теги

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