在 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 行扩大。
要使用此小部件,请将其绑定到例如
S
zle 的 vi 命令模式(或任何其他您不使用的键):bindkey -M vicmd "S" insert-special-char
然后在 zle 的 vi 命令模式下输入 ASCII 代码(十进制表示)并按
S
。然后插入特殊字符:ESC126S