移动
| 0 |
光标移动到本行行首 |
| $ |
光标移动到本行行尾 |
| gg |
移动到全文首行 |
| G |
移动到全文尾行 |
| ngg |
移动到第n行 |
| n+ |
向移动n行 |
| n- |
向移动n行 |
| ctrl + u |
向上翻半屏 |
| ctrl + d |
向下翻半屏 |
| ctrl +b |
向上翻一屏 |
| ctrl + f |
向下翻一屏 |
ctrl + e | 光标不动,向下移动一点屏幕
ctrl + y | 光标不动,向上移动一点屏幕
H | 光标移动屏幕的顶端
M | 光标移动到屏幕的中间
L | 光标移动到屏幕的底端
| w |
光标移到下一个word |
| b |
光标移到上一个word |
| ’’ |
移动到光标上次停靠的地方, 是两个’, 而不是一个” |
| ctrl + o |
回到上一次光标处 |
| ctrl + i |
进到下一次光标处 |
| [[ |
跳转到代码块的开头去,但要求代码块中’{‘必须单独占一行 |
搜索
| / |
后面跟要查找的东西,在文件中向下搜索 |
| ? |
后面跟要查找的东西,在文件中向上搜索 |
| n |
向前重复搜索 |
| N |
向后重复搜索 |
| * |
移动当前光标所指的单词下一次出现的地方,相当于搜索 |
| # |
移动当前光标所指的单词上一次出现的地方 |
| ma |
标记。a是我们对这一行所做的标记的名称 |
| ‘a |
快速的移到刚才所做标记的地方 |
| :marks |
列出当前的所有的标记。 |
| d‘a |
删掉这一标记 |
复制、粘贴
| yy |
复制光标当前行 |
| nyy |
复制光标当前行到当前行以下的n-1行 |
| :1,100 co 200 |
将1~100的内容复制到第200行。 |
| :100,102 co $ |
将100~102行的内容复制到最后一行。 |
| p |
粘贴到当前行的下一行 |
| P |
粘贴到当前行的 上一行 |
| ]p |
和 p 的功能差不多,但是它会自动调整被粘贴的文本的缩进去适应当前代码的位置 |
| ctrl + r ctrl + w |
将光标的单词复制到vim的命令行模式 |
替换
| :1,$s/^/some string /g |
在文件的第一行至最后一行的行首插入“some string”。 |
| :%s/$/some string/g |
在整个文件每一行的行尾添加“some string”。 |
| :%s/string1/string2/g |
在整个文件中替换“string1”成“string2”。 |
| :3,7s/string1/string2/ |
仅替换文件中的第3行到第7行中的“string1”成“string2” |
选择
| v |
选择复制 |
| vaw |
选择一个单词 |
| vas |
选择一个句子 |
| vap |
选择一个断落 |
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可以连配对标点一起操作
删除
| dd |
删除当前行 |
| ndd |
与nyy相似 |
| dw |
删除一个单词 |
| ndw |
删除n个单词 |
| x |
删除一个字符 |
| nx |
删除n个字符 |
| dG |
删除当前光标到文件末尾的所有内容。 |
| d0 |
删除当前光标到本行行首的所有内容 |
| d$ |
删除当前光标到本行行尾的所有内容 |
| ddp |
上下两行调换 |
| :1,100d |
删除1~100 |
| :100d |
删除第100行 |
| :1,100 mo $ |
将1~100行的内容移动到最后一行。 |
| :g/^\s*$/d |
将所有不包含字符(空格也不包含)的空行删除 |
| ctrl + h |
插入模式下, 回删一个字符 |
| ctrl + w |
插入模式下, 回删一个单词 |
代码格式
| == |
当前行自动缩进对齐,自动格式化 |
| n== |
自动缩进光标下n行 |
| gg=G |
当前文件所有行自动缩进对齐 |
光标放在{处,然后输入v%就可以把大括号中内容选定,然后按=就可以按照排C语言格式缩
提示、注释
| ctrl + g |
在最后一行中显示光标所在位置的行数及文章的总行数 |
| :1,20s/^/\/\//g |
注释1到20行 |
| :%s/New_//gc |
替换,且询问是否替换 |
插入模式
| i |
在当前位置的字符前面进入插入模式 |
| I |
在当前行的开头进行插入 |
| a |
在当前位置的字符后面进入插入模式 |
| A |
在当前行的结尾进行插入 |
| o |
在当前行下面打开一个新行进行插入 |
| O |
在当前行上面打开一个新行进行插入 |
| J |
合并光标所在行及下一行为一行(依然在命令模式) |
撤销
| u |
撤销上一次的更改 |
| U |
取消对行所作的所有改变 |
| ctrl + r |
撤销你的撤销(相当于window下的ctr+y) |
| . |
这个命令是用来重复上一命令的 |
奇葩
| ggguG |
把整个文章全部小写 |
| 大写 |
在v模式下 选中单词 U |
| :nohl |
取消高亮 |
| ctrl + ] |
就可以定位到函数的定义位置: |
| ctrl + t/o |
退回原来的地方; |
| ctrl + n, ctrl + p |
弹出智能提示的菜单 |
| ctrl + e |
退出提示,并取消选择 |
| ctrl + y |
退出提示 并接收当前选择 |
| gd |
到达光标所在处函数或者变量的定义处(gD 全局搜索) |
find ~/qualitytesttrunk/ /usr/local/srvframework2/ | grep -v svn | xargs ctags
命令行操作
分屏
| :sp filename |
在当前窗口上面新开一个窗口文件名为filename |
| :vsp filename |
在当前窗口左右开一个 |
| ctrl + wk |
光标移动到上边,依此递推h j k l |
| ctrl + w + w |
顺序切换到下一个 |
| :tabnew |
新建标签页 |
| :tabf test* |
在新tab中打开搜索到的文件//有点类似于上面 |
| :tabs |
显示已打开标签页的列表 |
| :tabc |
关闭当前标签页。 |
| :tabo |
将关闭所有的标签页。 |
| :tabp或gT |
移动到上一个标签页 |
| :tabn或gt |
移动到下一个标签页。 |
| :tabdo |
同时在多个标签页中执行命令。比如我们打开了多个标签页,需要把这些文件中的“food”都替换成“drink”,那么就可以使用:tabdo %s/food/drink/g命令,一次完成对所有文件的替换操作,而不用针对每个文件重复操作。 |
| ctrl w -/+ |
调整分屏高度 |
| ctrl w </> |
调整分屏宽度 |
打开vim
| vim -p OidbCmlb.h log.h |
tab打开多个文件 |
| gf |
打开当前光标所在文件 |
| vim log.h +45 |
45行打开 |
常用命令
#vim可以鼠标滑动粘贴,在.vimrc中添加下面语句
if has('mouse')
set mouse=a
endif
:inoremap jk <esc>
gotags -f="tags" -R *
其他
如果文章对您有帮助,欢迎扫描下方二维码赞助(一分也是爱噢),谢谢