vi/vim命令

#

vim【vi】有三种常见的模式:Normal Mode(命令模式)Insert Mode(输入模式)Visual Mode(视图模式)

文件操作

vim【vi    // 打开一个空文件

vim【vi】 a.txt  // 打开当前目录中的a.txt文件;若文件不存在则创建一个名为a.txt的文件(指定保存位置为当前目录)

vim【vi】 e:\a.txt // 打开e盘目录中的a.txt文件;若文件不存在则创建一个名为a.txt的文件(指定保存位置为e:\)

vim【vi】 + a.txt  // 打开当前目录中的a.txt文件,并定位到文件末尾;若文件不存在则创建一个名为a.txt的文件(指定保存位置为当前目录)

vimvi】 +/Hello a.txt    // 打开当前目录中的a.txt文件,并将光标置于第一个与Hello匹配的串处

vim【vi】 +25 e:\a.txt  // 打开e盘目录中的a.txt文件,并定位到文件的25行首

vim【vi】 + e:\a.txt // 打开e盘目录中的a.txt文件,并定位到文件末尾;若文件不存在则创建一个名为a.txt的文件(指定保存位置为e:\)

vim【vi】 a.txt b.txt c.txt  // 打开当前目录中的a.txt,b.txt,c.txt文件;若文件不存在则创建一个名为a.txt,b.txt,c.txt的文件(指定保存位置为当前目录) 

:w  // 保存文件

:w!  // 强制保存文件(文件为只读类型也会被保存)

:w e:\a.txt  // 保存到e:\a.txt

:w! e:\a.txt  // 强制保存到e:\a.txt

:x:wq// 保存并退出

:x:wqe:\a.txt   // 保存到e:\a.txt,并退出

:q  // 退出(如果未保存,则会退出失败)

:q!  // 不保存,强制退出

:open  e:\b.txt  // 在新缓冲区中打开e:\b.txt文件

:e d:\test.txt  // 在新缓冲区中打开d:\test.txt文件

:set fileformat?    // 查看当前格式 - unix/dos

:set fileformat=unix  // 将当前文件设置成unix格式

:set termencoding=gbk  // 将文件内容使用gbk编码显示到SecureCRT等终端上

多文件

:bn  // 切换到下一个缓冲区

:bd  // 删除当前缓冲区(关闭文件)

:sp test.txt   // 在新的缓冲区中打开文件,并分割窗体

ctrl+w,ctrl+s  // 分割窗体

ctrl+w,ctrl+w  // 切换到不同的窗体

ctrl+w,ctrl+q  // 关闭当前窗体

ctrl+w,ctrl+v  // 垂直分割窗体

:tabe test.txt  // 在新标签页中编辑文件

gt  // 下一个标签

gT  // 前一个标签

:tabr  // 切换到第一个标签

:tabl  // 切换到最后一个标签

:tabm 3  // 切换到当前标签后的第3个标签

:xa:wqa// 保存所有标签并退出

:qa  // 退出所有标签(如果未保存,则会退出失败)

:qa!  // 不保存,强制退出所有标签

命令历史记录

q:  // 打开历史编辑窗口,按k和j来上下选择命令

     // 选择任何一个命令,按回车即可输入该命令并关闭历史编辑窗口(注:最下面一个为空命令)

ctrl+c  // 退出历史编辑(但此时历史编辑窗口不关闭),再按esc即可关闭历史编辑窗口

光标移动

h  j  k  l  // 左 下 上 右

ctrl + e     // 向下滚动一行

ctrl + y     // 向上滚动一行

ctrl + d     // 向下滚动半屏

ctrl + u     // 向上滚动半

ctrl + f  // 下一页

ctrl + b  // 上一页

ctrl + g  // 移动到文件末尾

%  // 括号匹配 - 小括号/中括号/大括号

w  // 跳到下一个单词的起始处(使用非字母、数字及下划线的字符作为分隔符号)

W  // 跳到下一个单词的起始处(仅使用空格、Tab、回车作为分隔符号)

  // 跳到上一个单词的起始处(使用非字母、数字及下划线的字符作为分隔符号)

B  // 跳到上一个单词的起始处(仅使用空格、Tab、回车作为分隔符号)

e  // 跳到当前单词的末尾(使用非字母、数字及下划线的字符作为分隔符号)

E  // 跳到当前单词的末尾(仅使用空格、Tab、回车作为分隔符号)

0    //    跳到当前行行首

^      // 跳到当前行最前字符的位置

$   // 跳到当前行行末

gg  // 跳到第一行最前字符的位置

gd  // 跳转当前光标处变量或函数的定义处

G  // 跳到当前文件最后一行的最前字符的位置

5G【:5  // 跳转到第5行最前字符的位置

fx  // 在当前行中向后查找字符x

Fx  //在当前行中向前查找字符x 

;  // 重复上一次的f或F命令

,  // 执行f或F命令时,向前查找字符x

