keaising / im-select.nvim

Switch Input Method automatically depends on Neovim's edit mode
MIT License
170 stars 25 forks source link

如何在单字符替换完成、回到NORMAL模式时自动切换输入法 #30

Closed cncsl closed 1 month ago

cncsl commented 1 month ago

现象

在 NORMAL 模式下将光标移动到想修改的单个字符,点击 r 进行单字符修改,切换为中文输入法打完字后替换完成,自动回到 NORMAL 模式后没有切换到 default_im_select 配置的输入法。

环境

插件版本(commit id) c2b414b,插件配置如下(全部配置:https://github.com/cncsl/dotfiles/tree/main/nvim

  {
    "keaising/im-select.nvim",
    config = function()
      require("im_select").setup {
        default_im_select = "com.apple.keylayout.ABC",
        default_command = "im-select",

        -- Restore the default input method state when the following events are triggered
        set_default_events = { "VimEnter", "FocusGained", "InsertLeave", "CmdlineLeave" },

        -- Restore the previous used input method state when the following events
        -- are triggered, if you don't want to restore previous used im in Insert mode,
        -- e.g. deprecated `disable_auto_restore = 1`, just let it empty
        -- as `set_previous_events = {}`
        set_previous_events = { "InsertEnter" },

        -- Async run `default_command` to switch IM or not
        async_switch_im = true,
      }
    end,
  },
cncsl commented 1 month ago

vim/nvim 好像不存在 “单字符替换模式”,按 r 之后依然是 NORMAL 模式

keaising commented 1 month ago

试试这个 PR 里的 fork 提供的功能是否能满足你的需求?可能需要你自己尝试一下才能找到合适的配置

https://github.com/keaising/im-select.nvim/pull/19

cncsl commented 1 month ago

试试这个 PR 里的 fork 提供的功能是否能满足你的需求?可能需要你自己尝试一下才能找到合适的配置

19

感谢您的回复。在 init.lua 中添加了如下配置,单击 r 进行字符替换时并没有触发任何通知,以 "single charcter replace mode in vim/nvim" 为关键字 google 搜索也没有期望的内容,我猜测 vim/nvim 并不存在“单字符替换模式”。

vim.api.nvim_create_autocmd("ModeChanged", {
  pattern = {"*:*"},
  callback = function (args)
    os.execute("terminal-notifier -title ModeChanged -message " .. args.match)
  end,
})

看来我得改一下使用习惯,在这种场景下多用 R,而不是 r

keaising commented 1 month ago

我搜了一下好像确实也没有相关的事件通知,那应该就是没办法了