シェルでリアルタイムテキストを交換できますか?

シェルでリアルタイムテキストを交換できますか?

zshマイコンピュータで実行しています。シェルでテキストを交換できるかどうか疑問に思います。たとえば、fn[SPACE/TAB]キーボードfunctionショートカットOSXのオプションがありますが、またはchromeでは機能しませんshell。オペレーティングシステムをfnそのように解釈するように調整する方法はありますかfunction

これが達成できれば本当に驚きです。

ベストアンサー1

zsh多くのロープがあり、その一部は_user_expandランダムな出力にランダムな入力を提供する、いわゆる「ユーザー拡張」機能です。例えば。

# turn on completion system
autoload -U compinit
compinit
# how to mangle inputs; this is a hash or "associative array" of terms
declare -A manglements
manglements=( fn function )
# register mangler and enable _user_expand
zstyle ':completion:*:user-expand:*' user-expand '$manglements'
zstyle ':completion:*' completer _user_expand _complete _ignored

この設定.zshrcまたは同様の設定では、fntabspaceテキストを入力する必要がありますfunction(または少なくとも私はzsh -f既存の設定との競合を避けるために、上記の行をzsh 5.3.1の実行に入力する必要があります)。入力を減らして設定するだけですfntabadd-space

zstyle ':completion:*:user-expand:*' add-space 1

しかし、スペースバーを押してウィジェットをバインドする必要がある完了spaceよりも魔法を本当に望むなら、これは少し重要で危険な変更です。tab

declare -A manglements
manglements=( fn function )

function magic-space-bar {
   local -a le_vlapoi

   # split on words, see zshexpn(1)
   le_vlapoi=(${(z)BUFFER})

   # only mangle the first word, not surprisingly in middle of some
   # "echo blah fn ..." sequence (this is the same as the `alias -g`
   # rake problem waiting to whap you in the face)
   if [[ $#le_vlapoi -eq 1 ]]; then
      local romoi
      romoi=$manglements[$le_vlapoi[-1]]
      if [[ -n $romoi ]]; then
         le_vlapoi[-1]=$romoi
         BUFFER="$le_vlapoi"
      fi
   fi

   # ensure the typed space happens regardless
   BUFFER="$BUFFER ";
   CURSOR=$#BUFFER
}

zle -N magic-space-bar
autoload -U compinit
compinit
bindkey ' ' magic-space-bar
bindkey -M isearch ' ' self-insert

おすすめ記事