*  // 向后查找当前光标下的单词

#  // 向前查找当前光标下的单词

·.  // Tab上面的字符+句号   回到上一次编辑所在的行首

H  // 到当前屏幕的最上一行

M  // 到当前屏幕的中间一行

L  // 到当前屏幕的最下一行

插入模式

i  // 从当前光标位置插入

I  // 从当前行起始处插入

a  // 在光标之后插入

A  // 在当前行末插入

o  // 在当前行下一行插入一个新行

O  // 在当前行上一行插入一个新行

ctrl + n // 下一个提示匹配

ctrl + p // 上一个提示匹配

esc  // 退出编辑模式

可视模式(用于选中文本)

v  // 启动可视模式,移动光标选中字符

V  // 启动行可视模式,移动光标选中行

ctrl + v // 启动块可视模式

o  // 移动到选择块的另外一端

U  // 将当前选择块转成大写

O  // 移动到选择块的另外一对角上

aw  // 选中一个单词

ab  // 选中一个匹配块(如:小括号/中括号/大括号等)

aB  // 选中一个括号匹配块

ib  // 选中小括号中的内容

iB  // 选中大括号中的内容

>  // 右移

<  // 左移

y  // 复制

d  // 删除

~  // 将当前选择块内容大小写切换

编辑

cc  // 删除当前行内容(并切换到插入模式)

cw  // 删除当前光标到所在单词末间的内容(并切换到插入模式)

caw    // 删除当前单词(并切换到插入模式)

c$  // 删除当前光标到行末的内容(并切换到插入模式)

s  // 删除当前光标字符(并切换到插入模式)

S  // 删除当前行内容(并切换到插入模式)

J  // 将下一行挪到当前行结尾

r      // 替换光标所在处一个字符

rx  // 将当前光标处字符替换为字符x

R      // 相当于按了insert键,直到按ESC键退出

u  // 撤销

ctrl + r  // 重做

.  // 句号   重复上次命令

~  // 当前光标下字符的大小写转换

g~iw  // 当前光标下单词的大小写转换

gUiw  // 转换当前光标下单词为大写

guiw  // 转换当前光标下单词为小写

<<  // 左缩进

>>  // 右缩进

==  // 自动缩进对齐

剪切、复制和粘贴

dd  // 剪切当前行

ndd  // 剪切从当前行起的n行内容

dw  // 剪切到下一个单词开头

de      // 剪切当前光标到本单词末尾

dE     // 剪切当前光标到本单词末尾包括标点在内

db     // 剪切当前光标到前一个单词

dB     // 剪切当前光标到前一个单词包括标点在内

daw   // 剪切当前单词

x    // 剪切当前字符

nx     // 剪切当前的n个字符

X  // 剪切当前光标的前一个字符

D  // 剪切当前光标到行尾

dG    // 剪切当前光标到文件末尾的所有内容

d0    // 剪切当前光标到本行行首的所有内容

d$    // 剪切当前光标到本行行尾的所有内容

d^  // 剪切当前光标到本行首间的内容

:1,100d  // 剪切1~100

:100d    // 剪切第100行

:1,100 mo $ // 将1~100行的内容移动到最后一行

yy  // 复制当前行

nyy  // 复制从当前行起的n行内容

yaw     // 复制当前光标下的单词

yw  // 复制当前光标到所在单词末间的内容

y$  // 复制当前光标到行末间的内容

y^  // 复制当前光标到行首间的内容

yG  // 复制当前光标到文件末尾间的内容

p  // 在当前光标后插入复制的内容

P  // 在当前光标前插入复制的内容

]p  // 以恰当的缩进插入复制的内容

:1,100 co 200 // 将1~100的内容复制到第200行

:100,102 co $  // 将100~102行的内容复制到最后一行

搜索和替换

:set hlsearch  // 开启匹配字符串的高亮显示

:nohlsearch  // 关闭匹配字符串的高亮显示

* 键可以向后搜索光标所在位置的单词,# 键可以向前搜索光标所在位置的单词

/Hello   // 搜索Hello字符串

?Hello   // 向前搜索Hello字符串

/Hello\c  // 搜索Hello字符串(忽略大小写)

?Hello\c   // 向前搜索Hello字符串(忽略大小写)

n  // 向正方向搜索下一个字符串

N  // 向反方向搜索下一个字符串

:%s/Hello/Test/g  // 全局替换当前文件中所有的Hello为Test

:%s/Hello/Test/gc  // 全局替换当前文件中所有的Hello为Test(需要逐个确认)

:%s/Hello/Test/gci  // 全局替换当前文件中所有的Hello(忽略大小写)为Test(需要逐个确认)

参考

简明 Vim 练级攻略 

Eclipse和Vim快捷键桌面

Vim命令速查卡

给程序员的VIM速查卡

Vim的分屏功能

游戏:VIM大冒险 

原文地址:https://www.cnblogs.com/kekec/p/2932751.html