vim命令行参数说明vim
vim -C cmd file 打开文件前执行指定的命令函数
vim -r file 恢复文件字体
vim -R file 只读方式打开,但能够强制保存编码
vim -M file 只读方式打开,不能够强制保存加密
vim + file 打开文件定位到文件末尾spa
vim +num file 打开指定的行插件
vim +/string file 打开文件,跳转到指定的字符命令行
命令模式下的经常使用命令设计
:w 保存文件orm
;wq 保存并退出, 在normal模式下使用 ZZ 也能够
:o file 打开文件
:n1,n2w file 保存从n1到n2的行为另外一个新文件
:x 保存退出 在normal模式下使用ZZ也能够
:q 退出,使用 :q! 强制退出
:saveas file 另存为一个新文件
:e 从新载人文件
:e! 从新载入文件,并丢弃已经作的修改
:f 显示文件的编辑状态
:vs 竖直分割
:sp 水平分割
:pwd 显示vim的工做目录
:cd path 改变vim的工做目录,可使用tab进行补全,方便的切换目录
:set autochdir 让vim根据打开的文件自动切换工做目录,通常写到配置文件里
normal模式下的经常使用命令
[n]G 跳转到第[n]行
H / M / L 跳转光标到当前屏幕(屏幕的内容是不动)的 开头/中间/结尾
K man 光标所在的单词,好比一个函数
gd 跳转到局部变量定义的地方
gD 跳转到全局变量的定义的地方
g; 跳转到上一次修改的地方
g, 跳转到下一个修改过的地方
% 匹配() {} [] 进行跳转
ctrl + f 下向滚动一屏
ctrl + b 向上滚动一屏
ctrl + d 向下滚动半屏
ctrl + u 向上滚动半屏
ctrl + e 向下滚动一行
ctrl + y 向上滚动一行
ctrl + g 显示文件的编辑状态
ctrl + w 进入分割窗口控制功能, 在这个前提下,可使用以下
命令组合
w 切换下一个窗口
- 当前窗口增高一行
- 当前窗口减小一行
[n] _ 当前窗口尽量的大,也可使用n指定行数, 也可使用 :reesize n 指定当前窗口的行高
= 全部的窗口使用一样的高度
n ctrl+w _ 指定当前窗口使用n行
< 当前窗口减小一列 ,
n ctrl+w < 或者 ctrl+w [n] < 能够一次移动n列.
| 当前窗口尽量的宽,
n ctrl+w | 或者 ctrl+w [n] | 能够设定当前窗口使用n列
ctrl + 0 显示字体的大小设置为初始大小
n% 移动到n%的位置,注意没有:
zz 或者 z + . 把光标所在的行移动的屏幕中间
zt 或者 z + enter 把光标所在的行移动到屏幕开始
zb 或者 z + - 把光标所在的行移动到屏幕末尾
替换<esc>
使用vim的时候<ESC>这个键用于从任何模式,回到normal模式,有人曾经开玩笑说我要去买一个<ESC>脚踏板,可见 <ESC>这个键在vim中使用频率是多麽的高,并且,还那麽远,很是不方便,你没有想过,设计vim的人是否是脑子有坑呢,反正我想过^-^,直到看到一本叫 <<The Hard Way to Learn VimScript>> 的书才发现,是我脑子有坑.早点看这书就行了.也许凡人们 都喜欢犯的错误就是这样,没有深入的认识一个事物的时候,就慌忙下结论.怨天尤人,可神会一直对咱们微笑.直到咱们让阳光 照进内心,才抬头看到神灿烂的微笑.
使用命令
:inoremap {多个任意字母} <esc>
执行后, 快速输入 {多个任意字母} 就会退出到normal模式, 快速的意思是在一个光标闪烁以内,这也太简单了,若是 就着吗简单,那为啥不早点让我发现写到配置文件里啊,其实这是最麻烦的
不使用<ESC>退出到normal模式的方式(默认)
Ctrl + c
Ctrl + [
有关退出到normal模式的高级技巧
使用ALT + {命令组合} , 这个执行之后,至关于在normal模式下使用了命令组合,执行后的状态取决于命令是什麽,好比
在插入模式下输入了 ALT + j 那麽效果就是, 往下移动了一行,并进入了normal模式,
在插入模式下输入了 ALT + O 哪买就是,在当前行上一行插入一行,并因为O的原始做用是插入进入insert模式,因此 执行后,效果就是在上一行插入了一行,而且停留在插入模式
快速选择
想复制的东西,既不是一行,也不是一个单词,复制单词可使用 yw ,就得手动选择了,使用v ,按hjkl进行移动,而后y,相似命令以下:
v 普通选择
shift + v 按行选择
ctrl + v 块选择
gv 从新选中上次的选择,能够做为标记用.
在shift +v 进入选择一行后的快捷键
首先声明这些都是用来选择的,要求就是先把光标移动的想要选择的行,而后按下shift+v而后在按下下面的快捷键才起效
iw 选择光标所在的单词,别的不在选择了,对应须要复制函数名称的时候
i( 或者 i) 选择在一行以内的()内的内容, 不包括() 必须在一行之内要不找不到,光标必须在()内部
a( 或者 a) 选择在一行以内的()内的内容, 包括() 必须在一行之内要不找不到,光标必须在()内部
i{ 或者 i} 选择在{}内的内容, 不包括{} 只选择最近匹配的 { } 执行一会一下选择了多行
a{ 或者 a} 选择在{}内的内容, 包括{} 只选择最近匹配的 { } 执行之后一下选择了多行
i< 或者 i> 选择<>之间的内容,不包括<>
a< 或者 a> 选择<>之间的内容,包括<>
相似的还有 i[ ( i] ) 和 a[ ( a] )
is 光标在一个函数的声明出,按下后会选择这个函数声明体和函数上方的相邻注释,若是在函数定义的地方, 则选择函数开头的部分.
ib 和 i( 差很少,只是可查选择多行之间匹配的()以内的内容, 不包括 (),适用于参数写在多行的状况
ab 和 i( 差很少,只是可查选择多行之间匹配的()以内的内容, 包括 (),适用于参数写在多行的状况
tips 利用这些方便的选择技巧,就能够方便的进行函数头和函数复制了,没必要再来来回回去找匹配了.
查看变量或者函数的声明和定义
[i 须要把光标移动到将要查看的函数或者变量的位置,只是查看声明,并不进行光标的跳转,这个很是有用,你也想在写函数的时候能看到声明的函数参数类型的吧.声明会在下方显示
[ ctrl+i 这个就会跳转到函数的定义地方了,和 ctrl + ] 差很少了
[ ctrl+d 这个会调整到对应的宏定义处
不使用ctags,cscope的时候,默认的跳转命令
把光标移动到对应文件的字符上面,而后按 gf 便可,在新 的窗口打开可使用 ctrl+w f ,在新的tab中打开使用 ctrl+w gf
使用 set suffixesadd+={.hpp} 能够设定在include的时候不加扩展名的状况,suffixesadd表示默认加上的扩展名
使用 set path 查看搜索头文件的目录有哪些 , 分割的,使用 set path+={目录} 进行增长
[[ 上一个函数的开头(须要首行的{), 说这个和语言扩展有关,
若是把{写到了末尾就直接到文件头了,之后在研究如何改吧).
]] 下一个函数的开始,说明同上
{{ 上一个块(空行隔开的)
}} 下一个块(空行隔开的)
[] 上一个函数的结尾
][ 下一个函数的结尾
[( 当前区块的 ( 处
]) 当前区块的 ) 处
同理 [{ ]} 用于{} 嵌套的状况,好比n层的if . [/ ]/ 用于调整到注释的/* */ [# ]# 用于#if和#else #endif 之间的跳转
整理一下以下:
第一个键表示方向,第二个键表示功能,
[ 表示向前跳转, ] 表示向后跳转
第二个是功能
在.vimrc 文件中设定 iskeyword 好比,比较烦人的一个地方是c语言的 Struct.Member 若是使用 w * # ] 功能时,没法区分 单词Member,按照Struct.Member是一个单词进行搜索,在.vimrc文件中添加:
set iskeyword += ,$,@,%,#,.,-
一行,这样,就能够了,使用逗号分割每个字符,结尾不能有, .
vim中a到Z是复制缓冲区,能够吧文本占时复制到缓冲区中,使用“ayy 把内容复制到a中,使用”ap 把a缓冲区中的内容取出来,要点就是使用”加在缓冲区名字的前面
主要是寄存器操做,简直神器,
首先,说用寄存器的命令要知道,C-R (ctrl+r)
好比说用a寄存器,就要说按Ctrl+r a 这样子.
0-9 a-z (只有小写) 都是vim的寄存器,
其中,1-9 是删除寄存器,分别记录上n次删除的内容,好比,我要复制上5次删除的内容使用 “5p 就能够了,
0 上一次复制的内容,yy自动存入,
/ 是上次搜索寄存器
a-z是具名寄存器,好比yy想存入a中,就是用 “ayy 这样子.
这些寄存器是能够混用的
好比 / 和 ? 我想搜上4次删除的内容,就能够用
/<CTRL+R>4 回车,
这样子哦,
输入/”4 只能搜”4这样的字符,这个和vim的配置相关.
缓冲区的范围也是a-Z,使用m[a-Z]进行标记,标记的是光标所在的位置,使用’[a-Z]会跳转到相应的位置,要点就是,使用m标记,使用’进行跳转。
使用 :marks 显示全部标记
使用 :set ic开启忽略大小写,
使用 :set noic 关闭
ic 即 : ignore case 的简写
cscope是用于多种语言的(其实主要仍是c了)的符号查找程序.这个很厉害啊,只是使用起来比ctags稍微麻烦一点.
在源码目录使用cscope -cb 会生成一个cscope.out文件,若是只有指定目录,就把须要的全部文件写到cscope.files文件里, 一行一个文件就好了,
vimrc中也许有像set tag = xxx之类的设置,笨一点的方法就是使用cs add进行加入对应文件
使用 :cs f g XXX 找cscope.out中的XXX定义.
f表示查找 g 表示找定义,可使用 :cs help 进行查看,很方便.
对上一条中 f的展开
:cs help 会有说明
add {file|dir} [prefix dir] 添加一个cscope.out文件,能够指定文件或者目录加入cscope.out文件 ,cscope默认使用vim开启的目录开始查找,若是改了目录,使用 prefix dir从新指定一个就行了,要否则就会报某某某文件找不到.
find 查找,在加入的cscope.out文件中,按指定方式找对应的符号,g就是找定义,其余的看下一条.
kill # 从加入的cscope.out文件中除去一个.# 是序号,也可使用文件指定,使用须要方便啊.
show 显示已经加入的scope.out文件.前面就是kill须要的序号了.
reset 初始化全部的加入的cscope.out文件.
有关:cs f g XXX中g的扩展
0或s 查找这个符号.
1或g 查找这个定义.
2或d 查找这个函数调用的函数们.
3或c 查找调用这个函数的函数们.
4或t 查找这个字符串.
6或e 查找这个egrep匹配模式.
7或f 查找这个文件.
8或i 查找include这个文件的文件们.
使用技巧.
使用手工输入函数符号的是否是很麻烦呢,能够这样,使用 yw 复制一个单词,而后使用C_r 0 从复制复制寄存器中拿出上一个复制的内容.
vim显示行号,很简单,开始显示,
set number 简写 set nu .
取消显示
set nonumber 简写 set nonu
显示相对行号 //对于查看结构体特别有用
set relativenumber
取消相对行号显示
set norelativenumber
有关line函数的使用
这个函数是获得行数,使用 :help line 能够查看许多内容.
line(‘.’) 当前行.
line(“‘t”) t标记所在的行,没有的话,返回0
做用:
给文件添加统一的前面 行号,是内容的序号,不是显示的.:
:%s/^/\=line('.').' '解释:
- %s 是全局搜索.
- ^ 表示每一行的开头
- \= 表示 使用后面的表达式结果进行替换,若是想使用\= ,哪买整个替换后的字符都要是 表达式的结果,就是说,\=只能写在最前面,不能从中间使用.
- line(‘.’) 表示但前行的行号,这个号码是根据匹配游标移动改变的.
- . 表示字符串链接,链接后面的’ ‘(空格) 你总不但愿行号后面没有空格吧?
计算但前行到指定行的行差
这个比较麻烦,分一下几步:
- 在基准的行作一个标记,好比 ms 作一个s标记.
- 使用 / 或者其余什麽手段,移动到所在的行.
- 执行 :echo line(‘.’)-line(“‘s”) 就会在命令输入行打出一个数字,就是行差了,
虽然比较麻烦,但是使用q 定义好宏之后,使用@执行就好多了.
概述
这里的vim操做命令指的是按下 : 以后能够输入的命令
去掉全部空行
:g/^s*$/d
说明:
g : 全局命令
/ : 分割符
^\s*$: 全部匹配开头和结尾只有 空格 的行.
/d : 删除该行
配置
set foldenable “设置容许折叠
set foldmethod=[manual|indent|] “设置折叠方式,manul手动 indent按缩进折叠
set foldlevel=3 “设置折叠的层级大小
操做
在normal模式下进行fold操做
z + c 折叠光标所在的区域(一次折叠一层)
z + C 折叠光标所在的区域(一次把光标所在的区域折叠到最小)
z + R 打开全部的折叠(一次打开到没有折叠的样子)
z + r 打开全部的折叠(一次打开一层折叠,再桉一次这打开下一层)
z + o 打开光标所在的折叠,或者 在光标所在的地方 按 l 也能够
z + M 折叠全部能够折叠的代码(以最大深度进行折叠)
z + m 折叠全部能够折叠的代码(以一层的深度递增折叠,再桉一次则折叠第二层)
配置
这里使用的是Omni的自动补全插件,其余的后有一些不一样的地方
set completeopt=menu,menuone “关掉补全的预览窗口
let OmniCpp_MayCompleteDot = 1 “配置’.’之后给出补全信息
let OmniCpp_MayCompleteArrow = 1 “配置’->’之后给出补全信息
let OmniCpp_MayCompleteScope = 1 “配置’::’之后给出补全信息
let OmniCpp_ShowPrototypeInAbbr = 0 “配置补全时是否显示函数原型,默认是不显示,1是显示
还有一些其余配置,须要的话网上查
操做
补全的操做都是在insert模式下进行的,全部的操做都是使用Ctrl做为修饰符的,这样才能区分是否是须要输入
<C-i> 在任什么时候刻想要提示一下
<C-g> 取消补全,隐藏补全的选择列表
<C-n> 选择下一补全选项
<C-p> 选择上一个补全选项
<C-I> 根据头文件进行补全
<C-f> 列出有关文件的补全
<C-o> | <C-k> 把输入的字符变为xml的一个节点 div ==> <div> </div>
新建一个加密文件
vim -x file 首次创建会让你输入密码
打开一个加密文件
直接vim file就可了,若是是加密文件,vim会提示输入密码的.
给一个明文文件加密,或者改密码
:set key= 清除密码
:set key={密码} 设置密码为{密码}
记得保存后才起效哦
以指定的编码打开文件
:e ++enc={编码} {文件} 使用指定编码打开文件 编码的可选范围: utf8 ucs-bom gbk,cp936,gb2312,gb18030
查看文件的当前编码
:set fenc 显示文件的编码
:set enc 显示vim新建文件的时候的默认编码
以指定编码写入文件(无论文件的当前编码)
:w ++enc={编码} [文件]