首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于搜索环境bash变量的fzf函数和键绑定

用于搜索环境bash变量的fzf函数和键绑定
EN

Code Review用户
提问于 2022-11-04 18:44:08
回答 1查看 49关注 0票数 4

在检查了fzf/shell/key-bindings.bash之后,我想出了以下内容,放在我的~/.bashrc中:

代码语言:javascript
复制
fzf_get_env_vars() {
  local cmd opts selected
  cmd='command env | command sed "s/=.*//;s/^/$/"'
  opts="--height ${FZF_TMUX_HEIGHT:-40%} --bind=ctrl-z:ignore --reverse $FZF_DEFAULT_OPTS $FZF_CTRL_T_OPTS -m"
  selected="$(eval "$cmd" \
    | FZF_DEFAULT_OPTS="$opts" $(__fzfcmd) "$@" \
    | while read -r item; do
      printf '%s ' "$item"
    done
  )"
  READLINE_LINE="${READLINE_LINE:0:$READLINE_POINT}$selected${READLINE_LINE:$READLINE_POINT}"
  READLINE_POINT=$(( READLINE_POINT + ${#selected} ))
}

# I'm a vi-mode user, so no need for emacs mapping
bind -m vi-command -x '"\ee": fzf_get_env_vars'
bind -m vi-insert -x '"\ee": fzf_get_env_vars'

我在链接文件中看到的主要更改是:

  • 我没有拆分调用fzf的函数,并从重新组合READLINE_LINEREADLINE_POINT的函数中检索用户选择的值;
  • 考虑到输入是变量名,我认为不转义(即'%s '而不是'%q ')是安全的,
  • 它还允许我在不转义$的情况下(通过sed脚本中的第二个s命令)添加D16

ShellCheck没有检测到代码中的问题。

EN

回答 1

Code Review用户

发布于 2023-05-27 01:08:49

如果可能的话,避免eval是值得的。

考虑到您的代码,在没有eval的情况下,我想出了以下内容:

代码语言:javascript
复制
fzf_sed_env_vars_cmd() {
  builtin command env |
  builtin command awk -F'=' '{printf "$%s\n", $1}'
  # builtin command sed "s/=.*//;s/^/$/"'
}

fzf_get_env_vars() {
  builtin local opts selected

  opts="--height ${FZF_TMUX_HEIGHT:-40%} --bind=ctrl-z:ignore --reverse $FZF_DEFAULT_OPTS $FZF_CTRL_T_OPTS -m"
  selected="$( ##: Look Mah, No Eval!!! :-)
      fzf_sed_env_vars_cmd |
      FZF_DEFAULT_OPTS="$opts" $(__fzfcmd) "$@" |
      while builtin read -r item; do
        builtin printf '%s ' "$item"
      done
  )"
  READLINE_LINE="${READLINE_LINE:0:$READLINE_POINT}$selected${READLINE_LINE:$READLINE_POINT}"
  READLINE_POINT=$(( READLINE_POINT + ${#selected} ))
}

# I'm a vi-mode user, so no need for emacs mapping
builtin bind -m vi-command -x '"\ee": fzf_get_env_vars'
builtin bind -m vi-insert -x '"\ee": fzf_get_env_vars'
票数 3
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/280980

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档