一、vim还是emacs
vim还是emacs? java还是C++? qt还是gtk? 争论是毫无意义的,谁好谁坏,孰对孰错,本没有绝对的标准。适合你的就是最好的。学习要快乐,不要纠结。
有一段时间听说emacs下有个写wiki的mode很方便,我也试着用了下emacs,但最终还是选择了vim。主要是两方面的原因:一、我先遇到vim。“正因为你为你的玫瑰花费了时间,才使得你的玫瑰对你如此重要。”我已经在vim投入了学习的精力,vim对我来说更简单,更方便。二、性格使然。我喜欢vim的多模式,觉得这样更纯粹。也许是因为我这个人比较执拗于指法,长期以来又一直只用左手的Shift、Ctrl和Alt,实在是难以适应emacs总是要同时按两三个键。
百度一下"emacs 指法",发现普遍存在这个问题,有个老外对此深有研究http://xahlee.org/emacs/emacs_pinky.html,给出的建议是用个好键盘,不然时间长了真的容易造成手指损伤。囧……
从功能强大而全面这方面来衡量,emacs可能确实要稍胜一筹(毕竟gcc,gdb和emacs是一个娘胎的)。不过指法问题,我纯是不能忍,而且vim也已经足够强大了,使用vim手指不用大范围移动确实挺享受。所以,vim就是我最好的选择。
如果有时间,学学用viper mode和第三方工具将emacs转换成vim模式也是不少人的选择。参见:http://emacser.com/vimvsemacs.htm
二、vim还是gvim
《智慧书》:有的人使用粗劣的工具,来显示他们身怀绝技。vim大行其道是因为很多时候图形界面环境是多余的。但是一般情况下,gvim明显更好用,同样的配置,gvim下效果更好。我觉得用gvim更能提高我的效率,这个理由就够了。
三、基本操作
//xk> 帮助文档第一 :help :help command //xk> 模式切换 // normal mode Esc Ctrl-c 退回到normal mode。应该尽量保持处于normal mode下以便于快捷键操作 // insert mode i 在当前光标所在位置前插入输入的文本 I 在当前光标所在行的所有非空白字符前插入文本 a 在当前光标所在位置后插入文本 A 在当前光标所在行的所有非空白字符后插入文本 o 在当前光标所在位置的下一行新增一行并进入insert mode O 在当前光标所在位置的上一行新增一行并进入insert mode // visual mode v V Ctrl-v // replace mode r R // command mode : 进入command mode,用户可以输入复杂的command实现强大的功能 //xk> 光标移动 h j k l 向左/下/上/右移动一格。不能跨行 w b 移动到下/上一个word(英文word是靠分隔符来界定的)。能跨行 :行号 跳转到指定的行 ^ 行首 $ 行尾 gg 文件首 G 文件尾 [[ 上一个位于第一列的{ ]] 下一个位于第一列的} { 上一个空行 } 下一个空行 Ctrl-f 下翻页 Ctrl-b 上翻页 //xk> 查找 /key 从当前光标位置开始向后查找key ?key 从当前光标位置开始向前查找key n N 查找到key后,n跳到下一个位置,N跳到上一个位置 * 类似于/key,只不过自动取光标当前所在的词为key。并且是完全匹配key,不会匹配包含key的词 # 类似于*,不过是反向匹配 //xk> 替换 :[range]s[ubstitute]/{pattern}/{string}/[flags][count] 上面是Vim帮助文档中替换的完整命令:对[range]指定的行把{pattern}的匹配替换成{string}。如果不指定[range]则从当前行开始。 例如:%s/xk/XK/gc %表示整个文本范围,s是命令substitute的缩写,把xk替换成XK,注意{pattern}和{string}都类似正则表达式处理,如果有特殊字符的话要用\转义。选项g表示globle,如果没有该选项,vim默认每行仅替换第一个匹配的(vim的正则表达式以行为单位)。选项c表示确认,即每次替换前vim会询问是否对该匹配进行替换。 再例如:20,100s/xk/X\&K/g 20,100指定了范围是从20行到100行,&是特殊符号需要转义。 //xk> 复制、粘贴、删除 dd 删除行 //xk> 文件操作 :w 保存 :q 退出 :e 文件名 载入指定文件进行编辑 :tabnew 文件名 用新的标签页打开指定文件 可以组合使用:wq,同时打开多个文件时可以在后面加a表示对所有文件执行该操作,如:wa, :qa, :wqa //xk> 撤销和重做 u U Ctrl-r redo上一次撤销的操作 //xk> 执行shell命令 :!command 注意与强制执行命令的区别,强制执行一个命令是在command之后加感叹号。 |
四、Script
安装vim后第一件事就是配置脚本。vim安装目录下有放脚本、插件、配色方案等文件的地方。不过在Linux环境下,用户专用的配置脚本是~/.vimrc (windows稍有不同,是_VIMRC文件,并且可以用 :e $VIMRC命令打开),同时可以建目录~/.vim放自己的插件和配色方案等等。下面是我的.vimrc,记之备忘:
" vim脚本中注释以双引号开头。脚本中不要随便加空格,特别是=和,后面,否则报错提示指定值是未知项
" 文件保存的编码
set fenc=utf8
" 打开文件使依次猜测文件编码
set fencs=utf8,gb18030,gb2312,gbk,big5,cp936
" 选择配色方案
color koehler
" 打开语法高亮是编程好习惯
sy on
" 显示行号
set nu
" 判断文件类型载入不同的缩进规则
filetype indent on
set autoindent
" 使用空格代替tab来进行缩进
set expandtab
" 一个tab代表8个空格。啊!Python为什么和Linux标准不一样
set tabstop=8
" tab在文件显示时宽度为8个字符
set shiftwidth=8
" 以下是按键映射
""""""""""""""""""""""""""""""""""""""""""""""""""
" 用<F1>表示F1键,用<esc>表示escape键
五、插件
(1) ctags
ctags原本是Unix带的一个应用工具,只支持C语言,vim一般用exuberant-ctags
$ sudo apt-get install exuberant-ctags
$ ctags -R
该命令为所在目录及其子目录中的文件建立tag,并在当前目录下生成一个tags文件。在linux kernel源码根目录下这样建立的tags文件能达到50M左右大小。
默认情况下,vim会在< :pwd >命令显示的目录即vim工作的当前目录(不一定是编辑的文件所在目录)下找tags文件。也可以用" :set tags=pathname "命令来向vim指定tags文件所在路径
在vim中,< Ctrl + ] >命令能跳到光标所在标识符的定义处,<Ctrl + o >能跳回来。如果有多个匹配,用" :tnext "或" :tn "能跳到下一个定义处,用" :tp "能跳到前一个定义处。
$ vim -t tagname
该命令用vim打开tagname的定义所在文件,并且光标定位到定义所在行。这对于在一个大工程中查找一个定义是有用的。如果是在vim内,可以用
:ta tagname
来实现这样的功能。