IBus输入法最近似乎比较热,拿来玩玩,挺喜欢的。不过在Vim中编辑时还是有一些不顺的地方。幸运的是IBus的前端是用Python写的,本人也正好在学习Python。稍微修改了下,用起来爽很多了。动态语言的好处是,修改了就能用了,无须编译,酷。 IBus在Vim中编辑的几个问题 IBus默认使用了预选词嵌入编辑器输入方式,在Gvim中会出现输入几个字就自动退出编辑状态的情况,SCIM中有一个选项可以取消这种方式,IBus没有配置 当用Ctrl+Space打开输入法时,输入法会保持最后一次的编辑方式,如果最后一次编辑处于英文状态,输入法打开时也是英文状态。这不符合使用习惯,无谓增加了输入法的模式切换。当人们打开输入法时,希望的是马上能输入中文。 当在Vim中用Escape键退出编辑状态时,IBus保持中文编辑方式,妨碍Vim在命令模式下的操作,希望在按下Escape键后输入法切换为英文输入状态。 对IBus的一些小修改 打开 /usr/share/ibus-pinyin/engine/pinyin.py ,找到 update_preedit 函数的定义,在函数体的第一行插入 return ,将该函数屏蔽掉。这样就不会再使用预选词嵌入的方式了。(详细说明请参考:http://blog.pluskid.org/?p=328 ) 在上述文件中找到 enable 函数的定义,并在其下添加 self.__mode__ = 1 ,这样在打开输入法时,总是默认为中文输入。 在上述文件中找到 __chinese_mode_process_key_event 函数的定义,并在 elif key.code == keysyms.Escape: 下添加 self.__change_mode() ,这样在Vim中按下Escape键,IBus就从中文输入状态切换到英文输入状态了。 网络书签
Vim中发布博客的想法开始只是因为好玩。有不少VIM的插件可以支持从VIM中直接发送内容到Wordpress-我使用的博客软件。可是真的要用起来却真的是大费周则。如果只是将文字发送到博客网站那确实不难,可是显示出来的博客内容都是没有任何格式的平淡文字。当然我们可以在VIM中编辑HTML然后发送,可是这也太... 手工编辑HTML的傻事当然不能做。那有什么可以容易编辑又能获得格式化文字的方法呢?自然想到了正在学习中的 reStructuredText (简称reST)。reST实际上是轻量级结构化文本格式的一种,类似的还有很多,比如: Markdown, Deplate, txt2tags (txt2tags相对简单易学,比较喜欢,我还翻译了 txt2tags的使用技巧 可惜没有相应的Wordpress插件支持)。使用reST的好处是:它是Python语言官方文档使用的格式,我也恰好正在学习Python。而reST与 Sphinx 的配合也使文档的编辑工作变得有趣味起来。幸运的是,Wordpress有支持这种格式的插件,不幸的是,为了使用这个插件耗费了我不老少的时间,幸运的是,你不必了。以下是具体的操作步骤: 网络书签
你是否会和我一样经常碰到这样的情景:在VIM中编辑了一个系统配置文件,当需要保存时才发现当前的用户对该文件没有写入的权限。如果已经做了很多修改,放弃保存的确很懊恼,只好先保存在用户的主目录下,再用sudo mv移动到文件的原始位置,并按需要chown。这样做实在太麻烦了,以下的这个技巧就太方便了。当需要保存时,输入以下的命令: :w !sudo tee % 网络书签
(,“,‘,[符号的自动闭合 我们可以用简单的键映射来实现以上这些成对符号的闭合,也就是在插入模式下输入这些符号的左边部分,键映射将自动完成右边部分,并保持插入模式,光标保持在成对符号的当中以便在其中输入字符。比如: :inoremap ( ()<Esc>i 以上的设置的意思是在插入模式时将输入的(转换为()然后回到正常模式,再用i回到插入模式,这时候光标位置正好落在)之前。同理可以完成其它符号的自动闭合。 但是这样的设置,在完成在成对符号中的输入后,要跳出成对符号继续输入时还是不方便。下面的方法就可以来解决这个问题: ... :inoremap ( ()<Esc>:let leavechar=")"<CR>i :inoremap [ []<Esc>:let leavechar="]"<CR>i ... :imap <C-l> <Esc>:exec "normal f" .leavechar<CR>a 这里的设置分两段,第一段在之前提到的方法上又加了: let leavechar=")"<CR> 这里表示在闭合符号的同时,将对应的右侧符号附给leavechar这个变量,<CR>表示回车。 第二段中的<C-l>表示CTRL+l,exec "normal f" .leavechar<CR>a表示在正常模式下用命令f来定位到leavechar中所保存的字符,然后用a命令在其后插入光标,这样就做到了跳出成对符号继续编辑的要求。 对现有的文字添加成对符号 有的时候我们需要对已经输入的字符加上成对符号。 一般情况是我们选中一段文字然后对其加上成对符号,我们可以这样来实现: :vnoremap ( <Esc>`>a)<Esc>`<i(<Esc> 这里要注意的是`>和`<的用法,前者表示定位到所选区域的最后一个字符,而后者表示定位到所选区域的最后一个字符,这样就能在所选区域的开头和结尾加上成对符号了。 根据上面的说明,我们可以根据需要将这些设置写入VIM的设置文件.vimrc里,这样就可以让Vim来简化我们的输入操作了。 网络书签













