fcitx.vim 1.0 正式发布

依云 posted @ Oct 07, 2011 11:48:42 PM in Vim with tags vim fcitx , 7572 阅读

本文来自依云's Blog,转载请注明。

Fcitx 输入法自动切换

在离开/重新进入插入模式时自动切换输入法状态,以便在普通模式下始终是英文输入模式,切换回插入模式时恢复离开时的输入法输入模式。状态为每个缓冲区单独保存,所以在中文文档和英文代码间交叉跳转编辑也得心应手!

无需任何配置!


要求:

fcitx 版本 3.6 以上,建议 fcitx 4.0 以上。建议关闭 fcitx 的预编辑输入功能,否则在 GVim 中可能会有问题(见评论;最新 git 版 fcitx 已经能够在 GVim 中自动禁用预编辑输入)。

注意事项:

1. Python 3 或者 Python 支持以获得更快更好的效果。注意对于 vim 版本<7.3.288,如果同时编译了 Python 2 & 3 支持,因为此 vim 不能同时运行两个版本的 Python,而本脚本首先检查 Python3,所以会导致出错或者 Python 2 不可用。

2. 终端下请设置 Vim ttimeoutlen 选项为较小值(如100),否则退出插入模式时会有较严重的延迟。同样会造成延迟的还有 screen 的 maptimeout 选项以及 tmux 的 escape-time 选项。

如果你需要跨主机使用 fcitx.vim,请参考此文

开发:

它是 https://github.com/lilydjwg/dotvim 的一部分。
github mirror: https://github.com/vim-scripts/fcitx.vim

安装:

解压到 ~/.vim 下即可。如果没有并且不准备使用 Python 接口,可只将 so/fcitx.vim 放到 ~/.vim/plugin 目录下。


插件地址http://www.vim.org/scripts/script.php?script_id=3764

荒野无灯 说:
Oct 08, 2011 01:18:01 AM

这个好哇,一直在用呢。fcitx 4.1.2的fcitx-remote也有所改变,以前是变英文,现在是直接关闭输入法。

荒野无灯 说:
Oct 08, 2011 01:24:35 AM

搞错了,它是把界面隐藏了。。。不是关闭。

amao 说:
Oct 08, 2011 07:33:03 PM

我现在用的是小小输入法,就是yong。有没有可能也做到这种切换?

Avatar_small
依云 说:
Oct 08, 2011 08:41:19 PM

这取决于 yong 有没有提供相应的接口了。

lainme 说:
Oct 09, 2011 03:09:39 PM

Great! 这个插件也是我离不开fcitx的原因之一。。

freetstar 说:
Oct 10, 2011 07:25:01 PM

一个小问题,在输入的时候中文输入,可是ESC之后再成为命令模式之后可是还是出先中文,

fcitx版本,4.1.2
vim版本 7.3

谢谢

Avatar_small
依云 说:
Oct 10, 2011 07:53:04 PM

我猜想你说的“命令模式”是指“插入模式”?

fcitx.vim 的设计是这样子的,在某个 buffer 离开插入模式时是什么输入法状态,回到插入模式时就是什么输入法状态。

如果你只要离开插入模式时关闭输入法的话:
au InsertLeave * silent !fcitx-remote -c

freetstar 说:
Oct 10, 2011 09:30:06 PM

就是比如说按i进入输入模式,此时用fcitx输入中文,再ESC键回到命令模式,也就是hjkl移动在的那个模式,ps:也称正常模式吗?

我希望此时命令模式完全就是英文的,应该就是lz的插件的作用吧,不知道是不是我配置有问题

freetstar 说:
Oct 10, 2011 09:32:40 PM

额,貌似是可以了,等等一下,速度太快,貌似需要反映时间,谢谢

Avatar_small
依云 说:
Oct 10, 2011 09:54:59 PM

呃,那个模式叫“普通模式”,你没看过中文的vimtutor或是文档吗?”命令模式“难道是vi时代的称呼?

Avatar_small
依云 说:
Oct 10, 2011 09:56:28 PM

你的没 Python 支持吗?为加快反应速度,我才弄的 Python 版本呢。

qingxiaojin 说:
Oct 11, 2011 06:48:32 PM

爽的一塌糊涂!非常感谢!

Fermat 说:
Oct 11, 2011 11:53:13 PM

我还没顶啊
顶起!顶起!

凡是需要处理中文的地方,这个插件是对我影响最大的一个。

Avatar_small
Rykka 说:
Oct 12, 2011 11:14:53 PM

把小小改成fcitx试用下。
提个问题:没有独立的github repo吗? 那似乎就不能用vundle更新最新版了。

