话说每次接手新的服务器, 服务器上的VIM配置都是原生的, 每次修改VIM配置都需要重新Google一番, 甚是麻烦。有时候用到一些不常用的VIM命令, 都已经忘了, 都需要搜索资料, 影响工作效率啊。现在自己开通了博客, 就把Linux下的VIM配置相关资料整理下方便以后使用, 没事了自己也可以看看温习一番。
yum -y install vim-enhanced #centos
set nocompatible        "去掉讨厌的有关vi一致性模式,避免以前版本的一些bug和局限"
syntax on               "语法高亮"
set nummber             "显示行号"
filetype on             "检测文件类型"
set history=1000        "记录历史的行数"
set tabstop=4           "设置(软)制表符宽度为4"
set softtabstop=4       "设置(软)制表符宽度为4"
set shiftwidth=4        "设置缩进的空格数为4"
set cindent             "设置使用 C/C++ 语言的自动缩进方式"
set autoindent          "vim使用自动对起,也就是把当前行的对起格式应用到下一行"
set smartindent         "依据上面的对起格式,智能的选择对起方式,对于类似C语言编写上很有用"
set hlsearch            "高亮查找匹配"
set showmatch           "显示匹配"
set ruler               "右下角显示光标位置"
#如下设置,可以用空格键直接控制折叠
set foldenable 
set foldmethod=marker
##################基础##########################################
:e filename       "打开新文件"
:w                "保存文件"
:q                "退出VIM"
:q!               "不保存退出VIM"
:x                "保存并退出"
:sav filename     "文件另存为"
:1,10 w outfile   "将1-10行写入文件"
:1,10 w >> outfile"将1-10行最近到文件"
:r infile         "在当前光标所在行下插入文件infile的内容"
:23r infile       "在23行下插入文件infile的内容"
.                 "重复一次最近一次的VIM命令操作"
5.                "重复5次最近一次的VIM命令操作"
u                 "撤销操作"
Ctrl+r            "重做"
##################在文件中移动###################################
k                 "上移一个字符, 相当于方向键上"
j                 "下移一个字符, 相当于方向键下"
h                 "左移一个字符, 相当于方向键左"
l                 "右移一个字符, 相当于方向键右, 这个命令很少用, 一般用w代替"
#以上四个命令可以配合数字使用,比如20j就是向下移动20行,5h就是向左移动5个字符#
e                 "移动光标到当前光标所在单词结尾"
E                 "跳到下一个字尾, 长跳"
b                 "移动光标到当前光标所在单词开头"
B                 "跳到上一个字开头, 长跳"
^                 "跳至行首的第一个字符"
$                 "跳至行尾"
G                 "移动光标到文件末尾"
gg                "移动光标到文件开头"
:num              "移动光标到第num行开头"
num|              "移动光标到当前行的num列"
%                 "移动光标到与当前符号(小括号、中括号、大括号)匹配的符号上, 如果当前光标在'('上,它就向前跳转到与它匹配的')'上,如果当前在')'上,它就向后自动跳转到匹配的'('上去."
[[                "移动到当前光标所在函数的开头"
]]                "移动到当前光标所在位置下一个函数的开头"
[{                "移动到当前光标所在区块的开头"
}]                "移动到当前光标所在区块的结尾"
##################视窗的移动#####################################
Ctrl+f            "视窗往下卷一页"
Ctrl+b            "视窗往上卷一页"
Ctrl+d            "视窗往下卷半页"
Ctrl+u            "视窗往上卷半页"
Ctrl+e            "视窗往下卷一行"
Ctrl+y            "视窗往上卷一行"
L                 "移动光标到当前视窗口结尾"
##################插入模式#######################################
i                 "从当前光标处进入插入模式"
I                 "进入插入模式, 并置光标于行首"
a                 "追加模式, 置光标于当前光标之后"
A                 "追加模式, 置光标于行末"
o                 "在当前行之下新加一行, 并进入插入模式"
O                 "在当前行之上新加一行,并进入插入模式"
##################可视模式#######################################
v                 "进入可视模式, 单字符模式"
V                 "进入可视模式, 行模式"
ctrl+v            "进入可视模式, 列模式, 类似于UE的列模式"
o                 "跳转光标到选中块的另一个端点"
U                 "将选中块中的内容转成大写"
O                 "跳转光标到块的另一个端点"
aw                "选中一个字"
ab                "选中括号中的所有内容,包括括号本身"
aB                "选中{}括号中的所有内容"
ib                "选中括号中的内容,不含括号"
iB                "选中{}中的内容,不含{}"
>                 "块右移"
<                 "块左移"
y                 "复制块"
d                 "删除块"
~                 "切换块中内容的大小写"
##################剪切复制和粘贴#######################################
x                 "删除字符"
s                 "删除字符并进入插入模式"
J                 "删除换行符"
y                 "复制选中的内容"
p                 "粘贴剪切板中的内容到光标所在位置之后"
dd                "删除当前行"
yy                "复制当前行"
y$                "复制到行尾"
D                 "删除到行尾, 相当于D$"
c                 "改变命令。它的行为与"d"命令类似,不过在命令执行后会进入Insert模式。比如"cw"改变一个word。或者,更准确地说,它删除一个word并让你置身于Insert模式。
  "cc"命令可以改变整行。不过仍保持原来的缩进。
  "c$"改变当前光标到行尾的内容。
  快捷命令:x 代表dl(删除当前光标下的字符)
            X 代表dh(删除当前光标左边的字符)
            D 代表d$(删除到行尾的内容)
            C 代表c$(修改到行尾的内容)
            s 代表cl(修改一个字符)
            S 代表cc(修改一整行)
  命令"3dw"和"d3w"都是删除3个word。第一个命令"3dw"可以看作是删除一个word的操作执行3次;第二个命令"d3w"是一次删除3个word。这是其中不明显的差异。事实上你可以在两处都放上命令记数,比如,"3d2w"是删除两个word,重复执行3次,总共是6个word。
  dj 删除上一行
  dk 删除下一行
  10d 删除当前行开始的10行。
  kdgg 删除当前行之前所有行(不包括当前行)
  jdG(jd shift + g)   删除当前行之后所有行(不包括当前行)
  :1,10d 删除1-10行
  :11,$d 删除11行及以后所有的行
  :1,$d 删除所有行
  J(shift + j)  删除两行之间的空行,实际上是合并两行。
