vim常用指令

常用命令

光标移动

  • h 光标左移。
  • j 光标下移。
  • k 光标上移。
  • l 光标右移。
  • w 跳到单词开头。
  • W 跳到下一个单词开头出,如果多个单词连接起来,当作一个单词。
  • e 跳到单词的尾部。
  • E 跳到单词的尾部,多个单词当作一个。
  • b 往前跳到上一个单词开头出。
  • B 往前跳到上一个单词开头出,多个单词当作一个。
  • 0 跳到一行的开始
  • ^跳到第一个非空格的行。
  • $跳到行尾。
  • G 跳到文本的最后一行
  • 5G 跳到文本的第5行。
  • [ 跳到文本首位。
  • ] 跳到文本末尾。

插入

  • i 在光标前插入。
  • I 在行首插入。
  • a 在光标前添加
  • A 在行尾添加。
  • o 在当前行的下一行添加。
  • O 在当前行的上一行添加。
  • ea 在单词尾添加。
  • ESC 退出插入模式。
    例子:
    在行首插入内容::%s/^/要添加的内容
    在行尾插入内容: :%s/$/要添加的内容

编辑

  • r 替代一个字符。
  • J 将当前行的下一行加入到当前行尾部。
  • cc 取代当前行。
  • cw 取代当前光标到该单词尾部为空字符,进入插入模式。
  • c$ 取代当前光标所在位置到该行尾部为空字符,进入插入模式。
  • s 删除光标所在字符,进入插入模式。
  • S 删除光标所在行,进入插入模式。
  • u 撤销之前操作。
  • Ctrl+r: 重做
  • . 重复最后一条命令。

标记文本

  • v:可视模式,按光标位置视选取内容。
  • V:可视模式,按行可视选取。
  • o:移动到另一个标记的尾部。
  • O:移动到另一个块角落。
  • aw:标记一个单词。
  • ab:标记一个块()
  • aB:标记一个块{}
  • ib:插入一个块()
  • iB:插入一个块{}

替换

~:将选中内容变换大小写。

剪切和粘贴

  • yy:复制一行
  • 2yy:复制当前光标所在行后一行,共两行内容。
  • yw:复制一个单词。
  • y$:复制当前光标所在位置到行尾。
  • p:粘贴寄存器内容到当前光标后。
  • P:粘贴当前寄存器内容到当前光标前。
  • dd:删除当前行。
  • 2dd:删除当前行内容后一行,共两行。
  • dw:删除一个单词。
  • D:删除光标所在位置到行尾。
  • d$:删除当前光标所在位置到行尾。
  • x:删除当前光标所在字符。

复制操作进阶

  1. 复制指定行内容到指定位置:5,10 co 2:复制第5-10行内容到第2行后
  2. :6,9 de删除第6-9行
  3. 标记复制开始行a,结束行b和处理行c。
    ma(移动到标记光标开始位置输入)
    mb(移动到光标结束位置)
    mc(移动光标处理位置到处理位置)
  4. :'a,'b co 'c:复制标记a,b之间的内容到标记c行之后
  5. :'a,'b de:删除标记a和b之间的内容
    5yl:复制5个字符

多文件操作

  • :e 在新的缓冲区编辑文件。
  • :bnext or bn 跳到新的缓冲区
  • :bpewv or bp 跳到之前的缓冲区。
  • :sp 分割当前窗口,打开一个新的缓冲区。
  • :vsp 水平分割一个窗口,在新的缓冲区打开文件。
  • :vertical resize +3:在当前分割窗口添加3个字符宽度。

快捷键

  • Ctrl+ws 分割窗口
  • Ctrl+ww 切换窗口
  • Ctrl+wq 退出窗口
  • Ctrl+wv 水平分割窗口

大小写转换

命令含义
`将光标位置下的字母改变大小写(normal)
3`将光标位置开始往后的3个字母改变其大小写(如果是小写则变成大写反之亦然)(normal)
g``改变当前行字母的大小写(normal)
U将可视模式下选择的字母全改成大写字母(visual)
u将可视模式下选择的字母全改成小写(visual)
gUU将当前行的字母改成大写(normal)
3gUU将从光标开始到下面3行字母改成大写(normal)
guu将当前行的字母全改成小写(normal)
gUw将光标下的单词改成大写(normal)。
guw将光标下的单词改成小写(normal)。