Avatar_small
依云 说:
Oct 12, 2011 11:31:34 PM

所有发布到 vim.org 的脚本都自动拥有 github repo 的哦 ;-)
https://github.com/vim-scripts/fcitx.vim

Avatar_small
Rykka 说:
Oct 13, 2011 12:46:47 AM

那个我是知道的,但是我想要dev channel的啊。。。

Avatar_small
依云 说:
Oct 13, 2011 10:35:12 AM

独立的话太麻烦了。。。而且这个插件估计再有什么变化也是因为 fcitx 的接口发生了变化,那时我会第一时间更新到 vim.org 的。

Avatar_small
abellong 说:
Oct 24, 2011 10:05:24 AM

非常感谢!我有个小问题,当我用Ctrl+c离开插入模式时,不会自动切换输入法,而按Esc可以切换,为什么会这样呢

Fermat 说:
Oct 24, 2011 11:34:15 AM

因为Ctrl+c跟Esc本来就不是等价的。fcitx.vim是依靠InsertLeave 和 InsertEnter两个事件的自动命令来进行自动切换,而insert模式下的Ctrl_C是quit insert mode, 不是Leave. 你:help i_Ctrl_c看下就知道了。

Avatar_small
abellong 说:
Oct 24, 2011 11:49:35 AM

明白了。看帮助文档之后才知道原来可以用Ctrl_[代替Esc,谢谢Fermat:)

ccczzx 说:
Dec 17, 2011 11:37:50 PM

vim 要编译有python支持才能使用此插件吗?
因为启动时出现如下提示:
fcitx.vim: 没有 Python 支持,尝试使用旧版本。
系统中已经安装有python2/3。

Avatar_small
依云 说:
Dec 17, 2011 11:49:16 PM

要编译有 python 支持才能使用更好的 Python 接口版本,否则只好用 VimScript 调用数次 fcitx-remote 命令了。

Avatar_small
Rykka 说:
Feb 10, 2012 10:15:20 PM

还是继续用小小,
这里有小小的作者的vim 输入法切换配置。你可以放到你的插件里。
http://yong.dgod.net/read.php?tid=64

Avatar_small
依云 说:
Feb 10, 2012 10:26:48 PM

不加。检测用的是什么输入法太费时了。而且,我做这个插件的目的在于「高效」,但是它这个用的是 system() 调用。

唉,我真想直接调用 Xtest 来取代 im* 选项算了。。。

Avatar_small
Rykka 说:
Feb 10, 2012 11:47:12 PM

也好,而且这个输入法目前的vim切换还存在问题。

Fermat618 说:
Apr 13, 2012 02:10:39 PM

gvim fcitx 在启动嵌入预编辑字符的时候,这个插件不起作用。当离开插入模式时,输入法自动就关掉了,以后也不能恢复过来。

Avatar_small
依云 说:
Apr 13, 2012 02:32:35 PM

我这里正常。你可能需要去除 GVim 对输入法的 hack——https://github.com/lilydjwg/myvimsrc/commit/87e01b99f43b081610f7e89e6640054b6926165c

nie 说:
May 05, 2012 09:27:19 AM

可以的.见小小官方论坛说明,不过只能在*nix系统下使用

kfaren 说:
Jun 03, 2012 03:01:12 PM

请教下,我用的ubuntu12.04源里面的vim-gnome包,安装好后vim版本是7.3.429。无法使用这个插件的python接口功能,只能用里面so文件夹附带的脚本。用这个脚本在推出插入模式的时候非常的卡,有时要有时按两三次ESC才有作用。

请问该怎么解决阿?

Avatar_small
依云 说:
Jun 03, 2012 04:24:41 PM

Esc 的延时问题是在终端里才有的吧?你回头再去看看下载页的说明,需要设置下 'ttm' 的值的。

你从源里安装的 Vim 的 :ver 输出中关于 Python 的部分是怎样的?

kfaren 说:
Jun 03, 2012 11:59:23 PM

在gvim中按 Esc 也会有延迟,有时要按几下才有用。python版本的就是为了使这 个过程更快而编写?我不能用也。。。。

源里的没有加入python3,输出如下:

:ver
VIM - Vi IMproved 7.3 (2010 Aug 15, compiled May 4 2012 04:22:36)
包含补丁: 1-429
修改者 pkg-vim-maintainers@lists.alioth.debian.org
编译者 buildd@
巨型版本 带 GTK2-GNOME 图形界面。
可使用(+)与不可使用(-)的功能:

+python -python3

Avatar_small
依云 说:
Jun 04, 2012 12:36:23 AM

