VIM使用小记

By francis_hao    Sep 22,2016

vim的功能自然不止如此,这里只是把日常使用频率较高的记录下来,若想了解vim的全部功能可查阅其帮助手册:help,或者查询指定命令的用法:help xx

一、基本用法

1、文本插入命令


i


在光标前开始插入文本


a


在光标后开始插入文本


o


在当前行之下新开一行


O


在当前行之上新开一行

2、光标移动命令


gg, :0


光标转到首行行首


G, :$


光标转到末行行首


0


光标移到本行行首


$


光标移到本行行尾


n+


光标下移n行


n-


光标上移n行


nG, :n


光标移至n行行首


Ctrl+u


上翻半屏(up)


Ctrl+d


下翻半屏(down)


Ctrl+b


上翻一屏(backwards)


Ctrl+f


下翻一屏(forward)


()


句子移动


{}


段落移动


H


光标定位到屏幕顶部


M


光标定位到屏幕中间


L


光标定位到屏幕底部


w


光标向前移动一个单词(word)


b


光标向后移动一个单词(back)


e


光标移动到当前单词的结尾(end)


zt


将当前行变为屏幕第一行(top)


zz


将当前行变为屏幕中间行


zb


将当前行变为屏幕尾行


Ctrl+e


屏幕上移一行但光标位置不变


Ctrl+y


屏幕下移一行但光标不变

3、删除复制和替换


dd


删除整行


d0


从当前位置删至行首


d$, D


从当前位置删至行尾


ndd


删除n行


dl


删除光标位置一个字符


dw


删除当前位置至单词结尾


cc


删除当前行并进入插入模式,cl,cw类似d


yy


复制当前行,yl,yw类似d


p


粘贴


r


修改光标所在位置字符


s


删除光标所在位置字符并进入插入模式


u


撤销上一次的操作


Ctrl+r


恢复上一次的操作

4、查找和替换


/pattern


从光标处开始向文件尾搜索pattern,在pattern后加\c可以不区分大小写


?patern


从光标处开始向文件首搜索pattern


n


在同一方向重复上一次搜索命令


N


在反方向重复上一次搜索命令


: nohlsearch (noh)


取消搜索结果的高亮显示


:s/p1/p2/g


将当前行中所有p1用p2替代


:n1,n2s/p1/p2/g


将第n1至n2行中所有p1均用p2替代 :1,$从第一行到末行=%


*


向文件尾搜索匹配光标所在字


#


向文件首匹配光标所在字

5、寄存器说明

vim里有许多寄存器,暂时只记录平时有用过的。


""


默认寄存器,文本来源命令d/c/s/x/y


"0


复制缓存,来源为yy命令


"1-"9


删除缓存,来源为dd命令


"a-"z


自定义的寄存器,不会被系统自动冲刷,总是存储最后一次使用的值。

"A-"Z : 向"a-"z寄存器中追加新内容而不是覆盖,虽然"A-"Z本身不是寄存器,但是却可以引用。


"ayy


复制当前行并将其存放在"a寄存器中


"_


黑洞寄存器,只进不出


:reg


查看寄存器里的值(全名为:registers)

eg:

下图左侧是vi中的文字,1yy表示第一次执行yy命令,以下以此类推,右侧为执行后的寄存器中的值

二、扩展部分

1、杂项


v


可视行


Ctrl+v


可视列


Ctrl+g


查看当前文件信息(文件名和行数)


:!command


暂时退出vi,执行command命令并输出结果


!!command


执行command命令并将执行结果输出到当前行(覆盖方式)


!}command


执行command命令并将执行结果输出到当前行和之后的行中(覆盖方式)


:r hello


将hello文件读入当前文件中


:n1,n2 w>>fox


将n1至n2追加到fox文件中


:Ex


(:Explore)开启目录浏览,可以浏览当前目录下的所有文件,可以选择


:Sex


(:Sexplore)水平分割当前窗口,并在一个窗口中开启目录浏览器


:shell


不关闭vi切换到shell命令行,退回到vi使用:exit


.


重复上一个操作

2、多文件编辑


$vi f1 f2 f3


