http://blog.163.com/xychenbaihu@yeah/blog/static/1322296552010111293855626/
跳到开始结尾处
gg:将光标移动到文件的开始位置。
G: 将光标移动到文件的最后一行。
用行号+G可定位到指定的行上,g/要找的词,可显示所有含有要找的词的行号和内容。
跳到某一行
1、对当前行做标记,例如ma,即标记当前行为a行,mb,即标记当前行为b行,mc等等。
要回到a行使用'a。要回到b行使用'b。
2、在命令行中输入:number+enter就可以将光标移动到指定的行
跳到变量函数定义处
gd:变量函数定义处
跳到头文件
gf:跳到头文件定义处 ctl + ^ 返回
源码对齐
gg + = +G
//先gg跳转到文件开始位置,再输入=,再输入G,vim将自动进行C和C++源码的对齐操作。
自动补全
在linux下编写c语言程序,命名规范要求变量名,函数名是用“_”将单词分隔开的。
比如:
int value_name = 5;
采用这种方法的好处在于vim进行匹配时,比较方便。
在vim中使用ctrl+n 或 ctrl+p进行匹配。
当输入value_使用ctrl+n或者ctrl+p能够将后面的部分自动匹配。
以实验一下,那种方式更适合我们。
vim复制:
复制字符串:
ctrl+v配合“上下左右”键,选中字符串,使用y进行复制。
复制n个单词:
y+number+w
复制一行:
yy
复制n行:
nyy
复制一块:
ctrl+v 配合“上下左右”键,选中指定块,使用y进行复制(有一定的局限性,复制的宽度受任意一行宽度的影响,准确的的说复制的是块,是一个矩形)。
不知复制多少行:
shift + v 配合“上下”键,使用y可以复制多行
vim粘贴:
在vim中使用p 或 P进行粘贴。
命令行模式下粘贴
按下ctrl+r,命令行上会出现一个冒号",此时输入对应的寄存器就行了。
删除/移动/复制
命令模式,无:输入。dd为删除光标行,d+数字 回车删除当前行开始的数字+1行。
在:输入d数字,则为删除当前行开始的数字行。
:m数字,把当前行移动到数字行处,只一行。
:co数字,把当前行COPY到数字行之后,数字可以用+来表示位移几行。比如:co+2就是把当前行COPY到当前行号+2行后。
:行号1,行号2 co行号3 ,把行号1到行号2之间的内容复制到行号3后面,co换成m就是移动多行。
如果不是整行的比如把第5行的某个字符后到10行某个字符前的内复制到12行某个字符前,可以这样做:
1, 光标移到第5行的你想复制的那个字符前。
2, 按下 v.
3, 按向下键(或J)到了第10行时, 按向左键,移到你想复制的字符后。然后按下 y
4, 最后移光标到第12行的某个字符前按下p
vim删除:
字符及字符串的删除:
删除一个字符,使用x。
删除多个字符,使用ctrl+v进入可视模式,然后移动键盘上的“上下左右”键,将要删除的字符串选中,然后使用d就删除了。
行及多行,块的删除:
删除一行,使用dd;
删除n行,使用ndd;
删除不知道多少行,首先使用ctrl+v进入可视模式,然后移动键盘上的“上下左右”键,将要删除的行选中,然后使用d就删除了。
vim撤销:
vim中的撤销有两种,一种是向左撤销,一种是向右撤销。比如我们刚删除了一行,想将其回复,使用u就可以,恢复后又想删除,使用ctrl+r就可以。
另外一半符号匹配
在vim中使用%可以匹配另外一半符号出现的位置。
当我们将光标放在第一个大括号哪里,想找到另外一个与之匹配的大括号时,使用%。就可以了。
多标签
标签页操作
建立多标签页:tab split
标签页切换gt
新建标签:tabnew
多窗口-屏幕分割
备注:^W为在一般模式下直接按 ctr + w,不用输“:”
水平切割^Ws
垂直切割^Wv
关闭当前窗口^Wc
窗口切换
切换到左窗口^Wh
切换到右窗口^Wl
切换到上窗口^Wk
切换到下窗口^Wj
(使用^w + 方向键也行的)
窗口移动
当前窗口左移^WH
当前窗口右移^WL
当前窗口上移^WK
当前窗口下移^WJ
窗口大小
最大高度^W_
最小高度^W1_
最大宽度^W|
最小宽度^W1|
屏幕切割
水平切割:
:split
:split xxx(要打开的文件名)
:new(在新窗口创建文件)
<CTRL+W> k:跳转到上面的窗口 (若为大写K,则是把当前窗口调至上方)
<CTRL+W> j:跳转到下面的窗口 (类似于上)
垂直切割:
:vsplit
:vsplit xxx(要打开的文件名)
:vnew(在新窗口创建文件)
:only 取消分屏
<CTRL+W> h:跳转到左边的窗口 (若为大写H,则是把当前窗口调至左方)
<CTRL+W> l:跳转到右边的窗口 (类似于上)
<CTRL+W> w:在窗口之间跳转
<CTRL+W> +:扩大窗口 (或在当前窗口位置,输入命令:res +9)
<CTRL+W> -:缩小窗口
在一个窗口下,打开3个文件。
先 打开一个,vim 文件名 (记住一定是vim啊!)
然后在vi的命令输入状态下输入
:sp 另外一个文件的路径及文件名
如此就可以在一个窗口打开3个文件了。
可以使用 ctrl + 两次按 w
在3个文件中切换
常见模式
普通模式
在普通模式中,用户可以执行一般的编辑器命令,比如移动光标,删除文本等等。这也是Vim启动后的默认模式。这正好和许多新用户期待的操作方式相反(大多数编辑器默认模式为插入模式)。
插入模式
在这个模式中,大多数按键都会向文本缓冲中插入文本。大多数新用户希望文本编辑器编辑过程中一直保持这个模式。
在插入模式中,可以按ESC键回到普通模式。
可视模式
这个模式与普通模式比较相似。但是移动命令会扩大高亮的文本区域。高亮区域可以是字符、行或者是一块文本。当执行一个非移动命令时,命令会被执行到这块高亮的区域上。Vim的"文本对象"也能和移动命令一样用在这个模式中。
命令行模式
在命令行模式中可以输入会被解释成并执行的文本。例如执行命令(":"键),搜索("/"和"?"键)或者过滤命令("!"键)。在命令执行之后,Vim返回到命令行模式之前的模式,通常是普通模式。
进入插入模式
i insert,光标前插入
I 行首插入
a append,光标后插入
A 行末插入
o 当前行下面添加新空白行
O 当前行上面添加新空白行
移动光标
k
h l
j
Backspace Space 左/右移一格
b w 左/右移一字
e 移动到字尾
0 $ 行首/尾
Return 下一行行首
选中文本
在正常模式下(按ESC进入)按键v进入可视化模式,然后按键盘左右键或h,l键即可实现文本的选择。
其它相关命令:
v:按字符选择。经常使用的模式,所以亲自尝试一下它。
V:按行选择。这在你想拷贝或者移动很多行的文本的时候特别有用。
CTRL+v:按块选择。非常强大,只在很少的编辑器中才有这样的功能。你可以选择一个矩形块,并且在这个矩形里面的文本会被高亮。
vim查找:
a、查找第几行,在命令行中输入:number+enter就可以将光标移动到指定的行。
b、查找某个字符串,在命令行中输入:/string,光标就移动到第一个出现string的行,当输入n,光标将移动到下一处出现string的行,再输入n,将继续向下找,当找到最后一个string所出现的行,再输出n时,就回到第一次出现string的行。
(/string查找指定字符串,n从开始向结束,即向下。N从结束向开始,即向上)
当在命令行输入:/string时,光标将移动到最后一个出现string的行,当输入N,光标将移动到最后一次出现string的行,继续输入N,将继续向上一次出现string的行移动。
字符替换
如果要将vim里的一个a字符改成c ——讲光标移到a处,然后按r放开后再按c。
交换位置
交换两个相邻字母的位置:按x然后按p (剪切再粘贴)
查找替换
下面转自:http://www.nonozone.net/vim-model-commonly-used-in-the-replacement-summary.html
1,简单替换表达式
替换命令可以在全文中用一个单词替换另一个单词:
:%s/four/4/g
“%” 范围前缀表示在所有行中执行替换。最后的 “g” 标记表示替换行中的所有匹配点。如果仅仅对当前行进行操作,那么只要去掉%即可
如果你有一个象 “thirtyfour” 这样的单词,上面的命令会出错。这种情况下,这个单词会被替换成”thirty4″。要解决这个问题,用 “<” 来指定匹配单词开头:
:%s/<four/4/g
显然,这样在处理 “fourty” 的时候还是会出错。用 “>” 来解决这个问题:
:%s/<four>/4/g
如果你在编码,你可能只想替换注释中的 “four”,而保留代码中的。由于这很难指定,可以在替换命令中加一个 “c” 标记,这样,Vim 会在每次替换前提示你:
:%s/<four>/4/gc
2,删除多余的空格
要删除这些每行后面多余的空格,可以执行如下命令:
:%s/s+$//
命令前面指明范围是 “%”,所以这会作用于整个文件。”substitute” 命令的匹配模式是
“s+$”。这表示行末($)前的一个或者多个(+)空格(s)。替换命令的 “to” 部分是空的:”//”。这样就会删除那些匹配的空白字符。
3,匹配重复性模式
星号项 “*” 规定在它前面的项可以重复任意次。因此:
/a*
匹配 “a”,”aa”,”aaa”,等等。但也匹配 “” (空字串),因为零次也包含在内。星号 “*” 仅仅应用于那个紧邻在它前面的项。因此 “ab*” 匹配 “a”,”ab”,”abb”,”abbb”,等等。如要多次重复整个字符串,那么该字符串必须被组成一个项。组成一项的方法就是在它前面加 “(”,后面加 “)”。因此这个命令:
/(ab)*
匹配: “ab”,”abab”,”ababab”,等等。而且也匹配 “”。
要避免匹配空字串,使用 “+”。这表示前面一项可以被匹配一次或多次。
/ab+
匹配 “ab”,”abb”,”abbb”,等等。它不匹配 后面没有跟随 “b” 的 “a”。
要匹配一个可选项,用 “=”。 例如:
/folders=
匹配 “folder” 和 “folders”。
4,指定重复次数
要匹配某一项的特定次数重复,使用 “{n,m}” 这样的形式。其中 “n” 和 “m” 都是数字。在它前面的那个项将被重复 “n” 到 “m” 次 (|inclusive| 包含 “n” 和 “m”)。例如:
/ab{3,5}
匹配 “abbb”,”abbbb” 以及 “abbbbb”。
当 “n” 省略时,被默认为零。当 “m” 省略时,被默认为无限大。当 “,m” 省略时,就表示重复正好 “n” 次。例如:
模式 匹配次数
{,4} 0,1,2,3 或 4
{3,} 3,4,5,等等
{0,1} 0 或 1,同 =
{0,} 0 或 更多,同 *
{1,} 1 或 更多,同 +
{3} 3
5,多选一匹配
在一个查找模式中,”或” 运算符是 “|”。例如:
/foo|bar
这个命令匹配了 “foo” 或 “bar”。更多的抉择可以连在后面:
/one|two|three
匹配 “one”,”two” 或 “three”。
如要匹配其多次重复,那么整个抉择结构须置于 “(” 和 “)” 之间:
/(foo|bar)+
这个命令匹配 “foo”,”foobar”,”foofoo”,”barfoobar”,等等。
再举个例子:
/end(if|while|for)
这个命令匹配 “endif”,”endwhile” 和 “endfor”。
6,指定单位替换
:行号1,行号2s/替换前/替换后/g,替换指定行号1和行号2之间的内容。
如果替换时需确认那么在g后加个c参数。这样每一个替换前都需要确认
命令组合
目前用vim感觉到最爽的地方,特别是t/f,如从光标开始向后删除到字符'}' -> dt},从光标开始向前删除到字符'{' -> dt{
http://blog.csdn.net/iamduoluo/article/details/7430637
安装vim包:
sudo apt-get install vim
普通用户到超级用户的切换:
sudo su
退出超级用户:
ctrl+d 或者exit
vim有三种常用模式:普通模式(默认)、编辑模式、命令行模式。
普通模式到编辑模式:i 退回普通模式:esc按键(escape)
普通模式到命令行模式用:(冒号) 退回普通模式:esc按键(escape)
:w ——内存中的东西写入到磁盘。相当于保存
:q ——退出编辑器vim
:wq ——保存,退出
vim的基本操作
dd ——删除一行
cc ——修改一行
d 2 w ——从光标所在处开始,删除两个单词
dG ——从光标所在处,一直删除到结尾
u ——撤销(undo)
:h ——vimhelp
:bd ——bufferdelete:删除缓冲区,关闭帮助内容
:h bd ——查看关于bd的解释文档 bdhelp
在help文档里面,当光标移动到链接(如tutor)的地点时,用ctrl+右方括号 打开链接;用ctrl+o关闭链接。
vimtutor ——bash命令,vim教程
粘贴和复制:
shift+v ——选中光标所在行
按j、k选中多行
d ——剪切
y ——(yank)复制,原来的文本保留
p ——(past)粘贴
在一个文件里打开两个文件:
:vnew ——竖着打开两个文件
:new ——横着打开两个文件
:bd ——光标光标所在的文件
ctrl+ww ——光标在窗口间切换
关闭vim的快捷键:shift+zz 相当于:wq!
在vim中用 / woed ——查找
n ——查找下一处
N ——查找上一处
:3 ——跳转到第三行
u ——撤销undo
ctrl+r ——返回 redo
vim的配置操作:
set nu ——显示行号
set nonu ——取消显示行号
set ai ——自动缩进(auto indent)
set noai ——取消自动缩进
map <tab>:bn<cr> ——按下tab执行:bd的功能:影像
这些设置都可以写到一个配置文件里,成为默认的规则。在/home/shsf/.vimrc 里面进行配置。在.vimrc(隐藏文件)里面双引号表示注释
关于:bn ——已经用vim打开了文件a。命令行里面输入:e (编辑)或者:o(打开)另一个文件。这样用:bn切换缓冲去。用来在两个文件的切换显示。:bd只关闭当前缓冲区而:wq是关闭vim。
vim的插入模式的快捷键
ctrl+n ——联想补齐一个单词(这个单词在本文件中已经出现过)
ctrl+x+l ——行补齐,输入行首字母可以补齐一行
ctrl+x+k ——字典功能,输入单词的前几个字母,显示字典里的相关单词
字典需要的.vimrc配置内容:
set dictionary+=~/.vim/dict/simple
set dictionary -=/usr/share/dict/words dictionary +=/usr/share/dict/word
后两个功能的实现需要一些插件。还有象taglist (象目录一下的显示在一旁)、snipmate(用简单的几个字母显示一个小的片段,比如输入fun按下tab后就显示处函数的结构)
怎样得到插件?
git clonegit://github.com/happypeter/peter-vim.git 得到所需的插件
然后把peter-vim改名为.vim(隐藏文件)并移动到自己的HOME即/home/shsf/下
(读里面的readme文件)
vim的录音
在normal mode下输入一个q在输入任何一个字母就进入recording列入按下qq后面的q表示记录区。之后对vim的操作都被记录下来包括进入insert mode 。退回到normal mode以后按q退出recording。还在normalmode下按@+q播放处理。就是把以上做的重复做一遍。
vimdiff a b ——用vim以字母为单位显示文件a和文件b的不同(bash命令)
:diffsave ——在vim中查看文件的更改内容,高亮显示缓冲区里跟硬盘文件的不同(同一个文件而言的)
jj as esc ——用map完成配置。这样方便vim操作。
locate filename ——定位文件,显示文件的绝对路径。
vim常用快捷键
2、vim中“上下左右”移动光标:
h 将光标向左移动。
j 将光标向下移动。
k 将光标向上移动。
l 将光标向右移动。
normal mode |
|
移动光标 |
h j k l |
ctrl+f |
forward 向前翻页 |
ctrl+b |
backward 向后翻页 |
ctrl+u |
up 向上移动半屏 |
ctrl+d |
down 向下移动半屏 |
0 |
the first number 移动到行首字符 |
$ |
移动到行尾字符 |
shift+h |
head 移动光标第一行 |
shift+m |
middle 移动到中间行 |
shift+l |
low 移动到最下一行 |
gg |
到首行 |
G |
最后一行 |
5<cr> |
到第5行 |
/word |
查找word |
n |
向下再查找word |
N |
向上再查找word |
x X |
x 后前删除(del);X向前删除(backspace) |
dd |
删除一行 |
5dd |
删除光标开始向下的5行 |
d1G |
删除光标以前的 |
dG |
删除光标以后的 |
yy |
复制(参考删除) |
nyy |
|
y1G |
|
yG |
|
p P |
p向下粘贴;P向上粘贴 |
u |
undo |
ctrl+r |
redo |
. |
小数点:重复上一步操作 |
shift+v |
行选 |
ctrl+v |
块选 |
insert mode |
|
ctrl+n |
单词补齐(以前出现过) |
ctrl+x+l |
行补齐 |
ctrl+x+k |
字典功能(用ctrl+n/p换词) |
commend mode |
|
:set nu |
number |
:set nonu |
no number |
:set ai |
auto indent |
:set noai |
no autoindent |
shift+zz |
:wq! |
:100,200/a/b/g |
100到200行间的a换成b |
:1,$s/a/b/g |
全换 |
:1,$s/a/b/gc |
全换有提示等用户确认 |
多窗口 |
|
:sp |
不加文件名再代开已打开的文件,也可以加文件名,用:q关 |
ctrl+ww |
光标窗口切换 |
:vnew (filename) |
竖着再代开一个新窗口,用:bd关 |
:e或:o |
打开一个文件覆盖原先的,用:bd关,:bn切换 |
注释
注释一行 ——ctrl+c
注释一块:块选然后 ctrl+c
函数体折叠
把光标移动到函数开始的 { 处, 然后(normal mode)输入zf%——创建函数折叠;
在已经折叠的加号位置输入 zc ——打开折叠的函数。
当要把打开的函数再折叠就输入 zx ——关闭(第二次折叠)
shift+v块选以后,输入 zf ——实现块折叠。
缩进对齐
块选 输入 > :缩进
块选 输入 < :缩进返回
在insert mode下对齐函数语句:
ctrl+t 往右移动对齐
ctrl+d 往左移动对齐