这样应该能用啊,你 :echo has('python') 的结果是 1 么?

如果 gvim 中也有延迟的话,是不是你映射了 Esc 开头的键?

Python 版本主要是为了:

1. 更智能地找到通信用的 socket;

2. 减去创建进程等的开销。

kfaren 说:
Jun 04, 2012 12:55:37 AM

是1阿,有的。
哦,下的是1.1那版本。
你写的“解压到 ~/.vim 下即可。”。

解压后的目录结构:
fcitx
----plugin
---------fcitx.py
---------fcitx.vim
----so
---------fcitx.vim

我老实的解压哦。这哈才发现要将fcitx-->plugin-->fcitx.py和fcitx.vim都丢在.vim-->plugin下才可以用。

安装过的vim插件都是解压后自动丢进合适的目录中。。...

Avatar_small
依云 说:
Jun 04, 2012 01:10:46 AM

我刚刚试过了,没有最上层的 fcitx 的呀,是不是你的解压软件自动创建的?

kfaren 说:
Jun 04, 2012 01:22:27 AM

我用的tar -xzvf阿。。。。难道我是点的坛子里的链接下的。。。。。
哇,你也喜欢熬夜阿。。。打扰你了哦。。。我真笨。。

Avatar_small
依云 说:
Jun 04, 2012 01:52:46 AM

不是「喜欢」,是「习惯」……

kaji331 说:
Jul 19, 2012 08:03:47 PM

这两天debian unstable下的vim再也启动不起来了,无论终端还是gui,终端报错symbol lookup error:init_ssl。网上找了一圈,老外的论坛说是vim和python2.7.3-2有冲突,降级回去2.7.2-10也不行,尝试发现vim启动有-V选项可以逐一加载插件,结果发现到fcitx.vim就悲剧了,vim.org上的最新版也不行

系统是debian unstable amd64,kde 4.8.4-1,vim 7.3.547-3

version内容
+arabic +autocmd +balloon_eval +browse ++builtin_terms +byte_offset +cindent +clientserver +clipboard +cmdline_compl +cmdline_hist
+cmdline_info +comments +conceal +cryptv +cscope +cursorbind +cursorshape +dialog_con_gui +diff +digraphs +dnd -ebcdic +emacs_tags +eval
+ex_extra +extra_search +farsi +file_in_path +find_in_path +float +folding -footer +fork() +gettext -hangul_input +iconv +insert_expand
+jumplist +keymap +langmap +libcall +linebreak +lispindent +listcmds +localmap +lua +menu +mksession +modify_fname +mouse +mouseshape
+mouse_dec +mouse_gpm -mouse_jsbterm +mouse_netterm -mouse_sysmouse +mouse_xterm +mouse_urxvt +multi_byte +multi_lang -mzscheme
+netbeans_intg +path_extra +perl +persistent_undo +postscript +printer +profile +python -python3 +quickfix +reltime +rightleft +ruby
+scrollbind +signs +smartindent -sniff +startuptime +statusline -sun_workshop +syntax +tag_binary +tag_old_static -tag_any_white +tcl
+terminfo +termresponse +textobjects +title +toolbar +user_commands +vertsplit +virtualedit +visual +visualextra +viminfo +vreplace
+wildignore +wildmenu +windows +writebackup +X11 -xfontset +xim +xsmp_interact +xterm_clipboard -xterm_save
系统 vimrc 文件: "$VIM/vimrc"
用户 vimrc 文件: "$HOME/.vimrc"
用户 exrc 文件: "$HOME/.exrc"
系统 gvimrc 文件: "$VIM/gvimrc"
用户 gvimrc 文件: "$HOME/.gvimrc"
系统菜单文件: "$VIMRUNTIME/menu.vim"
$VIM 预设值: "/usr/share/vim"
编译方式: gcc-4.6 -c -I. -Iproto -DHAVE_CONFIG_H -DFEAT_GUI_GTK -pthread -I/usr/include/gtk-2.0 -I/usr/lib/x86_64-linux-gnu/gtk-2.0/include
-I/usr/include/atk-1.0 -I/usr/include/cairo -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/pango-1.0 -I/usr/include/gio-unix-2.0/ -I/usr/includ
e/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng12 -g -O2 -
fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1 -I/usr/include/tcl8.5
-D_REENTRANT=1 -D_THREAD_SAFE=1 -D_LARGEFILE64_SOURCE=1
链接方式: gcc-4.6 -L. -Wl,-z,relro -rdynamic -Wl,-export-dynamic -Wl,-E -Wl,-z,relro -Wl,--as-needed -o vim -lgtk-x11-2.0 -lgdk-x11-2.0
-latk-1.0 -lgio-2.0 -lpangoft2-1.0 -lpangocairo-1.0 -lgdk_pixbuf-2.0 -lcairo -lpango-1.0 -lfreetype -lfontconfig -lgobject-2.0 -lglib-2.0
-lSM -lICE -lXpm -lXt -lX11 -lXdmcp -lSM -lICE -lm -ltinfo -lnsl -lselinux -lacl -lattr -lgpm -L/usr/lib -llua5.1 -Wl,-E -fstack-protect
or -L/usr/local/lib -L/usr/lib/perl/5.14/CORE -lperl -ldl -lm -lpthread -lcrypt -L/usr/lib/python2.7/config -lpython2.7 -lpthread -ldl -luti
l -lm -Xlinker -export-dynamic -Wl,-O1 -Wl,-Bsymbolic-functions -L/usr/lib -ltcl8.5 -ldl -lpthread -lieee -lm -lruby-1.9.1 -lpthread -lrt -l
dl -lcrypt -lm -L/usr/lib

