文章出处:http://blog.csdn.net/shift_wwx
fx:移动光标到当前行的下一个 x 处。很明显,x 可以是任意一个字母,而且你可以使用来重复你的上一个 f 命令。
tx:和上面的命令类似,但是是移动到 x 的左边一个位置。
Fx:和 fx 类似,不过是往回找。
w:光标往后移动一个词。
W:光标向后移动一个词,忽略标点
b:光标往前移动一个词。
B:光标往前移动一个词,忽略标点
0:移动光标到当前行首。
^:移动光标到当前行的第一个字母位置。
$:移动光标到行尾。
):移动光标到下一个完整句子。
(:移动光标到上一个完整句子。
{:移动光标到上一个完整段落
}:移动光标到下一个完整段落
G:到文件尾
numG:移动光标到指定的行(num)。(比如 10G 就是到第 10 行)
gg:到文件首
H:移动光标到屏幕上面
M:移动光标到屏幕中间
L:移动光标到屏幕下面
*:读取光标处的字符串,并且移动光标到它再次出现的地方。
#:和上面的类似,但是是往反方向寻找。
/text:从当前光标处开始搜索字符串 text,并且到达 text 出现的地方。必须使用回车来开始这个搜索命令。如果想重复上次的搜索的话,按 n。
?text:和上面类似,但是是反方向。
ma:在当前光标的位置标记一个书签,名字为 a。书签名只能是小写字母。你看不见书签的存在,但它确实已经在那里了。
`a:到书签 a 处。注意这个不是单引号,它一般位于大部分键盘的 1 的左边。
`.:到你上次编辑文件的地方。这个命令很有用,而且你不用自己去标记它。
VIM 有一个非常漂亮的关键词自动完成系统,只要输入关键词的前几个字符,就可以自动补齐。
i:在当前字符的左边插入
I:在当前行首插入
a:在当前字符的右边插入
A:在当前行尾插入
o:在当前行下面插入一个新行
O:在当前行上面插入一个新行
c{motion}:删除 motion 命令跨过的字符,并且进入插入模式
比如:c$,这将会删除从光标位置到行尾的字符并且进入插入模式
ct!,这会删除从光标位置到下一个叹号(但不包括),然后进入插入模式。被删除的字符被存在了剪贴板里面,并且可以再粘贴出来。
d{motion}:和上面差不多,但是不进入插入模式。
d{motion}:剪切 motion 命令跨过的字符到剪贴板。比如,dw 会剪切一个词而 dfS 会将从当前光标到下一个 S 之间的字符剪切至剪贴板。
y{motion}:和上面类似,不过是拷贝。
c{motion}:和 d{motion} 类似,不过最后进入插入模式。
dd:剪切当前行。
yy:拷贝当前行。
cc:剪切当前行并且进入插入模式。
D:剪切从光标位置到行尾到剪贴板。
Y:拷贝当前行。
C:和 D 类似,最后进入插入模式。
x:剪切当前字符到剪贴板。
s:和x类似,不过最后进入插入模式。
这些很好记忆,d、c都是剪切,y是复制,c是可以进入插入模式。x、s应该用的比较少。
p:粘贴
u:撤销之前的修改
还有跟剪切、复制配合使用的一个特别好用的技巧,那就是选择,不再需要鼠标去选中了。
v{motion}:按字符选择,例如,vl,就是向右选择字符;vj就是向下选择;vww,就是选择两个字符串
V{motion}:按行选择,一般配合上下,例如Vj 、Vk
选择好了之后,剪切就按d,复制就按y,如果想进入插入模式就按c
重复上一次编辑命令。
如果删除一个符号,例如dl,再想继续删除的话,是继续dl吗?有个神奇的符号 . (小数点),可以代替做重复的命令。
数字配合命令的使用,会经常用到,而且很快捷。
例如:
4w:移动到第4个词
4l:移动到第4个字符
4G:移动到第4行
4dd:剪切4行
4yy:复制4行
4x:剪切4个字符
4s:剪切4个字符,并插入
命令掌握ok了,加上数字会很快捷。
/xxx:表示在整篇文档中搜索匹配xxx的字符串, / 表示向下查找。其中xxx可以是正规表达式,关于正规式就不多说了。一般来说是区分大小写的,要想不区分大小写, 那得先输入:set ignorecase。
?xxx:向上查找
n:搜索后查找下一个匹配的字符串
N:向上搜索匹配的字符串
*:搜索下一个跟光标处匹配的单词,以后通过n、N来继续找
#:跟 * 相反
g*:跟 * 差不多,只不过是搜索的是包含光标处单词
g#:同上
gd:同上,只不过光标会到第一个匹配的单词
%:匹配括号
格式:
:[g]/search_string/s//replace_string/[g][c]
第一个g是全文搜索,第二个g是匹配行中所有匹配点,没有这个g就指第一次匹配点,c表示在替换之前需要用户确认
:s/aa/bb/g 将光标所在行出现的所有包含 aa 的字符串中的 aa 替换为 bb
:s/aa/bb/ 将光标所在行第一次出现aa的字符串中的aa替换为bb
:n,$s/aa/bb/g 将从n行到最后一行的包含aa的字符串中aa替换为bb
:%s/aa/bb/g 将全文中所有行出现包含aa的字符串中aa替换为bb
:%s/aa/bb/ 将全文中所有行第一次出现包含aa的字符串中aa替换为bb
:n1,n2s/aa/bb/g 将从n1到n2行出现的所有aa替换成bb
:n1,n2s/^/#/ 将从n1行到n2行,所有行的开头加上 # 号
还有个特殊字符:^M
由于windows和linux系统使用的行终止符号不同,对于linux系统而言,取自Dos或windows系统文本文件会包含多余的回车字符,需要去掉,用命令:
:1,$s/^M//
注意在linux下^M不是简单的^和M,而是要ctrl+v 和 ctrl+M才能组成的特殊字符
其他的替换可以参考一下http://blog.163.com/ccbobo_cat/blog/static/3209946220090851034518/
在一个 vim 程序中打开很多文件进行编辑是挺方便的.
:sp(:vsp) 文件名 vim 将分割出一个横(纵)向窗口, 并在该窗口中打开新文件.
从 vim6.0 开始, 文件名可以是一个目录的名称, 这样, vim 会
把该目录打开并显示文件列表, 在文件名上按回车则在本窗口打
开该文件, 若输入 O 则在新窗口中打开该文件, 输入 ? 可以看到帮助信息.
:e 文件名 vim 将在原窗口中打开新的文件, 若旧文件编辑过, 会要求保存。
ctrl-w-w vim 分割了好几个窗口怎么办? 输入此命令可以将光标循环定位到各个窗口之中。
或者ctrl+w+h:切左边窗口
ctrl+w+l:切右边窗口
ctrl+w+上方向键:切上边窗口
ctrl+w+下方向键:切下边窗口
:ls 此命令查看本 vim 程序已经打开了多少个文件, 在屏幕的最下方
会显示出如下数据:
1 %a "usevim.html" 行 162
2 # "xxxxxx.html" 行 0
其中:
1 表示打开的文件序号, 这个序号很有用处.
%a 表示文件代号, % 表示当前编辑的文件,
# 表示上次编辑的文件
"usevim.html" 表示文件名.
行 162 表示光标位置.
:b 序号(代号) 此命令将指定序号(代号)的文件在本窗口打开, 其中的序号(代号)
就是用 :ls 命令看到的.
:set diff 此命令用于比较两个文件, 可以用
:vsp filename命令打开另一个文件, 然后在每个文件窗口中输入此命令,就能看到效果了。
将下面的环境直接copy到/etc/vimrc.local 里面
" 设定默认解码
set fenc=utf-8
set fencs=utf-8,usc-bom,euc-jp,gb18030,gbk,gb2312,cp936
" 不要使用vi的键盘模式,而是vim自己的
set nocompatible
" history文件中需要记录的行数
set history=100
" 在处理未保存或只读文件的时候,弹出确认
set confirm
" 与windows共享剪贴板
set clipboard+=unnamed
" 侦测文件类型
filetype on
" 载入文件类型插件
filetype plugin on
" 为特定文件类型载入相关缩进文件
filetype indent on
" 保存全局变量
set viminfo+=!
" 带有如下符号的单词不要被换行分割
set iskeyword+=_,$,@,%,#,-
" 语法高亮
syntax on
" 高亮字符,让其不受100列限制
":highlight OverLength ctermbg=red ctermfg=white guibg=red guifg=white
":match OverLength '\%101v.*'
" 状态行颜色
"highlight StatusLine guifg=SlateBlue guibg=Yellow
"highlight StatusLineNC guifg=Gray guibg=White
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" 文件设置
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" 不要备份文件(根据自己需要取舍)
set nobackup
" 不要生成swap文件,当buffer被丢弃的时候隐藏它
setlocal noswapfile
set bufhidden=hide
" 字符间插入的像素行数目
set linespace=0
" 增强模式中的命令行自动完成操作
set wildmenu
" 在状态行上显示光标所在位置的行号和列号
" set ruler
" set rulerformat=%20(%2*%<%f%=\ %m%r\ %3l\ %c\ %p%%%)
" 使回格键(backspace)正常处理indent, eol, start等
set backspace=2
" 允许backspace和光标键跨越行边界
set whichwrap+=<,>,h,l
" 可以在buffer的任何地方使用鼠标(类似office中在工作区双击鼠标定位)
"set mouse=a
"set selection=exclusive
"set selectmode=mouse,key
" 启动的时候不显示那个援助索马里儿童的提示
set shortmess=atI
" 通过使用: commands命令,告诉我们文件的哪一行被改变过
set report=0
" 不让vim发出讨厌的滴滴声
set noerrorbells
" 在被分割的窗口间显示空白,便于阅读
set fillchars=vert:\ ,stl:\ ,stlnc:\
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" 搜索和匹配
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" 高亮显示匹配的括号
set showmatch
" 匹配括号高亮的时间(单位是十分之一秒)
set matchtime=5
" 在搜索的时候忽略大小写
set ignorecase
" 不要高亮被搜索的句子(phrases)
set hlsearch
" 在搜索时,输入的词句的逐字符高亮(类似firefox的搜索)
set incsearch
" 禁止在搜索到文件两端重新搜索
set nowrapscan
" 输入:set list命令是应该显示些啥?
set listchars=tab:\|\ ,trail:.,extends:>,precedes:<,eol:$
" 光标移动到buffer的顶部和底部时保持3行距离
set scrolloff=3
" 不要闪烁
set novisualbell
" 我的状态行显示的内容(包括文件类型和解码)
set statusline=%F%m%r%h%w\[POS=%l,%v][%p%%]\%{strftime(\"%d/%m/%y\ -\ %H:%M\")}
" 总是显示状态行
set laststatus=2
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" 文本格式和排版
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" 自动格式化
set formatoptions=tcrqn
" 显示行号
set number
" 突出显示行
set cursorline
" 显示right margin
set colorcolumn=100
" 继承前一行的缩进方式,特别适用于多行注释
set autoindent
" 为C程序提供自动缩进
set smartindent
" 使用C样式的缩进
set cindent
" 制表符为4
set tabstop=4
" 统一缩进为4
set softtabstop=4
set shiftwidth=4
" 用空格代替制表符
set expandtab
" 不要用空格代替制表符
" set noexpandtab
" 不要换行
"set nowrap
" 在行和段开始处使用制表符
set smarttab
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" CTags的设定
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" 按照名称排序
let Tlist_Sort_Type = "name"
" 在右侧显示窗口
let Tlist_Use_Right_Window = 1
" 压缩方式
let Tlist_Compart_Format = 1
" 如果只有一个buffer,kill窗口也kill掉buffer
let Tlist_Exist_OnlyWindow = 1
" 不要关闭其他文件的tags
let Tlist_File_Fold_Auto_Close = 0
" 不要显示折叠树
let Tlist_Enable_Fold_Column = 0
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Autocommands
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" 只在下列文件类型被侦测到的时候显示行号,普通文本文件不显示
" 能够漂亮地显示.NFO文件
set encoding=utf-8
function! SetFileEncodings(encodings)
let b:myfileencodingsbak=&fileencodings
let & fileencodings=a:encodings
endfunction
function! RestoreFileEncodings()
let & fileencodings=b:myfileencodingsbak
unlet b:myfileencodingsbak
endfunction
au BufReadPre *.nfo call SetFileEncodings('cp437')|set ambiwidth=single au BufReadPost *.nfo call RestoreFileEncodings()
" 高亮显示普通txt文件(需要txt.vim脚本)
au BufRead,BufNewFile * setfiletype txt
u:撤销之前的修改
:f 或 CTRL+G :查看当前打开文件的详细路径和文件名