vim使用笔记

一、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

来实现这样的功能。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值