如何使用 zsh 行编辑器插入特殊字符?

如何使用 zsh 行编辑器插入特殊字符?

在 vim 中,我们可以在插入模式下输入+Ctrl来插入特殊字符。这主要用于插入控制字符。但如果我们知道 ASCII 数字,则可以插入任何字符。例如,输入+然后, ,将插入一个 '~' 字符。参见:vNumberCtrlv126http://vimdoc.sourceforge.net/htmldoc/insert.html#ins-special-keys 我希望 zsh 行编辑器具有相同或类似的行为。请注意,我在 vi 模式下使用 zsh,但我认为这并不重要。我发现可以使用Ctrl+ vthen Ctrl+插入回车符j,请参阅: 在 ZSH 行编辑器中,如何插入新行?。但是我如何插入波浪号?

我需要这个,因为我正在使用一个愚蠢的 citrix 客户端,我无法用它输入“~”字符。

答案1

有三种可能性(~分别为十进制或八进制的 ASCII 码 126 或 176):

  • 使用$'\OCT'以下语法,其中OCT是八进制表示的 ASCII 码:

    $ echo foo$'\176'bar
    foo~bar
    
  • 使用 printf 命令替换:

    $ echo foo$(printf "\176")bar
    foo~bar
    
  • 使用这个 zle 小部件来模拟 vi 的特殊字符输入:

    insert-special-char() {
      LBUFFER+=$(printf "\x$(printf %x $NUMERIC)")
    }
    zle -N insert-special-char
    

    我借用了 printf 行扩大

    要使用此小部件,请将其绑定到例如Szle 的 vi 命令模式(或任何其他您不使用的键):

    bindkey -M vicmd "S" insert-special-char
    

    然后在 zle 的 vi 命令模式下输入 ASCII 代码(十进制表示)并按S。然后插入特殊字符:

    ESC126S

相关内容