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

在 VIM 中如何提高中文编辑效率

  •  1
     
  •   Liler · 282 天前 · 2972 次点击
    这是一个创建于 282 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在 VIM 中编辑中文时出现的问题:

    • 在 Insert 模式输入中文时,发现前面输入的有错误或者其他情况需要进入到 Normal 模式时,点击 ESC, 这时还是中文模式,需要切换输入法才能更好地移动鼠标。
    • 从 Normal 模式进入到 Insert 模式,还需要再次切换输入法才能继续输入中文。
    • 切换到 Cmdline 模式查找中文时,也需要切换输入法。

    编辑中文时需要经常切换输入法,影响编辑体验与效率,怎样才能提高在 VIM 中的中文编辑效率呢?

    我想到的方法是自动切换输入法。 从其他模式下进入到中文编辑情时设置不同的快捷键( linux,iBus,假设第一个输入法是英文,第二个是中文)。

     " Change input method automatically
     let englishInputMethod='gdbus call --session --dest org.gnome.Shell --object-path /org/gnome/Shell --method org.gnome.Shell.Eval  "imports.ui.status.keyboard.getInputSourceManager().inputSources[0].activate()"'
     let chineseInputMethod='gdbus call --session --dest org.gnome.Shell --object-path /org/gnome/Shell --method org.gnome.Shell.Eval  "imports.ui.status.keyboard.getInputSourceManager().inputSources[1].activate()"'
    
     let editStrings = ['i', 'I', 'a', 'A', 's', 'S', 'o', 'O', 'gi', 'gI', 'c', 'C', 'R', 'gR', 'r', 'gr']
     for str in editStrings
         exec 'noremap <silent> <Leader>' . str . ' ' . ':call system(chineseInputMethod)<CR>' . str
     endfor
     let searchStrings = ['/', '?']
     for str in searchStrings
         exec 'noremap <silent> <Leader>' . str . ' ' . ':call system(chineseInputMethod)<CR>' . str . '<Down>'
     endfor
     inoremap <silent> <Esc> <Esc>:call system(englishInputMethod)<CR>
    

    请问还有更好的方法吗? 在编辑中文时还会遇到什么问题,怎么解决的?

    第 1 条附言  ·  281 天前

    我想到的3个解决方案:

    系统环境:Linux,gnome, ibus

    • 不用安装插件与设置快捷键,使用英文时按shift或者切换到英文输入法,需要形成习惯,不然经常会多按几个按键。

    • 为中文编辑设置不同的快捷键(从其他模式下进入到Insert模式)。 有少量中文需要编辑时(下面的插件也有不方便的地方),用这个设置快捷键的方法。

    
         " Change input method automatically
         let englishInputMethod='gdbus call --session --dest org.gnome.Shell --object-path /org/gnome/Shell --method org.gnome.Shell.Eval  "imports.ui.status.keyboard.getInputSourceManager().inputSources[0].activate()"'
         let chineseInputMethod='gdbus call --session --dest org.gnome.Shell --object-path /org/gnome/Shell --method org.gnome.Shell.Eval  "imports.ui.status.keyboard.getInputSourceManager().inputSources[1].activate()"'
    
         let editStrings = ['i', 'I', 'a', 'A', 's', 'S', 'o', 'O', 'gi', 'gI', 'c', 'C', 'R', 'gR', 'r', 'gr']
         for str in editStrings
             exec 'noremap <silent> <Leader>' . str . ' ' . ':call system(chineseInputMethod)<CR>' . str
         endfor
         let searchStrings = ['/', '?']
         for str in searchStrings
             exec 'noremap <silent> <Leader>' . str . ' ' . ':call system(chineseInputMethod)<CR>' . str . '<Down>'
         endfor
         inoremap <silent> <Esc> <Esc>:call system(englishInputMethod)<CR>
         " autocmd CmdlineLeave * call system(englishInputMethod)
         augroup inputmethod
             autocmd! inputmethod
             autocmd CmdlineLeave * call system(englishInputMethod)
         augroup END
    
    • 有大量中文编辑不想多按<Leader>按键时需要安装插件并且设置快捷键
         Plugin 'rlue/vim-barbaric'  " Automatic input method switching for vim
    
         let searchStrings = ['/', '?']
         for str in searchStrings
             exec 'noremap <silent> <Leader>' . str . ' ' . ':call system(chineseInputMethod)<CR>' . str . '<Down>'
         endfor
         " inoremap <silent> <Esc> <Esc>:call system(englishInputMethod)<CR>
    
         " autocmd CmdlineLeave * call system(englishInputMethod)
         augroup inputmethod
             autocmd! inputmethod
             autocmd CmdlineLeave * call system(englishInputMethod)
         augroup END
    
    第 2 条附言  ·  280 天前

    发现快捷键有点问题,需要修改。

    注释掉下面这一行:

    inoremap <silent> <Esc> <Esc>:call system(englishInputMethod)<CR>
    

    修改这一行:

             autocmd CmdlineLeave  * call system(englishInputMethod)
    

             autocmd CmdlineLeave,InsertLeave * call system(englishInputMethod)
    
    35 条回复    2021-03-02 16:05:29 +08:00
    f165af34d4830eeb
        1
    f165af34d4830eeb  
       282 天前   ❤️ 1
    这边建议换 vs code remote 。换 vsc remote 后,腰不酸了,腿也不疼了,腰椎间盘突出也好了!
    Liler
        2
    Liler  
    OP
       282 天前
    @f165af34d4830eeb 提出问题不是太大,而且有了简单的解决方法了,并不影响继续使用 Vim 。

    对 Vim 比较熟悉了,没有必要换成 vs code,感觉建议。
    imkerberos
        3
    imkerberos  
       282 天前
    Plug 'CodeFalling/fcitx-vim-osx'
    Liler
        4
    Liler  
    OP
       282 天前   ❤️ 1
    一个开发工具而已,没有那么神奇吧,使用了就“腰不酸了,腿也不疼了,腰椎间盘突出也好了!”,夸张太多了。
    Liler
        5
    Liler  
    OP
       282 天前
    @imkerberos 用的是 linux,这个工具好像只适用于 osx
    f165af34d4830eeb
        6
    f165af34d4830eeb  
       282 天前
    @Liler 老梗啦。不过 vsc remote 感觉确实挺好用的,除了代码编辑功能,文件管理、git 集成、端口转发功能都挺实用的,适合我这种不太喜欢命令行但是又需要 linux 环境的人。
    jdhao
        7
    jdhao  
       282 天前 via Android
    linux 也有 vim 插件可以控制输入法状态,离开插入模式直接切换到英文模式,自己找找
    newbieRenew
        8
    newbieRenew  
       281 天前 via iPhone
    如果你熟练 86 五笔的话,可以用装个 VimIM 这个插件,提高切换效率。
    dongyx
        9
    dongyx  
       281 天前 via iPhone
    中文编辑是我用 Vim 唯一的痛点,相关插件几年前用过,但各有各的问题。后来自己思想发生了转变,不用任何插件,尽量原生默认,方便迁移。导致一度因为中文编辑问题想换 Emacs 。现在我写中文文档乖乖 Typora, Pages 。写代码,配置文件才用 Vim 。
    lululau
        10
    lululau  
       281 天前 via iPhone
    用英文先写好,然后用 Google 翻译一下
    itgoyo
        11
    itgoyo  
       281 天前
    老王好像出过个教程,老王呢,老王过来解答一下
    hanxiV2EX
        12
    hanxiV2EX  
       281 天前 via Android
    好像有个 vim 拼音输入法插件,不用使用系统输入法。
    wjh876531738
        13
    wjh876531738  
       281 天前
    可以考虑下增加类似 Emacs 的前后左右,在 insert 模式下也能便捷移动。

    ```
    inoremap <C-f> <Right>
    inoremap <C-b> <Left>
    inoremap <C-a> <ESC>I
    inoremap <C-e> <ESC>A
    inoremap <C-d> <DEL>
    ```

    关于中文的问题,个人觉得倒是还好,习惯输入完中文之后都会按下 shift 重置会英文。
    tankb52
        14
    tankb52  
       281 天前
    @newbieRenew
    VimIM 支持很多输入方案,不光是 86 五笔。
    zhuisui
        15
    zhuisui  
       281 天前
    yuancoder
        16
    yuancoder  
       281 天前
    无解,建议换个编辑器或者直接使用英文
    darksword21
        17
    darksword21  
       281 天前   ❤️ 1
    可以换成 emacs 然后用 emacs-rime .... 🐕️
    jdhao
        18
    jdhao  
       281 天前 via Android
    @dongyx https://github.com/ZSaberLv0/ZFVimIM
    这是新出来的一个用 vim 实现的输入法,也是一种方式,可以试试。
    lancelock
        19
    lancelock  
       281 天前
    我的选择是,不输入中文

    说实话我现在输入完中文后会立刻下意识切换成英文,已经形成肌肉记忆了
    MaxTan
        20
    MaxTan  
       281 天前
    输入法问题不大,vim 写中文最痛苦的还是 e b 这些跳光标的操作吧,没有中文分词,习惯性点下 e 就跳到行尾了
    knightdf
        21
    knightdf  
       281 天前
    这不就是按一下 shift 的事么?
    namelosw
        22
    namelosw  
       281 天前
    用集成 VIM 的 Emacs
    northisland
        23
    northisland  
       281 天前
    厉害了
    Liler
        24
    Liler  
    OP
       281 天前
    @knightdf 如果对写代码或者英文熟悉了,写中文时有的时候会忘记按 shift,这时会多按几个按键,除非形成习惯。
    以前我也是这么做的,但是感觉有点麻烦,想找个更好的方法
    northisland
        25
    northisland  
       281 天前
    @darksword21 看起来很复古
    Liler
        26
    Liler  
    OP
       281 天前
    @dongyx 原生的功能几乎可以满足编辑需求了,有些不能满足的可以写点脚本,虽然安装了一些插件,经常使用的就那么几个,还是少用插件好。

    中文编辑我还是用 vim,对它熟悉了,越用越熟练,效率就会越来越高
    Liler
        27
    Liler  
    OP
       281 天前
    @wjh876531738 以前我就是这样做的,感觉繁琐,就想法找个更好的方案
    Liler
        28
    Liler  
    OP
       281 天前
    @zhuisui 昨天试用了下,总体还好,就是查找中文时需要切换输入法,还有个问题,推出编辑模式后者进入到 shell,想切换到英文输入法,需要按两次切换按键
    mascteen
        29
    mascteen  
       281 天前 via Android
    emacs evil
    ooops
        30
    ooops  
       281 天前   ❤️ 1
    Rime 输入法的 asciimode 和 vimmode 就是解决这个问题的,不知道 Linux 上加了没,我当时只给 Squirrel 提了 PR
    taogen
        31
    taogen  
       281 天前
    szzhiyang
        32
    szzhiyang  
       281 天前 via iPhone
    换用 Power Keys 的「空格编辑」功能,早换早受益:

    https://PowerKeys.GitHub.io/space
    nightwitch
        33
    nightwitch  
       281 天前
    https://github.com/lilydjwg/fcitx.vim
    回到 normal 模式的时候自动切英文,仅适用于 fctix
    dongyx
        34
    dongyx  
       281 天前
    @Liler MacBook 用 Caps Lock 切换输入法之后我就基本能忍了。以前是外接显示器 + HHKB Pro 2,写中文就太难受了。
    hengstchon
        35
    hengstchon  
       276 天前 via Android
    你需要的是 https://github.com/brglng/vim-im-select 这个 vim 插件,完美解决你的需求,在中文输入法状态下进 normal 模式自动切成英文,进 insert 模式又回中文。
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1718 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 16:56 · PVG 00:56 · LAX 08:56 · JFK 11:56
    ♥ Do have faith in what you're doing.