VIM高级

  1. 在文本的指定行行首添加字符。
  • ctrl+v
  • 上下键选取需要添加字符的行。
  • 输入大写的I进入插入模式。
  • 输入想要插入的内容。
  • 按ESC
  1. 在文本的指定行行首删除字符
  • ctrl+v
  • 上下键选择想要删除的行首字符
  • 按d。
  1. 比较两个文件
  • 在vim外部同一窗口比较两个文件:vim -d filename1 filename2
  • 如果已经打开了一个文件filename1,然后需要比较另一个文件 :diffsplit filename2(上下方向)。:vert diffsplit filename2(左右方向)
    - 只在某一文件中存在的行,显示为蓝色;
    - 而在另一文件中的对应位置的行,显示为绿色;
    - 在两个文件中都存在的行,显示为紫色
    - 行中不相同的字符,显示为红色;

如果已经用split打开了两个窗口,可以用下面的命令对比打开窗口的文件

:diffthis

使用zo命令,可以展开被折叠的相同的文本行;而zc命令,则可以重新折叠相同的行。

比较文件时,经常需要结合上下文来确定最终要采取的操作。缺省情况下,是会把不同之处上下各6行的
文本显示出来以供参考。其他的相同的文本行被自动折叠。如果希望修改缺省的上下文行数为3行,可以使用以下命令:

:set diffopt=context:3

如果你在一个文件中滚动屏幕,那么另一个文件也会自动滚动以显示相同的位置:
取消同步:

:set noscrollbind

确定同步:

:set scrollbind
  1. 删除空行
如果需要删除文章中的空行,可以使用一下语句:

:g/^\s*$/d

删除指定内容的行

:g/delete_string/d

简单解释一下:

  • g :全区命令
  • / :分隔符
  • ^\s*$ :匹配空行,其中^表示行首,\s表示空字符,包括空格和制表符,*重复0到n个前面的字符
  • $表示行尾。连起来就是匹配只有空字符的行,也就是空行。
  • /d :删除该行
  1. 寄存器复制
    使用p来粘贴,如果最近一次操作是复制,那么p就会添加 “0 寄存器的内容,如果最近一次操作是删除那么就添加 "1 寄存器的内容 ,如果要粘贴其它数字寄存器的内容,使用 "?p 来粘贴,比如要粘贴 “2 寄存器里面的,则在vim命令模式下 输入 "2p 就可以取出“2寄存器里面的内容了

其他的寄存器都是通过 "?p 来访问使用的。

小技巧

1.如何退出后再次进入文本编辑的时候光标在之前退出的位置?
在我是用的vim8(arch,deepin,ubuntu14(vim7.4))基本都是退出后再次进入,光标在第一行。这可能是vim8以上的默认设置,修改/etc/vim/vimrc

" Uncomment the following to have Vim jump to the last position when
" reopening a file
"if has("autocmd")
"  au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif
"endif

删除掉if开头到endof之前的引号。
2. ctrl+s卡死
使用vim时,如果你不小心按了 Ctrl + s后,vim停止向终端输出,要想退出这种状态,只需按Ctrl + q 即可恢复正常

QA

  1. 使用vim的时候发现backspace无法删除如何解决。
set nocompatible              
set backspace=indent,eol,start
  1. 打开windows文件出现乱码如何解决
    出现乱码是因为vim默认不支持gbk2312,cp936,打开文件默认是以utf-8编码打开。为此需要添加对gbk2312,cp936的支持,同事设置文件编码为utf-8,可以在vimrc文件中添加
set fileencodings=utf-8,gb2312,cp936,big5
set encoding=utf-8

这样vim将尝试使用fileencoding中的不同编码来对文件打开,即可打开windows下如gb2312编码的文件,为了能适应linux,你可转换文件为utf-8然后保存文件。输入:set fileencoding=utf-8然后保存文件即可。

相关引用

menggucaoyuan的专栏
VIM学习笔记 比较文件(diff)
vim中寄存器使用和vim标记
vi编辑器中的各种(整行,多行,一个单词)复制
vim在每行行首或行尾添加/删除内容

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值