同时打开f1 f2 f3


:n


切换到下一个文件(:next)


:bn


切换到下一个文件(:bnext)


:prev


切换到上一个文件(:previous)


:bp


切换到上一个文件(:bprevious)


:n#


切换最近两个文件


:e#


Ctrl+6


:buffers


显示缓冲区的文件列表


:ls


:b buffnum


切换到buffnum的文件,buffnum是缓冲文件列表的值


:bd buffnum


关闭buffnum的文件(:bdelete )


:rewind


切换到第一个文件


:e f4


在缓冲区添加新的文件,和之前打开的文件属于并列关系


:e!


重新载入当前文件,用在撤销当前所有做过的修改


:mksession! [name.vim]


保存多文件会话状态


$vim –S name.vim


vim重载之前的多文件会话状态


:source name.vim


手动重载之前会话

3、多标签


$vim –p f1 f2 f3


以多标签的方式打开多个文件


gt


向右切换标签


gT


向左切换标签


:tabnew filename


添加一个新标签


:tabc


关闭当前的tab


:tabo


关闭其他的tab只留当前一个


:tabs


查看所有打开的tab


:tabp


前一个


:tabn


后一个

4、set


~/.vimrc


vim的配置文件,一些配置信息可写入此文件中,但也可以在打开的文件中使用:set以实现一次性的功能


"


.vimrc文件中的注释行


:set paste


设置为粘贴模式,所见即所得,不会因为注释乱了格式


:set


显示常用的设置值


:set list


显示不可见字符

5、vi编码

set encoding=utf-8

set fileencodings=utf-8,ucs-bom,gb18030,gbk,gb2312,cp936

set termencoding=utf-8

三、程序员专用

1、杂项


K


跳转到光标所在函数或命令的man手册


J


将当前行的下一行合并到当前行


%


跳转到匹配"{"对应的"}"的位置


gd


跳到局部的变量定义处,不能跨文件


gf


打开光标所在位置的文件名,一般是头文件

ctrl+w f分屏打开文件


>


缩进,<:反缩进


Ctrl+o


跳转到上一视图,可用于搜索后、使用gg|G跳转或tag跳转的返回


‘‘(两个单引号)


在上一视图和本视图之间切换


ma


