在 VIM 中编辑中文时出现的问题:
编辑中文时需要经常切换输入法,影响编辑体验与效率,怎样才能提高在 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>
请问还有更好的方法吗? 在编辑中文时还会遇到什么问题,怎么解决的?
我想到的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
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
发现快捷键有点问题,需要修改。
注释掉下面这一行:
inoremap <silent> <Esc> <Esc>:call system(englishInputMethod)<CR>
修改这一行:
autocmd CmdlineLeave * call system(englishInputMethod)
为
autocmd CmdlineLeave,InsertLeave * call system(englishInputMethod)
1
f165af34d4830eeb 2021-02-24 22:19:41 +08:00 1
这边建议换 vs code remote 。换 vsc remote 后,腰不酸了,腿也不疼了,腰椎间盘突出也好了!
|
2
Liler OP |
3
imkerberos 2021-02-24 22:43:49 +08:00
Plug 'CodeFalling/fcitx-vim-osx'
|
4
Liler OP 一个开发工具而已,没有那么神奇吧,使用了就“腰不酸了,腿也不疼了,腰椎间盘突出也好了!”,夸张太多了。
|
5
Liler OP @imkerberos 用的是 linux,这个工具好像只适用于 osx
|
6
f165af34d4830eeb 2021-02-24 22:56:42 +08:00
@Liler 老梗啦。不过 vsc remote 感觉确实挺好用的,除了代码编辑功能,文件管理、git 集成、端口转发功能都挺实用的,适合我这种不太喜欢命令行但是又需要 linux 环境的人。
|
7
jdhao 2021-02-24 22:57:02 +08:00 via Android
linux 也有 vim 插件可以控制输入法状态,离开插入模式直接切换到英文模式,自己找找
|
8
newbieRenew 2021-02-25 07:26:52 +08:00 via iPhone
如果你熟练 86 五笔的话,可以用装个 VimIM 这个插件,提高切换效率。
|
9
dongyx 2021-02-25 08:19:55 +08:00 via iPhone
中文编辑是我用 Vim 唯一的痛点,相关插件几年前用过,但各有各的问题。后来自己思想发生了转变,不用任何插件,尽量原生默认,方便迁移。导致一度因为中文编辑问题想换 Emacs 。现在我写中文文档乖乖 Typora, Pages 。写代码,配置文件才用 Vim 。
|
10
lululau 2021-02-25 08:24:23 +08:00 via iPhone
用英文先写好,然后用 Google 翻译一下
|
11
itgoyo 2021-02-25 08:58:21 +08:00
老王好像出过个教程,老王呢,老王过来解答一下
|
12
hanxiV2EX 2021-02-25 09:08:43 +08:00 via Android
好像有个 vim 拼音输入法插件,不用使用系统输入法。
|
13
wjh876531738 2021-02-25 09:25:20 +08:00
可以考虑下增加类似 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 重置会英文。 |
14
tankb52 2021-02-25 09:56:07 +08:00
@newbieRenew
VimIM 支持很多输入方案,不光是 86 五笔。 |
15
zhuisui 2021-02-25 10:14:16 +08:00
|
16
yuancoder 2021-02-25 10:38:41 +08:00
无解,建议换个编辑器或者直接使用英文
|
17
darksword21 2021-02-25 10:58:51 +08:00 1
可以换成 emacs 然后用 emacs-rime .... 🐕️
|
18
jdhao 2021-02-25 11:01:29 +08:00 via Android
|
19
lancelock 2021-02-25 11:15:51 +08:00
我的选择是,不输入中文
说实话我现在输入完中文后会立刻下意识切换成英文,已经形成肌肉记忆了 |
20
MaxTan 2021-02-25 11:17:54 +08:00
输入法问题不大,vim 写中文最痛苦的还是 e b 这些跳光标的操作吧,没有中文分词,习惯性点下 e 就跳到行尾了
|
21
knightdf 2021-02-25 11:31:36 +08:00
这不就是按一下 shift 的事么?
|
22
namelosw 2021-02-25 11:53:53 +08:00
用集成 VIM 的 Emacs
|
23
northisland 2021-02-25 11:55:17 +08:00
厉害了
|
24
Liler OP @knightdf 如果对写代码或者英文熟悉了,写中文时有的时候会忘记按 shift,这时会多按几个按键,除非形成习惯。
以前我也是这么做的,但是感觉有点麻烦,想找个更好的方法 |
25
northisland 2021-02-25 11:56:44 +08:00
@darksword21 看起来很复古
|
26
Liler OP @dongyx 原生的功能几乎可以满足编辑需求了,有些不能满足的可以写点脚本,虽然安装了一些插件,经常使用的就那么几个,还是少用插件好。
中文编辑我还是用 vim,对它熟悉了,越用越熟练,效率就会越来越高 |
27
Liler OP @wjh876531738 以前我就是这样做的,感觉繁琐,就想法找个更好的方案
|
28
Liler OP @zhuisui 昨天试用了下,总体还好,就是查找中文时需要切换输入法,还有个问题,推出编辑模式后者进入到 shell,想切换到英文输入法,需要按两次切换按键
|
29
mascteen 2021-02-25 12:18:53 +08:00 via Android
emacs evil
|
30
ooops 2021-02-25 12:26:12 +08:00 1
Rime 输入法的 asciimode 和 vimmode 就是解决这个问题的,不知道 Linux 上加了没,我当时只给 Squirrel 提了 PR
|
31
taogen 2021-02-25 12:29:02 +08:00
IdeaVimExtension https://plugins.jetbrains.com/plugin/9615-ideavimextension
|
32
szzhiyang 2021-02-25 13:18:29 +08:00 via iPhone
|
33
nightwitch 2021-02-25 13:31:54 +08:00
https://github.com/lilydjwg/fcitx.vim
回到 normal 模式的时候自动切英文,仅适用于 fctix |
34
dongyx 2021-02-25 15:01:59 +08:00
@Liler MacBook 用 Caps Lock 切换输入法之后我就基本能忍了。以前是外接显示器 + HHKB Pro 2,写中文就太难受了。
|
35
hengstchon 2021-03-02 16:05:29 +08:00 via Android
你需要的是 https://github.com/brglng/vim-im-select 这个 vim 插件,完美解决你的需求,在中文输入法状态下进 normal 模式自动切成英文,进 insert 模式又回中文。
|
36
tensor1014 2023-01-14 07:52:31 +08:00
https://github.com/VSCodeVim/Vim#input-method
如果用 vscode 的话,可以直接哟能 vscode-vim 的配置 |