Avatar_small
依云 说:
Jul 19, 2012 09:52:01 PM

请运行 gdb vim,然后输入 r 并回车。Vim 应当会异常退出。请把退出后 gdb 给出的消息以及输入 bt 并回车后的消息贴上来看看。

kaji331 说:
Jul 20, 2012 10:03:39 AM

删掉fcitx.vim就好了,安装这个插件就不行

按你说的输入r后的信息
/usr/bin/vim: symbol lookup error: /usr/bin/vim: undefined symbol: init_ssl
[Thread 0x7fffeef5b700 (LWP 3599) exited]
[Inferior 1 (process 3598) exited with code 0177]

bt在哪里输入?gdb么?输入后信息
No stack.

Avatar_small
依云 说:
Jul 20, 2012 02:19:09 PM

你在 Python 中输入 import ssl 以及 import _ssl 呢?

Avatar_small
依云 说:
Jul 20, 2012 02:20:35 PM

嗯,import _ssl 能成功不?我发现在 import socket 时会 import 这个。

kaji331 说:
Jul 20, 2012 02:45:40 PM

ssl _ssl socket三个import都成功,没有错误提示

Avatar_small
依云 说:
Jul 20, 2012 04:54:58 PM

在 Vim 里 :py import _ssl 呢?
你的 Vim 是自己编译的还是官方仓库里的?如果是仓库里的,都是最新的吗?试试在当前 Python 版本下(不要升级或者降级)重新编译 Vim?

kaji331 说:
Jul 20, 2012 09:46:42 PM

vim里:py import _ssl也出问题了,奇怪的退出,还影响终端稳定性,最后连终端都要退

vim是debian仓库中最新的,源是163的debian sid和unstable。安装的vim-gtk和依赖的包,没有安装vim,但是终端里可以用vim,也有gvim。

我没用apt编译过源码,回头用空试试吧~

kaji331 说:
Jul 26, 2012 09:24:10 PM

今天升级更新了vim就好了

kaji331 说:
Jul 28, 2012 05:40:01 PM

不好意思啊,又发现个问题,下载的最新的1.2版来用,发现在终端的vim中有效,vim-gtk中无效~请问依云用的vim-gtk还是vim-gnome啊?

Avatar_small
依云 说:
Jul 28, 2012 08:33:37 PM

我用的是我自己编译的 gvim,「陈列室」里有一些编译好的 Arch 包。

你是不是开启了预编辑功能(默认开启,输入时编码会带下划线地出现在客户端窗口)?如果开了的话,按快捷键 Ctrl-Alt-P(默认)关掉之再试。或者到 vim_dev 邮件列表找补丁。

kaji331 说:
Jul 29, 2012 12:45:05 AM

还真是这个原因,不过为什么终端里没问题呢~预编辑这功能挺好用的~fcitx现在也越来越强了(只是奇怪的找不到shift快速切换中英文状态功能了)~vim_dev邮件列表找补丁这种东西完全不会搞,太复杂了,以后用不同的系统迁移也困难……

Avatar_small
依云 说:
Jul 29, 2012 12:12:33 PM

因为终端里的输入法归终端管呗。

要用 Shift 键切换的话,在「全局配置」->「快捷键」里设置「额外的激活输入法快捷键」即可。相关改变参见 fcitx 的邮件列表。

kaji331 说:
Jul 29, 2012 02:28:19 PM

只能这样啊,不能变绿还是有些不习惯~邮件列表真心不会搞

MaskRay 说:
Sep 02, 2012 04:31:01 PM

沒搞明白怎麼使用……支持fcitx-rime?

