V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
lululau
V2EX  ›  分享创造

在 iTerm2 中使用 fzf 得到历史命令的输出

  •  
  •   lululau · 2015-05-17 00:52:21 +08:00 · 6569 次点击
    这是一个创建于 3497 天前的主题,其中的信息可能已经有所发展或是发生改变。

    fzf 是一个通用的 CLI Fuzzy Finder,也提供 vim 插件,CLI工具控们如果还没用过的话,那就赶紧的吧:

    https://github.com/junegunn/fzf

    可以通过 iTerm2 提供的 OSAScript 接口得到当前 Terminal Session 的内容,然后传递给 fzf,然后你自己在 fzf 选择想要的内容。

    效果:

    asciinema

    使用方法:

    1. 安装 fzf 后(安装时确保选择了 key-binding 配置),找到 key-bindings.zsh 文件,在最下面那一行 fi 的上面插入如下内容:
    fzf-iterm2-widget() {
      iterm_text=$(echo 'tell app "iTerm" to get text of current session of current terminal' | osascript  | sed -n '/^\s*$/!p' | perl -e 'print reverse <>')
      LBUFFER="${LBUFFER}$(cat <<EOF | fzf
    $iterm_text
    EOF
    )"
      zle redisplay
    }
    zle     -N   fzf-iterm2-widget
    bindkey '\eo' fzf-iterm2-widget
    
    1. 打开一个新的 iTerm2 Session,运行几个命令,然后按 <Option>-o,就会在 fzf 中看到当前Session 中得所有文本内容,包括输入的和输出的。

    缺点是:

    * 只能选择一行内容 。
    * 只能选择当前 Session 的内容
    * 下面给出的方法只适用于 zsh,bash 的话照葫芦画瓢改一改应该也比较简单

    3 条回复    2017-06-24 11:41:01 +08:00
    dsdshcym
        1
    dsdshcym  
       2015-05-17 08:24:57 +08:00
    想到了 percol
    introom
        2
    introom  
       2016-11-29 23:29:41 +08:00
    虽然软件没有国界,,,我还是支持日系的 peco/percol...而不是棒子的。
    dcoder
        3
    dcoder  
       2017-06-24 11:41:01 +08:00
    @lululau
    最近在用 ubuntu 上用 fzf, 还发现一个缺点
    Ctrl+t 查找文件的时候, file list 是从上到下, 选择的光标停在最上面;
    Ctrl+r 查找历史的时候, list 是从下到上, 选择的光标停在最下面.

    我觉得查找历史那个不爽, 能改成跟查找文件一样, 就好了,不知道如何设置.
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5454 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 06:20 · PVG 14:20 · LAX 22:20 · JFK 01:20
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.