Archives

Archive for July, 2010

和 Subversion 一样,Git 也可以为 Commit Message 设置一个默认的编辑器,命令如下:

1
$ git config --global core.editor vim

不过我在 Mac OS X 系统使用 Git 的过程中,偶尔会遇到如下的情况:

1
2
3
4
5
6
7
*** Commands ***
  1: status	  2: update	  3: revert	  4: add untracked
  5: patch	  6: diff	  7: quit	  8: help
What now> q
Bye.
error: There was a problem with the editor 'vim'.
Please supply the message using either -m or -F option.

这种情况基本上都是出现在我打错字的时候,开始以为是输入法引起的 Vim 状态异常,不过出现的次数多了才慢慢发现一个规律——如果在 Vim 中编辑文本时因为按键失误出现类似这样:E492: Not an editor command… 的错误信息时,必然无法提交。

查了一下 ProGit 的文档后了解到:如果 Git 的 Commit Hooks 检测到脚本的返回非零状态码的话(Non-Zero Code,表示有错误发生),会阻止本次提交。到这里问题就比较清晰了,显然是 Vim 非正常退出返回了 Non-Zero Code。

为了验证猜测,我作了如下操作,打开终端 Vim,随便输入几个无效指令,造成 Exxx 之类的错误,然后立刻使用 :q 退出,观察返回値,结果:

1
2
3
verdana@phpvim:~ # vim
verdana@phpvim:~ # echo $?
1

:roll: 果然是这样呢!

后来在 Google Group: vim_mac 这个帖子中找到了解决的办法,就是使用完整的 Vim 路径—— /usr/bin/vim :

1
$ git config --global core.editor /usr/bin/vim

不太清楚 Mac OS X 中 Vim 为何会有这种问题,Bram 老大亲自现身作了解释:

Vim 在遇到 Exx Error 时返回 Non-Zero code 是为了兼容 Posix,不过这种情况应该只会出现在使用 Ex Mode 时,Normal/Insert Mode 是不会这样的。

Comments Off on 修正 Vim(Mac) 有时无法正确提交 Git Commit Message 的问题
Jul 15th, 2010 | Filed under Vim
Tags: , ,

今天在 vim.org 的脚本库里面闲逛的时候,无意中看到了这个颜色主题。暗色系主题,颜色运用很鲜艳,看起来很养眼,美中不足的是 comment 颜色稍微偏暗了一些,看着不是很清楚,可以打开 molokai.vim 修改一下 hi Comment … 改成亮一点的颜色…

Vim colorscheme - molokai (php)

Vim colorscheme - molokai (vim)

下载地址:
http://www.vim.org/scripts/script.php?script_id=2340

Comments Off on Vim color scheme: molokai
Jul 7th, 2010 | Filed under Vim
Tags:

Vim 中码字,在 Insert/Normal 两种模式中频繁切换是无可避免的。那么如何快速在两种模式中切换,显然影响到我们的操作效率。

这里有三个快捷键可以选择: ESC, CTRL+C, CTRL+[

从便捷性上来看,CTRL+C 貌似是最顺手的,CTRL+[ 次之(需要两只手),ESC 最麻烦了,左手需要离开键盘的主要操作区域。

从功能上来看,ESC 等同于 CTRL+[,两者是完全一样的。CTRL+C 则稍稍不同,区别在于它不会自动展开 abbreviations,也不会触发 InsertLeave 事件。在某些些情况下,这可能会造成一点小小的困扰,比如下面的配置。

1
2
3
4
" 当切换 Insert/Normal 模式时,动态修改状态栏颜色
hi StatusLine guifg=#FBFAFB  guibg=#755939  gui=bold
autocmd InsertEnter * hi statusline guifg=#FBFAFB guibg=#44507F gui=bold
autocmd InsertLeave * hi statusline guifg=#FBFAFB guibg=#755939 gui=bold

如果使用 CTRL+C,那么上面最后一行配置就不起作用了。

好在 Vim 可以重新定义按键:

1
2
3
4
inoremap <C-c> <ESC>
 
" 或者作一些小小的改进
inoremap <C-c> <ESC>`^

abbr 依然不会自动展开,实际上这个不是问题,可以使用空格、回车,CTRL+]等等替代,重要的是 InsertLeave Event 回来了。

光标的漂移

默认的情况下,当你按 <ESC> 返回 Normal 模式时,光标会向左边移动一个字符,上面的第二个映射命令中添加了 `^,这样就能让光标保持原来的位置,不再乱跑了。

更多相关的知识请参考(准备好梯子) 😡 :
http://vim.wikia.com/wiki/Avoid_the_escape_key

Comments Off on Vim 中离开 Insert 模式的快捷键
Jul 7th, 2010 | Filed under Vim
Tags: