代码之家  ›  专栏  ›  技术社区  ›  Senthil Babu

如何扩展bash的vi模式

  •  1
  • Senthil Babu  · 技术社区  · 11 年前

    我想在bash中自定义vi模式。我非常想做两件事。

    1. 将Esc映射到CAPS_LOCK,将CAPS_LOCK映射到SHIFT+CAPS_LOCK
    2. 使用“m”将当前目录标记为字符“a-z”,并使用“cd”将其标记为该目录。

    一般来说,有没有方法在bash中扩展vi模式?

    2 回复  |  直到 11 年前
        1
  •  2
  •   mike3996    11 年前

    Bash使用GNUreadline提供可用的命令行提示。Readline支持vi模式,该模式提供了一组基本键和一个模式界面。

    caps锁和其他锁的映射不是bash或readline的工作。如果您愿意使这些绑定成为全局的,那么可以使用Xmodmap来获得令人满意的结果。

    至于第二个问题:不幸的是,readline的可配置性非常有限。但您可以通过编写通过循环初始化的函数来实现这一点。 以下类型的工程:

    Set_Ma () {
        DIR_a=`pwd`
    }
    Go_Ma (){
        cd "$DIR_a"
    }
    set -o vi
    bind -m vi-command -x '"ma":"Set_Ma"'
    bind -m vi-command -x '"'"'"'a":"Go_Ma"'
    

    键入后不会立即看到任何效果 'a 因为它不会重新绘制提示以匹配新的CWD。您也可以使用关联数组来存储标记,但我不会去那里。

    我可以建议加入ZSH的潮流吗。Zsh不使用readline。相反,他们编写了一个更灵活的行编辑库,可以通过普通zsh函数正确编写脚本。

        2
  •  -3
  •   Jigar    11 年前

    您可以使用ex命令:set从vi中更改选项。此外,每当vi启动时,它都会读取主目录中名为.exrc的文件以获取进一步的操作说明。通过在该文件中放置:set命令,您可以随时修改vi的操作方式。

    您还可以在本地目录中设置.exrc文件,以初始化您希望在不同环境中使用的各种选项。例如,您可以定义一组用于编辑英文文本的选项,但定义另一组用于源程序的选项。将首先执行主目录中的.exrc文件,然后执行当前目录中的文件。

    最后,存储在shell变量EXINIT中的任何命令都将在启动时由vi执行。如果.exrc和EXINIT中的设置存在冲突,则.exrc中的设置优先。

    希望这对你有帮助

    谢谢