You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在xonsh中禁用并重新启用括号粘贴模式

xonsh 括号粘贴(bracketed paste)模式开关方法

xonsh 没有内置与 fish 中__fish_disable_bracketed_paste、__fish_enable_bracketed_paste完全同名的函数,但可以通过标准终端控制序列实现完全等效的开关操作,解决快捷键启动交互式工具时的粘贴异常问题。

手动临时开关

括号粘贴模式是终端提供的标准特性,通过发送固定转义序列即可控制状态,在xonsh中直接执行对应命令即可:

  • 禁用括号粘贴模式:执行
    print("\x1b[?2004l", end="")
    
    效果与fish下执行__fish_disable_bracketed_paste完全一致。
  • 重新启用括号粘贴模式:执行
    print("\x1b[?2004h", end="")
    
    效果与fish下执行__fish_enable_bracketed_paste完全一致。

自定义快捷命令

如果需要和fish一样通过短命令快速调用,可以把以下配置写入~/.xonshrc配置文件:

def disable_bracketed_paste():
    print("\x1b[?2004l", end="", flush=True)

def enable_bracketed_paste():
    print("\x1b[?2004h", end="", flush=True)

# 自定义别名,可根据自己的习惯修改命令名
aliases["bp_off"] = disable_bracketed_paste
aliases["bp_on"] = enable_bracketed_paste

保存后重载xonsh配置,后续直接输入bp_off即可关闭括号粘贴,输入bp_on即可重新开启。

自动适配TUI工具场景

如果需要在启动vim、fzf、htop这类交互式终端工具时自动临时关闭括号粘贴、退出工具后自动恢复,可以给xonsh添加命令执行钩子,同样写入~/.xonshrc即可:

# 先定义开关函数
def disable_bracketed_paste():
    print("\x1b[?2004l", end="", flush=True)

def enable_bracketed_paste():
    print("\x1b[?2004h", end="", flush=True)

# 命令执行前触发:如果是TUI类程序就关闭括号粘贴
@events.on_command_pre
def auto_disable_bp(cmd):
    # 可根据自己的使用习惯增删需要适配的程序名
    tui_list = {"vim", "nvim", "fzf", "htop", "less", "man"}
    if cmd.cmd[0] in tui_list:
        disable_bracketed_paste()

# 命令执行后触发:TUI程序退出后恢复括号粘贴
@events.on_command_post
def auto_enable_bp(cmd):
    tui_list = {"vim", "nvim", "fzf", "htop", "less", "man"}
    if cmd.cmd[0] in tui_list:
        enable_bracketed_paste()

注意:如果你的终端本身配置了强制开启括号粘贴的规则,上述命令执行后可能被终端配置覆盖,需要先检查终端自身的相关设置。

内容的提问来源于stack exchange,提问作者Kossak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 15:24:21