##################搜索###########################################
/word          "从头到尾搜索文字word"
?word          "从下往上搜索文字word"
*              "搜索当前光标所在位置的单词"
/\cstring      "搜索STRING或者string及搜索不区分大小写"
/jo[ha]n       "搜索john或joan, 即正则匹配"
/\< the        "搜索以the开头的单词"
/the\>         "搜索以the结尾的单词"
/\< the\>      "搜索 the 单词"
^\n\{3}        "查找3行空行"
:bufdo /searchstr/ "在所有打开的文件中搜索"
:bufdo %s/something/replace/g "在所有打开的文件中搜索something并用replace替换"
##################替换###########################################
:%s/old/new/g          "把所有的old替换为new"
:%s/sch/rep/gi         "把所有的sch替换为rep, 不区分大小写"
:%s/old/new/gc         "把所有的old替换为new, 替换前提示确认"
:2,35s/old/new/g       "在2-35行把所有的old替换为new"
:5,$s/old/new/g        "从第5行替换old到new
:%s/^/hello/g           Replace the begining of each line by hello
:%s/$/Harry/g           Replace the end of each line by Harry
:%s/onward/forward/gi   Replace onward by forward, case unsensitive
:%s/ *$//g          Delete all white spaces
:g/string/d         Delete all lines containing string
:v/string/d         Delete all lines containing which didn’t contain string
:s/Bill/Steve/          Replace the first occurence of Bill by Steve in current line
:s/Bill/Steve/g         Replace Bill by Steve in current line
:%s/Bill/Steve/g    Replace Bill by Steve in all the file
:%s/^M//g           Delete DOS carriage returns (^M)
:%s/\r/\r/g         Transform DOS carriage returns in returns
:%s#<[^>]\+>##g         Delete HTML tags but keeps text
:%s/^\(.*\)\n\1$/\1/    Delete lines which appears twice
Ctrl+a                  Increment number under the cursor
Ctrl+x                  Decrement number under cursor
##################分屏###########################################
:split filename       "分屏(横屏)打开文件
:sview file           "分屏(横屏)只读模式打开文件
:vsplit file          "分屏(竖屏)打开文件
ctrl-w                "将光标放在下一个窗口中"
:hide                 "关闭当前光标所在位置的窗口"
:nly                  "关闭除当前窗口外的所有窗口"
##################对齐缩进###########################################
:%!fmt         "对齐所有行"
5!!fmt         "对齐接下来的5行"
!}fmt          "Align all lines at the current position"
>>             "缩进"
<<             "撤销缩进"
ctrl-t         "在插入模式下缩进"
ctrl-d         "在插入模式下撤销缩进"
##################文件浏览器###########################################
:e .           "打开文件树"
:Sex           "分屏(竖屏)方式打开文件树"
:Sex!          "分屏(横屏)方式打开文件树"
:ls            "列出缓冲内容"
:cd ..         "进入上一级目录"
最后来一发中文版VIM键位图
[caption id="attachment_175" align="alignnone" width="300"] VIM键位图中文banb[/caption]
 VIM键位图中文banb[/caption]