设置标签a,之后可以通过`a跳转到设置的标签a处,类似的标签:a-z


~


可转换光标所在位置的字母大小写


gg=G


整个文件重置缩进


2G=15G


第二行至第15行重置缩进


:set ft=c


设置文件类型是c (filetype)


:filetype


显示当前文件类型相关的设置

2、文件比较


$vimdiff f1 f2


直观的比较f1和f2的不同(vimdiff是shell下一个链接命令,指向vim)


:vertical diffsplit xxx


垂直方式比较当前文件和xxx文件


zo


打开光标下面的一个折叠(open)


zO


打开光标下面的所有折叠


zc


关闭光标下面的一个折叠(close)


zC


关闭光标下面的所有折叠


:set noscrollbind


取消文件比较中的同步滚屏功能


]c


跳到下一个修改点


[c


跳到上一个修改点


:diffupdate


在比较过程中,修改过一个文件后更新比较状态


dp


把光标所在窗口的差异改到另一个窗口(:diffput)


do


把光标所在窗口的差异改为另一个窗口的(:diffget) o=obtain


:diffoff!


强制关闭比较模式

3、窗口分割


:split xxx


打开xxx并与当前文件水平排列


:vsplit xxx


打开xxx并与当前文件垂直排列,


:15split xxx


以占据15行的窗口打开文件xxx


:new [xxx]


新建(打开)一个与当前文件水平排列的文件


:vnew [xxx]


新建(打开)一个与当前文件垂直排列的文件


ctrl+w w


在打开的文件中跳转


Ctrl+w [hjkl]


跳转到[左下上右]的窗口


Ctrl+w [tb]


跳转到最上/最下的窗口


Ctrl+w [HJKL]


把当前窗口移动到最[左下上右]边


Ctrl+w +


扩大窗口(默认一行),5ctrl+w +(扩大5行)


Ctrl+w =


平分窗口


Ctrl+w _


扩大窗口到最大,带参数{height}ctrl+w _


:res(ize) num


窗口大小调整为num行


:res(ize) +num


窗口大小增加num行


:vertical res(ize) num


窗口大小调整为num列


:close


关闭当前的(不能是最后一个)的窗口


Ctrl+w c


:only


关闭除当前窗口外的所有窗口


:qall


关闭所有打开的窗口


:wall


保存所有的打开的窗口文件


:wqall


保存并退出


$vim –o f1 f2 f3


以水平排列方式打开三个文件


$vim –O f1 f2 f3


以垂直排列方式打开三个文件


:all


将已经打开的多个文件分配水平的窗口


:vertical all


将已经打开的多个文件分配垂直的窗口


Ctrl+w o


只显示当前窗口,

4、ctags


$ctags --list-languages


显示ctags支持的语言


$ctags --list-maps


默认支持的文件扩展名


$ctags -R


给当前文件夹下的所有文件建立tags


~set tags=/tags


在.vimrc文件中设置tags的路径,如果有多个tags可以用","分割,或者set tags+=/tags进行添加。


:tag main


可以从打开的文件中跳到main函数处,即使打开的文件中没有main函数(在别的文件中也可以跳过去)


Ctrl+]


以光标所在位置的单词为tag跳转


Ctrl+t


跳回到之前的位置,可以在前面加上跳转的深度,3ctrl+t:跳回之前三层之上的位置


:tags


列出已经跳转到过哪些tag了


:tag /^block<tab>


查找以block开头的可能的tag


Ctrl+w+]


分割当前窗口并跳转到光标所在位置的tag处


:stag xxx


$vim –t tag


找到tag(函数,结构体等)所在文件并打开


:tn


多个匹配tags时跳转下一个(:tnext)


:tp


多个匹配tags时跳转上一个(:tprevious)


本文由 刘英皓 创作,采用 知识共享 署名-非商业性使用-相同方式共享 3.0 中国大陆 许可协议进行许可。欢迎转载,请注明出处:
转载自: http://blog.sina.com.cn/s/blog_5994f1ca0102wjgi.html

参考

【1】VIM使用系列:寄存器与复制粘贴缓冲区:https://my.oschina.net/shelllife/blog/144357

【2】VIM字符编码设置:http://www.cnblogs.com/freewater/archive/2011/08/26/2154602.html

【3】linux下vim中文乱码的解决方法:http://www.cnblogs.com/joeyupdo/archive/2013/03/03/2941737.html

【4】VIM技巧之分隔窗口:http://blog.chinaunix.net/uid-24673811-id-1994607.html

【5】vim中多标签和多窗口的使用:https://my.oschina.net/kutengshe/blog/464602

【6】开启文件类型检测:http://easwy.com/blog/archives/advanced-vim-skills-filetype-on/

时间: 2024-11-01 03:05:44

VIM使用小记的相关文章

【vim小小记】vim的复制粘贴(包括系统剪贴板)

1.vim常用复制粘贴命令 Vim的复制粘贴命令无疑是y (yank),p(paster),加上yy,P PS: vim有个很有意思的约定(我觉得是一种约定),就是某个命令的大小写都是实现某种功能,只是方向不同,比如: w 跳转到下个word,W:跳转到上个word f 某行正向查找并跳转 F: 反向.... 然后部分双写的字母有行操作: yy 复制一行 dd 删除一行 所以, p就是在当前光标后粘贴,P就是在当前光标前粘贴 另外,说完p,其实还有几个命令有时也是很有用的 gp,和p的功能基本一

vim学习小记

Vim 是一个具有很多命令的功能非常强大的编辑器 1.vim的启动 vim [文件名] 便可以进行文件编辑, 进入文件后默认是Insert状态,按下esc进入正常模式状态 插入模式  =[按下esc键] =>正常模式 正常模式 =[按下i键] => 插入模式 正常模式下的光标的移动  2.vim的退出 :q!   会丢弃您所做的任何改动,并且退出vim :wq  将先保存文件,然后退出Vi返回到shell. :w    保存当前编辑文件,但并不退出,而是继续等待用户输入命令 :w   newf

【vim小记】vim的高效移动

我还是推荐所有刚入门vim的朋友先去用vimtutor练习,然后去看vim的帮助文档,写的十分仔细,而且可以马上实战,见效很快,以下的很多示意图都是vim帮助文档里的例子,我觉得很好,就拿出来了. vim之所以高效的原因是因为它有一套高效的移动机制,作为学vim,可以说这一部分你不得不看,这可以大大减少了文章内移动的击键数,而且脱离的鼠标的束缚,让双手基本不用离开键盘操作. 一.VIM的基本移动 vim的基本操作无非是上(j)下(k)左(h)右(l)  ,这个大家很熟悉了,当然,键盘的上下左右也

Sublime text 神器小记

以前一直使用的都是Editplus,一直感觉都是很不错的. 但是最近接触到sublime text,我就fall in love with it. Sublime 的意思是"顶峰,高尚,非凡的"意思.多么霸气的名字啊..好吧,不瞎扯了. 其实我觉的不需要到网上乱找一通,什么中文破解版的,乱七八糟的.就直接到官方网网站进行下载. 虽然是没有注册的,偶尔会弹出一个让你去获取License的 框框外,没有其他任何影响. 下砸网址:http://www.sublimetext.com/ 不过我

随笔小记

随笔小记:   Socket  ,套接字,就是IP:PORT   绑定起来,就是套接字,可以这样理解. DNS服务器的指定方法有1种,就是: # vim /etc/resolv.conf nameserver   DNS_IP_1 nameserver   DNS_IP_2 配置主机名: 第一种方法:#hostname  HOST01     //起名HOST01,    立即生效,重启后失效 第2种方法: #vim /etc/sysconfig/network HOSTNAME= HOST01

Ubuntu server搭建vsftpd小记

Ubuntu server中搭建vsftpd小记 <h1> 在Ubuntu server中安装vsftpd</h1> sudo apt-get install vsftpd <h2>添加用户</h2> 搭建FTP的为了登录用户,不能查看其它目录,只能在自己的目录中操作文件,并且不能登录ssh 1. 添加用户:pinkrose 命令格式是:sudo useradd 用户名 -d 用户的登录目录 -s 登录时候的shell sudo useradd pinkro

shell scripts小记

1 开头程序必须以下面的行开始(必须方在文件的第一行):#!/bin/sh符号#!用来告诉系统它后面的参数是用来执行该文件的程序.在这个例子中我们使用/bin/sh来执行程序.当编写脚本完成时,如果要执行该脚本,还必须使其可执行.要使编写脚本可执行:编译 chmod +x filename 这样才能用./filename 来运行 2 注释在进行shell编程时,以#开头的句子表示注释,直到这一行的结束. 3 变量在shell编程中,所有的变量都由字符串组成,并且不需要对变量进行声明.要赋值给一个

Arch Linux 安装小记

Arch Linux 安装小记 这只是一篇随笔,用来记录从全新安装 Arch Linux 开始,到在使用过程中各种软件配置的过程. 其实对于 Arch Linux 这样滚动更新的 Linux,很少需要重新安装系统.只不过在开始使用 Arch Linux 时遇到的一些问题,有时并没有真正了解其中的原因或者问题被掩盖了,所以通过写一些记录文档,并且把一些花时间配置的文件备份下来,无论以后再次使用还是整理思路都是好的. 注意: 这不是一个安装 Arch Linux 的完整过程,ArchWiki 才是.

YCM 安装小记

layout: post title: YCM 安装小记 半夜,女朋友在那边抱怨购物车的物品秒无货,我这边刚好成功安装了vim上最难装的插件--YouCompleteMe,内心非常激动,于是本着取之于人,回馈于人的动机,把自己的一点心得分享出来: 卸载系统自带的vim\vi,下载vim源码 编译vim,需要很多第三方的库:比如python.lua.ruby.perl.ncurse等,如果需要什么去下什么,那太麻烦了,参看这个gist 如果不能访问请看下方附录 使用Vundle安装vim插件,对应