Avatar_small
依云 说:
Sep 02, 2012 05:16:39 PM

放到指定的位置就可以了,支持 fcitx,当然包括了 fcitx-rime 啦。PS: 最新版打包时把 so/fcitx.vim 忘记了……

alswl 说:
Sep 10, 2012 01:28:27 PM

是不是因为忘了 so/fcitx.vim 就导致失效了?

Avatar_small
依云 说:
Sep 10, 2012 02:18:42 PM

可能是吧,如果 vim 没有 Python 支持的话。

alswl 说:
Sep 10, 2012 02:22:42 PM

我也是刚发现我的 Vim Python 支持没正确安装,正在重新编译,问题出在「configure.in 中 vi_cv_path_python」上。

lolyLee 说:
May 29, 2013 10:33:34 PM

你好,我用这个插件的时候的怎么没有效果
我在终端输入fcitx-remote 结果返回Not get reply

Avatar_small
依云 说:
May 29, 2013 10:37:34 PM

请贴 fcitx-diagnose 结果。
PS: 不要贴这里。找个专用网站,比如 http://paste.ubuntu.org.cn/

lolyLee 说:
May 30, 2013 10:42:35 PM

!..囧..!我把系统更新了下,然后重装了fcitx 又好了 ,问题无法复原了

Bozar 说:
Sep 03, 2013 09:56:25 PM

依云你好,你写的插件很好用,非常感谢!不过如果你不介意的话,我有一条建议和一个疑问。

我用openSUSE 12.3和从官方源下载的gVim 7.3时发现,当gVim退出输入模式后,fcitx输入法会自动关闭,再次输入时需要重新开启。我看了你的博客评论,发现第27楼和第40楼的讨论里有解决办法——只要按<alt-ctrl-p>关闭预编辑功能就行。或许可以把这条提示加入博客和GitHub的说明里?

另外,我发现fcitx输入法的图形设置界面里包含大量选项,但是我只能看懂很少的一部分,你知道哪里有更详细的说明吗?我根据ArchWiki提供的链接找到三个网页,但是帮助不大。先谢谢了!

https://wiki.archlinux.org/index.php/Fcitx

Avatar_small
依云 说:
Sep 03, 2013 10:28:11 PM

更新啦。github 上的得等那脚本什么时候去重新抓了。

fcitx 的选项看名字差不多知道是干什么的啦,如果还是不清楚就找人问好了。XMPP/gtalk 群、IRC、相关邮件列表、论坛都可以的。

哦对了,还有 fcitx-im.org 官方 wiki,不过编辑太少了。

Bozar 说:
Sep 05, 2013 09:01:44 PM

感谢回复!我调整了一些能看懂功能的fcitx选项,目前用起来没什么问题~

scola 说:
Oct 12, 2013 11:24:57 AM

我使用的是 ibus google pinyin,可以使用你这个脚本么

Avatar_small
依云 说:
Oct 12, 2013 11:47:12 AM

不行。ibus 也有 dbus 接口,你可以照着写一个类似的脚本。或者你换用 fcitx 的 googlepinyin ;-)

scola 说:
Oct 12, 2013 03:22:37 PM

谢谢回复了,我还是使用ibus google 拼音吧。fcitx 的 googlepinyin 这个我之前安装一直有问题。目前我还是个小白,关于写脚本我还要慢慢学习

cmicat 说:
Feb 12, 2014 03:39:44 PM

不知道为什么之前使用mint的时候设置了ttimeoutlen之后终端下就可以退出了,而gvim不用设置就可以正常工作了。但是现在换成了opensuse,不管怎样退出插入模式总是有很大的延时,连gvim也一样

Avatar_small
依云 说:
Feb 14, 2014 08:21:23 PM

我刚测试过 opensuse 的 gvim-7.4.169-1.1.x86_64.rpm 了,没有复现这个情况呢。

你的 gvim 版本是?使用 gvim -N -u NONE 命令启动,然后 :runtime plugin/fcitx.vim 试试呢?

cmicat 说:
Feb 18, 2014 09:39:18 AM

感谢回复。我的是opensuse 13.1,vim版本是7.4.052-1.1-x86_64。这个问题已经解决了。是/etc/vimrc这个文件有问题,我直接sudo mv /etc/vimrc /etc/vimrc.bak就解决掉了。

cmicat 说:
Feb 18, 2014 09:41:35 AM

感谢回复。我的是opensuse 13.1。这个问题已经解决了。是/etc/vimrc这个文件有问题,我直接sudo mv /etc/vimrc /etc/vimrc.bak就解决掉了。


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter