1 gg 文件的首行, G 文件的尾行
2 vim的自动补全功能
一般使用Ctrl+n就能自动补全了,从Vim7后,C/C++的函数、变量或是类的成员,使用Ctrl+x,Ctrl+o也能自动补全。
如果不全的可能项有多个,可多次按ctrl + n 选择你想要的不全项。
3 split(水平分栏) vsplit(垂直分栏)
#split . 将当前目录(这里的当前目录不是pwd的结果,就是当前vim中打开的目录)
#split 这样是将当前目录(当前目录是pwd的结果)或是当前打开的文件分栏
4 ctrl + w 从一栏跳到另外一栏
5 e 后面接目录参数,退出到该指定目录
e + 目录(这里是目录哦,不能是文件,e + 文件 是没有什么作用的) 表示退出到指定目录
e . 退出到当前目录,这里的当前目录.即pwd的结果。如果要退到指定目录可用: e 指定目录,如:e ./src/scxsystemlib ---退到scxsystemlib目录
6 nyy 复制n行 yy复制一行 p 粘贴.y 复制高亮选中的文本到剪切板.
7 ndd 删除n行 dd 删除一行.db删除某个单词.
1.复制粘贴的基本命令:
yy复制游标所在行整行。或大写一个Y。
2. yy或y2y复制两行。
y^复制至行首,或y0。不含游标所在处字元。
y$复制至行尾。含游标所在处字元。
yw复制一个word。
y2w复制两个字(单词)。
yG复制至档尾。
y1G复制至档首。
p小写p代表贴至游标后(下)。
P大写P代表贴至游标前(上)。
8 默认情况下SSH Secure Shell Client不支持vim语法高亮,解决办法:
1. SSH Secure Shell Client上选择 Enable ANSI colors选项
2. 在/etc/profile里加上export TERM=dtterm
3. 在当前用户HOME目录生成.exrc文件,在文件中加入syntax enable命令,并保存。
这样当前用户在任意目录打开vim命令就会有语法高亮了,哈哈。
9 0 光标到行首,$光标到行尾
10 w 下个单词,b前面一个单词
11 /查找时,n下个,shift+n 向相反方向查找同上一次的字符
12 f(ile),显示当前文件名
13 cd 指定当前路径,默认pwd得到的是 vim . 打开时的文件路径
14
在当前用户HOME目录生成.exrc文件 中加入如下命令:
set tabstop=4 ----设置制表符宽度
set softtabstop=4 ----设置软制表符宽度
set shiftwidth=4 ----设置缩进的空格数为4
set autoindent ----设置自动缩进:开启新行时,新行的上一行缩进空格为多少,则新航缩进距离也为多少。使用 noautoindent 取消设置
set cindent ----设置使用 C/C++ 语言的自动缩进方式
set expandtab ----将所有的tab替换为tabstop指定数目的空格 (命令可简写为 set et)
15
如果设置了set cindent,打开c/c++风格的自动缩进后,在编码的时候可以选中一段代码,按"="将这段代码按照c/c++风格重新调整缩进,美化代码。但是,打开了自动缩进后, 在使用 TERM 下的 vim 的时, 粘贴代码时常常会出现版式混乱的现象。那是因为 TERM 并不知道现在正在粘贴代码, 它直接“粘贴”动作向 vim解释为键入, 因此 vim 便按照设置的自动缩进格式为的代码调整了缩进。
不幸的是, 粘贴进去的代码中本身已经包含了缩进, 因此便出现了版式混乱的情况。
在 gvim 中就不会出现这个问题, 因为它能够知道现在正在粘贴。
知道了这个症状的来由, 解决方案也就显而易见了: 在粘贴的时候把所有自动缩进都关闭,
粘贴完毕之后再打开。 一个个手工关闭自动缩进未免过于繁琐, vim 为提供了一个很好用的命令,只要输入“:set paste”, 就可以关闭所有自动缩进。 粘贴完毕后再输入“:set nopaste"就可以重新打开原有的自动缩进设置了。
-----实际使用情况是,不用set cindent 也可以用=号来自动排版,很奇怪?
16 set number(set nu);set nonumber(set nonu)
17 排版代码
可以用 "v" 高亮选中一段代码,然后再用"="号自动排版。
如果是正个文件,可以用gg=G来排版,或是gg v G =来排版,效果一样.
18 在可视化选择模式进行剪切、复制和粘贴
ctrl+v 只能选中一个矩形的代码,矩形的大小是根据矩形范围内最后一行的宽度来决定的;
小写的v,是根据手工选中的范围高亮,可以选中一行的部分;
大写的V,是整行选中。
在可视化选中模式下进行剪切和复制
一旦你有了高亮选择, 你可能想要干点啥. 以下是对选中的高亮文本最有用的命令:
d 剪切(删除)高亮选中的文本到剪切板. (译注: 据本人所知, vim所有的删除其实都是剪切)
y 复制 (或者说"拽"(yank), vim用"拽"来表示复制...)高亮选中的文本到剪切板.
c 剪切高亮选中的文本到剪切板. 和d很相似, 只是c会进入插入模式.
shift+v 可视化行
ctrl+v 可视化块
19 匹配括号
% 把光标放在某个花括号{}, 中括号[]或者圆括号()上, 按%会把光标移动到与之对应的花括号, 中括号或者圆括号上. 对于修正多层嵌套逻辑代码块的括号解析问题来说, 这个功能堪称救人于水火之中.
20 超级移动(motion)
fx
在当前行向前移动光标到下一个字符x (很明显, x可以是任意你想要移动到的字符). 这是一个超级有用的命令. 你可以输入;来重复前一个f命令.
tx
和上面的命令基本相同, 除了移动光标到字符x之前而不是x字符本身,唯一区别就是每次匹配到x之前的字符后再找下一个匹配时,你必须把光标移动到这个匹配字符的后面,不然老是找到当前的这个匹配字符不往下一个找(有点傻)。 (这个真的很有用)
Fx
在当前行向后移动光标到上一个字符x.
21 当前页的移动
<C-F> 将光标向前(下)移动一页(屏幕).
<C-B> 将光标向后(上)移动一页.
G 移动到文件尾
numG 将光标移动到某一行. (例如, 10G是把光标移动到第10行.)
gg 将光标移动到文件开头
H 将光标移动到当前页的第一行.
M 将光标移动到当前页的中间一行.
L 将光标移动到当前页的最后一行. (译注: 有了H,M,L 这3个命令, 可以把鼠标撇了, 爽)
22 字符串的移动
* 读取光标下的字串, 然后移动到当前文件中下一次出现该字串的位置. (比如说如果你的光标所在的位置的字串为"bob,", 按了*之后, 光标将移动文件中下一个"bob"出现的位置.)
# 和*命令作用相同, 只不过方向与*刚好相反,是移动到该字符串上一次出现的位置.
* 或 #用来向后或向前查找当前光标所在单词
22.1 v i w三个字母组合键为选中当前光标所在的单词
23 标签的使用
ma 给当前光标所在位置设置一个名字为a的书签. 书签的名字可以是任何小写字母. 你看不到书签, 但它确实在.
`a 移动光标到书签a. 注意`不是单引号, 大部分键盘上它在数字1的左面. (译注: 本人使用的vim 7.1 windows版本用单引号也能完成同样功能)
`. 移动到你之前最后一次编辑过的行. 这个又是"真有用". 如果你需要在文件中"滚来滚去"查看一些东西, 你可以用这个命令回到你之前编辑的行尽管你没把它设成书
24 在非可视化选择模式进行剪切、复制和粘贴
如果你确知你想要复制或者剪切什么, 你可以不进入可视化选择模式就完成这些操作. 这样速度更快.
d{motion} 把由motion"掠过"的文本剪切到剪切板. 比如dw把当前光标开始的一个词剪切到剪切板, 而dfS把从当前行从光标是到下一个S之间的文本剪切到剪切板.
y{motion} 把motion"掠过"的文本复制到剪切板.
c{motion} 把motion"掠过"的文本剪切到剪切板并且进入插入模式.
dd 剪切当前行到剪切板.
yy 复制当前行到剪切板.
cc 剪切当前行到剪切板并且进入插入模式.
D 剪切光标当前位置到行尾的文本到剪切板.
Y 复制整行到剪切板, 和yy相似. (yes, 这个命令和命令D的操作方式没保持一致, 你可以用y$完成类似D的操作)
C 剪切光标当前位置到行尾的文本到剪切板并进入插入模式.
x 剪切当前字符. (类似于命令模式的退格(backspace)键)
s 剪切当前字符并进入插入模式.
粘贴
粘贴很简单. 把光标移动到你想要粘贴的位置输入p. (译注: 粘贴操作需要在命令模式下, 另外P(大写)命令把剪切板的内容粘贴到光标当前位置之前, 对用惯其它编辑器的人来说, P命令可能更符合习惯)
25 vim 的挂起和返回
ctrl-z 退出vim返回到shell,然后在unix中敲入命令fg回车又可以回到之前中断的vim session.
fg:foreground
bg:background
26 lcd 更改当前窗口的当前目录,即pwd的值
如:
lcd ~/cmCode/Unix/Shared/XPlatCommon/src ---将当前窗口进入的目录~/cmCode/Unix/Shared/XPlatCommon/src设置为此窗口的pwd目录.
这样一来用e .命令时就会退出到~/cmCode/Unix/Shared/XPlatCommon/src这个目录,很有用的方法哦^_^
lcd 与 e . 结合起来使用。用分割窗口时,lcd只是修改了当前窗口的当前目录,别的分割窗口时没影响的。
~/cmCode/Unix/Shared/XPlatCommon/src这个path可以通过命令file来查看。
27 滚屏命令
CTRL+U 将屏幕向前(文件头方向)翻滚半屏;提示:u表示 up;
CTRL+D 将屏幕向后(文件尾方向)翻滚半屏。提示:d表示 down;
可以在这两个命令之前加上一个数字n,则屏幕向前或向后翻滚n行。并且这个值被系统记住,以后再用CTRL+U 和CTRL+D 命令滚屏时,还滚相应的行数。
CTRL+F 将屏幕向文件尾方向翻滚一整屏(即一页);提示:f表示 forward;
CTRL+B 将屏幕向文件首方向翻滚一整屏(即一页)。提示:b表示 backward;
同样也可以在这两个命令之前加上一个数字n,则屏幕向前或向后移动n页;
CTRL+E 将屏幕向上滚动一行;
CTRL+Y 将屏幕向下滚动一行。
28 移动到行首或行尾
“$”命令把光标移动到当前行行尾。如果你的键盘上有<End>键,也可以完成相同的功能。
“^”命令把光标移动到当前行的第一个非空字符,
“0”命令则移到一行的第一个位置, <Home>键也可以完成相同的功能。
“$”命令接受个数前缀。1$表示:移动到当前行的行尾;2$表示:移动到下一行的行尾;如此类推。
"0”和“^”不接受个数前缀。
29 移动到特定的行
“G” 命令把光标移动到文末;
“gg”命令把光标移动到文首;
“nG”命令把光标移动到第n行的第一个空白字符上,可用“:set number<Enter>”来显示行号,用“:set nonumber<Enter>”来关闭显示;
“n%" 命令以百分数来移动光标;
“H” 命令把光标移动到屏幕的第一行;
“M” 命令把光标移动到屏幕的中间行;
“L” 命令把光标移动到屏幕的最后一行;
提示:“H”表示“Home”,“M”表示“Middle”而“L”表示“Last”。
30 在代码间移动
“[]” 向上跳转到一个函数的结尾,“][”向下移动到一个函数的结尾;
“[[” 向上跳转到函数的开始,“]]”向下跳到结尾处;
注意:这四个命令要求“{”“}”符号在第一列;
“[{” 跳转到当前代码块{}的开始处,“[}”跳转到当前代码块{}的结尾处;
“]{”“]}”“[(”“[)”“](”“])”“[/”“]/”也有类似功能,只是匹配的是“()”“/*”
“[I” 命令查找光标下的标识符,不仅在当前文件内查找,还会在所有的包含文件中查找;
“[<Tab>” 跳到第一项,<Tab> 可以是<CTRL+I>;
“n[<Tab>” 跳到第n项;
“]I” 只列出光标下面的项目
“[D” 只查找 "#define" 定义的宏,
“]D” 只列出光标下面的项目
“gD” 只在当前文件中查找,并跳转到被首次使用的地方;
“gd” 只在当前函数内查找,注意,函数的开始符号“{”要求在第一列;
31 输入 d$ 从当前光标删除到行末。**
32 第二讲第三节∶关于命令和对象
删除命令 d 的格式如下∶
[number] d object 或者 d [number] object
其意如下∶
number - 代表执行命令的次数(可选项,缺省设置为 1 )。
d - 代表删除。
object - 代表命令所要操作的对象(下面有相关介绍)。
一个简短的对象列表∶
w - 从当前光标当前位置直到单字/单词末尾,包括空格。
e - 从当前光标当前位置直到单字/单词末尾,但是 *不* 包括空格。
$ - 从当前光标当前位置直到当前行末。
特别提示∶
对于勇于探索者,请在正常模式下面仅按代表相应对象的键而不使用命令,则
将看到光标的移动正如上面的对象列表所代表的一样。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
第二讲第四节∶对象命令的特殊情况
** 输入 dd 可以删除整一个当前行。 **
鉴于整行删除的高频度,VIM 的设计者决定要简化整行删除,仅需要在同一行上
击打两次 d 就可以删除掉光标所在的整行了。
1. 请将光标移动到本节中下面的短句段落中的第二行。
2. 输入 dd 删除该行。
3. 然后移动到第四行。
4. 接着输入 2dd (还记得前面讲过的 number-command-object 吗?) 删除两行。
1) Roses are red,
2) Mud is fun,
3) Violets are blue,
4) I have a car,
5) Clocks tell time,
6) Sugar is sweet
7) And so are you.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
第二讲第五节∶撤消类命令
** 输入 u 来撤消最后执行的命令,输入 U 来修正整行。**
1. 请将光标移动到本节中下面标记有 ---> 的那一行,并将其置于第一个错误
处。
2. 输入 x 删除第一个不想保留的字母。
3. 然后输入 u 撤消最后执行的(一次)命令。
4. 这次要使用 x 修正本行的所有错误。
5. 现在输入一个大写的 U ,恢复到该行的原始状态。
6. 接着多次输入 u 以撤消 U 以及更前的命令。
7. 然后多次输入 CTRL-R (先按下 CTRL 键不放开,接着输入 R 键) ,这样就
可以执行恢复命令,也就是撤消掉撤消命令。
---> Fiix the errors oon thhis line and reeplace them witth undo.
这些都是非常有用的命令。下面是第二讲的小结了。
.~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
在 VIM 内执行外部命令的方法
** 输入 :! 然后紧随著输入一个外部命令可以执行该外部命令。**
1. 按下我们所熟悉的 : 命令设置光标到屏幕底部。这样就可以让您输入命令了。
2. 接着输入感叹号 ! 这个字符,这样就允许您执行外部的 shell 命令了。
3. 我们以 ls 命令为例。输入 !ls <回车> 。该命令就会列举出您当前目录的
内容,就如同您在命令行提示符下输入 ls 命令的结果一样。如果 !ls 没起
作用,您可以试试 :!dir 看看。
1 合并行
shift + J ----将当前行的下一行append到当前行的尾部
2 一列的删除和插入
删除列 1.光标定位到要操作的地方. 2.CTRL v 进入“可视 块”模式,选取这一列操作多少行. 3.d 删除.
插入列 插入操作的话知识稍有区别.例如我们在每一行前都插入"() ": 1.光标定位到要操作的地方. 2.CTRL v 进入“可视 块”模式,选取这一列操作多少行. 3.SHIFT i(I) 输入要插入的内容. 4.ESC 按两次,会在每行的选定的区域出现插入的内容. 这样以后就方便多了.
Vim 代码折叠使用大全
写C,(C++)CPP代码时,自动折叠能带来很多好处,强大的Vim提供了快捷方式。如下:
1. 折叠方式
可用选项 'foldmethod' 来设定折叠方式:set fdm=*****。
有 6 种方法来选定折叠:
manual 手工定义折叠
indent 更多的缩进表示更高级别的折叠
expr 用表达式来定义折叠
syntax 用语法高亮来定义折叠
diff 对没有更改的文本进行折叠
marker 对文中的标志折叠
注意,每一种折叠方式不兼容,如不能即用expr又用marker方式,我主要轮流使用indent和marker方式进行折叠。
使用时,用:set fdm=marker 命令来设置成marker折叠方式(fdm是foldmethod的缩写)。
要使每次打开vim时折叠都生效,则在.vimrc文件中添加设置,如添加:set fdm=syntax,就像添加其它的初始化设置一样。
2. 折叠命令
选取了折叠方式后,我们就可以对某些代码实施我们需要的折叠了,由于我使用indent和marker稍微多一些,故以它们的使用为例:
如果使用了indent方式,vim会自动的对大括号的中间部分进行折叠,我们可以直接使用这些现成的折叠成果。
在可折叠处(大括号中间):
zc 折叠
zC 对所在范围内所有嵌套的折叠点进行折叠
zo 展开折叠
zO 对所在范围内所有嵌套的折叠点展开
[z 到当前打开的折叠的开始处。
]z 到当前打开的折叠的末尾处。
zj 向下移动。到达下一个折叠的开始处。关闭的折叠也被计入。
zk 向上移动到前一折叠的结束处。关闭的折叠也被计入。
当使用marker方式时,需要用标计来标识代码的折叠,系统默认是{{{和}}},最好不要改动之:)
我们可以使用下面的命令来创建和删除折叠:
zf 创建折叠,比如在marker方式下:
zf56G,创建从当前行起到56行的代码折叠;
10zf或10zf+或zf10↓,创建从当前行起到后10行的代码折叠。
10zf-或zf10↑,创建从当前行起到之前10行的代码折叠。
在括号处zf%,创建从当前行起到对应的匹配的括号上去((),{},[],<>等)。
zd 删除 (delete) 在光标下的折叠。仅当 'foldmethod' 设为 "manual" 或 "marker" 时有效。
zD 循环删除 (Delete) 光标下的折叠,即嵌套删除折叠。
仅当 'foldmethod' 设为 "manual" 或 "marker" 时有效。
zE 除去 (Eliminate) 窗口里“所有”的折叠。
仅当 'foldmethod' 设为 "manual" 或 "marker" 时有效。
VIM中常用的替换模式总结:
1,简单替换表达式
:%s/four/4/g
“%”范围前缀表示在所有行中执行替换。最后的 “g” 标记表示替换行中的所有匹配点。如果仅仅对当前行进行操作,那么只要去掉%即可
用 “\<” 来指定匹配单词开头:
:%s/\<four/4/g
显然,这样在处理 “fourty”的时候还是会出错。用 “\>” 来解决这个问题:
:%s/\<four\>/4/g
如果你在编码,你可能只想替换注释中的“four”,而保留代码中的。由于这很难指定,可以在替换命令中加一个“c” 标记,这样,Vim会在每次替换前提示你:
:%s/\<four\>/4/gc
2,删除多余的空格
要删除这些每行后面多余的空格,可以执行如下命令:
:%s/\s\+$//
“\s\+$”表示行末($)前的一个或者多个(\+)空格(\s)。替换命令的“to” 部分是空的:”//”。这样就会删除那些匹配的空白字符。