V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
kuanat
V2EX  ›  Zed

Zed Linux vim 模式输入法切换

  •  
  •   kuanat · 10 天前 · 184 次点击

    最近重度体验了一下 Linux 版本的 Zed ,然后又遇到了所有带 vim 模式编辑器的通用需求:退出插入模式的时候切回英文输入法。

    这事的主要难点是 fcitx5 没办法获得编辑器到底是插入还是普通状态,所以 fcitx5 lua 模块也用不上。之前用 vscode vim 模式的话有插件,后来换成了 vscode 内嵌一个 neovim 实例,可以直接在 neovim 的配置里加一句 autocmd InsertLeave * :silent !fcitx5-remote -s keyboard-us

    到了 Zde 这边,一开始想用 SendKeystrokes 这个按键映射来做,结果发现它只是对窗口发消息,而不是真正触发按键,fcitx5 也就捕获不到。

    本来已经开始对着文档写插件了,写测试的时候用了一下内置 task 功能,突发奇想能不能绑定一个按键到 task ,然后执行按键映射,结果真的可行,就有了下面的这个方案。

    首先是 ~/.config/zed/tasks.json 全局任务里面增加一个任务,label 就是后面要执行的任务名,具体执行的就是 fcitx5-remote -s keyboard-us,强制切换到英文键盘。其他参数基本上是静默执行用的。

      {
        "label": "Switch fcitx5 to English",
        "command": "fcitx5-remote -s keyboard-us",
        "env": {},
        "use_new_terminal": true,
        "allow_concurrent_runs": true,
        "reveal": "never",
        "hide": "always",
        "shell": "system",
        "show_summary": false,
        "show_output": false
      }
    

    然后是按键映射 ~/.config/zed/tasks.json 里面,给前面的任务随便绑定一个不常用的按键,比如这里 ctrl-f11。同时将插入模式下的 escape 映射成 ctrl-f11 escape 的序列。

      {
        "context": "vim_mode == insert",
        "bindings": {
          "escape": ["workspace::SendKeystrokes", "ctrl-f11 escape"],
          "ctrl-f11": ["task::Spawn", { "task_name": "Switch fcitx5 to English" }]
        }
      }
    

    这样就达到曲线救国的目的了,退出插入模式自动执行任务切换至英文。就是有个缺陷,tasks 列表里这个任务会覆盖 rerun 快捷列表。

    要是谁有更好的方法欢迎指教,实在忍不了的话我就去把插件写了……

    PS

    Zed 的 vim 模式相比 neovim 还是有些特色优势的,可以看官方文档体验一下。

    另外 Zed 的渲染模式还是相对传统编辑器更耗电的,虽然没有客观数据支撑,但是体感差不多的工作状态下,用 Zed 比用 Codium 续航从七个小时下降到五个半的样子。

    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2587 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 19ms · UTC 10:59 · PVG 18:59 · LAX 02:59 · JFK 05:59
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.