当将文本粘贴到终端/fish shell中时出现奇怪字符:[200~和[201~。

3
当我使用 Ctrl+Shift+V 将某些内容粘贴到 ranger 中时,会出现奇怪的字符。这里我将单词 "paste" 粘贴到了 ranger 中:

enter image description here

起初我有[200~,最后是[201~。我不知道问题可能是什么(ranger?fish shell?终端?某些配置文件?)。 如何在粘贴时摆脱不需要的字符? 更多信息: 我使用fish shell。当我使用键盘快捷键Ctrl+O启动ranger时,问题才会出现。如果我手动输入命令rangerranger_cd,或者直接将文本粘贴到fish shell中(根本不启动ranger),它就可以正常工作。Ctrl+O快捷键的定义为:
function fish_user_key_bindings
    bind \co ranger_cd
end

我的 ranger_cd 功能是:
function ranger_cd
    set -l tempfile '/tmp/chosendir'

    ranger --choosedir $tempfile (pwd)
    if [ -f "$tempfile" ]; and [ (cat -- $tempfile) != (echo -n (pwd)) ]
        cd (cat $tempfile)
    end
    rm -f -- $tempfile
end

它的目的是在 ranger 中保存上次选择的目录,并在退出 ranger 后进入该目录。
我还注意到,Ctrl+V 在 ranger 中不起作用(只粘贴 ^V),但是在 fish shell 中直接使用时可以正常工作(像 Ctrl+Shift+V 一样粘贴之前复制的内容)。
有什么想法可能出了问题吗?谢谢。我使用:
  • Linux Manjaro 19.0.2 XFCE
  • Xfce4 终端 0.8.9.1
  • fish 3.1.0
  • ranger 1.9.2(带有 python 3.6.9)

2
200和201栅栏是“括号粘贴模式”的结果。https://cirw.in/blog/bracketed-paste 如果这不是一个完整的答案,但它可能会给你在搜索中指明正确方向的提示。 - Delapouite
3个回答

5

这确实是括号粘贴模式

Fish的主要功能是禁止立即执行多行粘贴。当您通过命令行执行命令时,它会禁用它,并在您再次获得控制权时重新启用。

通常不会通过绑定启动交互式事物,因此fish在那里不会禁用它。

要手动禁用它,请使用__fish_disable_bracketed_paste__fish_enable_bracketed_paste

function ranger_cd
    set -l tempfile '/tmp/chosendir'

    __fish_disable_bracketed_paste
    ranger --choosedir $tempfile (pwd)
    __fish_enable_bracketed_paste
    if [ -f "$tempfile" ]; and [ (cat -- $tempfile) != (echo -n (pwd)) ]
        cd (cat $tempfile)
    end
    rm -f -- $tempfile
end

粘贴该部分代码的文件名是什么?它位于哪里? - richar8086

4

如果其他人在搜索此问题并未使用fish shell,我刚刚意识到如果我不小心使用Ctrl-V尝试粘贴到终端,则无法正常粘贴。然后记得使用Ctrl-Shift-V进行粘贴,那么下一个粘贴会以^[[200~开头和~结尾。如果我只使用Ctrl-Shift-V进行粘贴,则可以正常工作。


关于Bracketed-paste的更多信息,请参阅:https://en.wikipedia.org/wiki/Bracketed-paste - starking

0

将终端字符编码设置为UTF-8


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接