Vim常用操作
reg: 查看粘贴板里的内容
“Np:粘贴第N个粘贴板里的内容
.:重复上次操作
:nohl:取消高亮(查找后关键词高亮)。
选择
v:按字符选择。
V:按行选择。
ctl+v:按块选择。
gv:重复上次选择。
>or<:选择后向右or 左移动一个tab。
替换
参数:
/g:对所有匹配字符进行替换(global)。
/i:不区分大小写。
/c:替换前询问(confirm)。
指定范围:
以下命令将文中所有的字符串idiots替换成managers:
:1,$s/idiots/manages/g
通常我们会在命令中使用%指代整个文件做为替换范围:
:%s/search/replace/g
以下命令指定只在第5至第15行间进行替换:
:5,15s/dog/cat/g
以下命令指定只在当前行至文件结尾间进行替换:
:.,$s/dog/cat/g
以下命令指定只在后续9行内进行替换:
:.,.+8s/dog/cat/g
你还可以将特定字符做为替换范围。比如,将SQL语句从FROM至分号部分中的所有等号(=)替换为不等号(<>):
:/FROM/,/;/s/=/<>/g
.:当前行。
在可视化模式下,首先选择替换范围, 然后输入:
进入命令模式,就可以利用s
命令在选中的范围内进行文本替换。
精确替换:在搜索sig时,也将匹配sig, signature, signing等多个单词。如果希望精确替换某个单词,可以使用“\<”来匹配单词的开头,并用“\>”来匹配单词的结尾:
:s/\<term\>/replace/gc
多项替换:如果想要将单词Kang和Kodos都替换为alien,那么可以使用|
进行多项替换。
:%s/Kang\|Kodos/alien/gc
折叠
当我们查看很长的文本时(比如程序代码),可以使用:set foldenable
命令来启动折叠。首先将内容按照其结构折叠起来,查看文件的大纲,然后再针对待定的行展开折叠,显示文本的详细内容。
Vim将折叠等同于行来对待——你可以使用j或k命令,移动跳过包含多行的整个折叠;也可以使用y或d命令,复制或删除某个折叠。
通常在折叠处向左或向右移动光标,或者进入插入模式,都将会自动打开折叠。我们也可以使用以下命令定义快捷键,使用空格键关闭当前打开的折叠,或者打开当前关闭的折叠。
:nnoremap <space> za
按照折叠所依据的规则,可以分为Manual(手工折叠)、Indent(缩进折叠)、Marker(标记折叠)和Syntax(语法折叠)等几种。
Manual Fold
使用以下命令,启用手工折叠。
:set foldmethod=manual
在可视化模式下,使用以下命令,将折叠选中的文本:
zf
通过组合使用移动命令,可以折叠指定的行。例如:使用zf70j
命令,将折叠光标之后的70行;使用5zF
命令,将当前行及随后4行折叠起来;使用zf7G
命令,将当前行至全文第7行折叠起来。
我们也可以使用以下命令,折叠括号(比如()、[]、{}、><等)包围的区域:
zfa(
Vim并不会自动记忆手工折叠。但你可以使用以下命令,来保存当前的折叠状态:
:mkview
在下次打开文档时,使用以下命令,来载入记忆的折叠信息:
:loadview
可以使用以下命令,查看关于手工折叠的帮助信息:
:help fold-manual
Indent Fold
使用以下命令,启用缩进折叠。所有文本将按照(选项shiftwidth 定义的)缩进层次自动折叠。
:set foldmethod=indent
使用zm
命令,可以手动折叠缩进;而利用zr
命令,则可以打开折叠的缩进。
使用以下命令,将可以根据指定的级别折叠缩进:
:set foldlevel=1
可以使用以下命令,查看关于缩进折叠的帮助信息:
:help fold-indent
Syntax Fold
使用以下命令,启用语法折叠。所有文本将按照语法结构自动折叠。
:set foldmethod=syntax
可以使用以下命令,查看关于语法折叠的帮助信息:
:help fold-syntax
Marker Fold
使用以下命令,启用标记折叠。所有文本将按照特定标记(默认为{{{和}}})自动折叠。
:set foldmethod=marker
我们可以利用标记折叠,在文本中同时体现结构和内容,并且能够快速跳转到文件的不同部分。
可以使用以下命令,查看关于标记折叠的帮助信息:
:help fold-marker
折叠选项
使用:set foldcolumn=W
命令(W是一个0-12的整数),将在屏幕左侧显示一个折叠标识列,分别用“-”和“+”而表示打开和关闭的折叠。
使用以下命令,可以查看关于折叠的帮助信息:
:help folding
zc |
关闭当前打开的折叠 |
zo |
打开当前的折叠 |
zm |
关闭所有折叠 |
zM |
关闭所有折叠及其嵌套的折叠 |
zr |
打开所有折叠 |
zR |
打开所有折叠及其嵌套的折叠 |
zd |
删除当前折叠 |
zE |
删除所有折叠 |
zj |
移动至下一个折叠 |
zk |
移动至上一个折叠 |
zn |
禁用折叠 |
zN |
启用折叠 |
Diff:
vim -d file1 file2
:diffsplit |
分隔窗并比较文件 |
:diffthis |
比较文件 |
:diffupdate |
更新比较结果 |
zo |
展开 |
zc |
折叠 |
[c |
跳转到前一个不同点 |
]c |
跳转到后一个不同点 |
快速选择、复制、粘贴、删除
以下命令可以对标点内的内容进行操作。
ci'、ci"、ci(、ci[、ci{、ci< - 分别更改这些配对标点符号中的文本内容
di'、di"、di(或dib、di[、di{或diB、di< - 分别删除这些配对标点符号中的文本内容
yi'、yi"、yi(、yi[、yi{、yi< - 分别复制这些配对标点符号中的文本内容
vi'、vi"、vi(、vi[、vi{、vi< - 分别选中这些配对标点符号中的文本内容
如果把上面的i改成a可以连配对标点一起操作。
跳转:
正常模式
跳到头
[[
跳到尾
][
跳到下一个函数
]]
调到上一个函数
[]
调到上一层大括号
[{
" syntax on
set number
set showmatch
set cindent
set sw=4
set ts=4
set ls=2
set expandtab
set background=dark
" set ai
set ic
set smartcase
set incsearch
set wrap
set textwidth=80
" set nowrapscan
highlight Normal ctermfg=white ctermbg=black
set nocp
filetype plugin on
" filetype on
let Tlist_Ctags_Cmd='/usr/bin/ctags'
let Tlist_Use_Right_Window = 1
map <F2> :TlistToggle <CR>
" configure tags - add additional tags here or comment out not-used ones
set tags+=/h/work/hechao/p4/tachyon-RDI-10/tags
" set tags+=/n/filer3b/home/dev/hechao/.vim/tags
" build tags of your own project with Ctrl-F12
map :!ctags -R --sort=yes --c++-kinds=+pl --fields=+iaS --extra=+q .