您现在的位置是:网站首页 -> Linux 文章内容
VIM详细操作指南-itarticl.cc-IT技术类文章记录&分享
发布时间: 9年前【Linux】 149人已围观【返回】
Linux下命令行模式中打开vim的方式
vim FileName #打开文件 FileName,并将光标置于第一行首
vim +n FileName #打开文件 FileName,并将光标置于第 n 行首
vim + FileName #打开文件 FileName,并将光标置于最后一行
vim + /pattern File #打开文件 File,并将光标置于其中第一个于 pattern 匹配的字符串处
vim –r FileName #在上次正用 vi 编辑 FileName 发生系统崩溃后,恢复FileName(产生的意外文件后缀为 .swn .swo等)
vim File1 … Filen #打开多个文件,依次对之进行编辑
vim -o File1 … Filen #用水平分隔的方式打开多个文件然后进行编辑
vimdiff filename1 filename2 #用垂直分割的方式打开两个文件 filename1,filename2 然后显示出两个文件的不同的比较
部分常用命令
u 撤销
p 字线前粘贴(小p)
P 字母后粘贴(大p)
<c-r> 重做
nyy 复制n行 n为1时可省略
ndd 删除n行 n为1时可省略
:%s/xxx/aaa/g 将文本中所有的xxx替换为aaa
i<C-O>命令 执行一个普通模式的命令,执行完毕后回到插入模式,不用多次Esc
i<C-V>后续字符 输入特殊的 ASCII 字符或键。
. 在光标当前位置处重复上一次操作
:!命令行 执行一条外部命令
分屏操作:
:vs 文件名 或者 :new 文件名
ctrl+w s 对当前文档内容分屏显示
ctrl+w q 关闭所处分屏
ctrl+w o 仅显示当前分屏内容
ctrl+w j k 上下选择分屏
ctrl+w w 快速在分屏的两个屏幕中切换
插入数据基本操作
行操作:
I #在光标所在行首插入文本
A #在光标所在行尾添加文本
o(open) #在光标所在行下面添加一行
O #在光标所在行上面添加一行
nS #从当前行开始,删除向下 n 行并进入编辑模式,若无 n 删除当前所在行,并进入编辑模式
:r filename #在编辑数据中读入一个文件内容数据,并把这些数据添加到光标所在行后面
字符操作:
i(insert) #在光标前插入文本
a(append) #在光标后插入文本
r(Replace) #替换光标所在处字符,结束替换
R #替换多个字符,以按下 [Esc] 键标志替换结束
ns #从当前光标位置处开始,删除 n 个字符并进入编辑模式,若无 n 删除一个字符,并进入编辑模式
保存/退出
:q #退出 vim 返回到 shell,若有修改未被保存,vi 在末行给出提示信息并不退出 vim 到 shell
:q! #退出 vim 返回到 shell,放弃未保存的修改
:wq #保存后退出,无论文件是否有修改,都更新文件的修改时间
:x #保存后退出,若文件没有修改的话,不更新文件的修改时间
:w #将编辑的数据写入硬盘中
:w! #若文件属性为”只读”时,强制写入该文件
:w filename #写入当前文件到 filename 文件
ZZ #若文件没有更动,则不保存离开,若文件被更动过,则保存后离开
:n1,n2 w filename #将 n1 到 n2 的内容保存到 filename 这个文件中
显示与取消行号,制表符,结尾标志位
:set nu #显示行号,设置之后,会在没一会的前缀显示该行的行号
:set nonu #与 :set nu 相反,为取消行号
:set list #显示制表符(^I)与行尾标志位($)
:set nolist #与 :set list 相反,为取消显示制表符和结尾标志符
:nohl 取消高亮
光标移动方法
位移
字符操作:
nh / n← #向左移动 n 字符,无 n 移动一字符
nl / n→ #向右移动 n 字符,无 n 移动一字符
n #n 表示“数字”,光标会向右移动这一行 n 个字符.
0 #这是数字 “0”:移动到这一行的最前面字符处
^ #移动到这一行的最开始字符处
行操作:
nj / n↓ #向下移动 n 行,无 n 移动一行
nk / n↑ #向上移动 n 行,无 n 移动一行
[Ctrl+p] #光标上移一行
[Ctrl+n] #光标下移一行
n+ #光标下移到 n 行头,若没有 n 光标移到下行行头
n- #光标上移到 n 行头,若没有 n 光标移到上行行头
n$ #光标下移到 n 行尾,若没有 n 则移动到本行行尾
n_ #向下移动 n-1 行,并光标移动到非空白行首
H #光标移动到这个屏幕的最上方哪一行
M #光标移动到这个屏幕的中央哪一行
L #光标移动到这个屏幕的最下方哪一行
nG #n 为数字.移动到这个文件的第 n 行.若没有 n 则移动到最后一行
gg #移动到这个文件的第一行,相当于 1G
n #向下移动 n 行,无 n 移动一行
跳转
W / w #光标右移一个字至字首. W:以空格为分隔符 w:以非字母数字的符号作为分隔符
B / b #光标左移一个字至字首.
E / e #光标右移一个字至字尾.
( #光标移到上个句子句首.
) #光标移到下个句子句首.
{ #光标移到上个段落句首.
} #光标移到下个段落句首.
fc #光标跳转到本行下一个字符 c 处( c 指代任意字符 )
Fc #光标跳转到本行上一个字符 c 处( c 指代任意字符 )
tc #光标跳转到本行下一个字符 c 的前一个字符处( c 指代任意字符 )
Tc #光标跳转到本行上一个字符 c 的后一个字符处( c 指代任意字符 )
/word #光标跳转到下一个字符串 word 处,并把所有 word 单词高亮显示( word 指代任意字符串,并且可以使用 正则表达式 )
?word #光标跳转到上一个字符串 word 处,并把所有 word 单词高亮显示( word 指代任意字符串,并且可以使用 正则表达式 )
# #光标跳转到下个与光标所在处单词相同的单词,并把所有与光标所在处的相同的单词高亮显示
* #光标跳转到上个与光标所在处单词相同的单词,并把所有与光标所在处的相同的单词高亮显示
:nohl #取消高亮显示
gd #将与光标所在处的单词相同的单词全部高亮显示,并跳转到上一个高亮显示的单词
gD #将与光标所在处的单词相同的单词全部高亮显示,并跳转到最前面一个高亮显示的单词
[Ctrl+ o ] 向后跳转到上次编辑位置类似于VS的[Ctrl + - ] 可跨文件跳转
[Ctrl+ i ] 向前跳转编辑位置类似于VS的[Ctrl + Shift + - ] 可跨文件跳转
[Ctrl + g] 在屏幕左下显示当前文件名和百分比
[ Shift + 5 ] 跳转到匹配的符号的位置.例如 { 跳转到 }, [ 跳转到 ]
. #重复执行上次的命令
c #将光标转移到书签 c 处( c 为任意字符 )
下面两个与 / 与 ? 组合着用:
n #下一个匹配(如果是/搜索,则是向下的下一个,?搜索则是向上的下一个,但其实它只会在高亮字符中切换)
N #上一个匹配(同上)
与 f/F 配合使用的命令:
; #重复上一个f命令
[Ctrl+f] #屏幕“向下”移动一页,相当于[Page Down]按键
[Ctrl+b] #屏幕“向上”移动一页,相当于[Page Up]按键
[Ctrl+d] #屏幕“向下”移动半页
[Ctrl+u] #屏幕“向上”移动半页
[Ctrl+e] #屏幕向下滚一行
[Ctrl+y] #屏幕项上滚一行
nz #将第 n 行滚至屏幕顶部。不指定 n 时将当前行滚至屏幕顶
:$ #屏幕滚到文章最后一行
:0 #屏幕滚到文章最开始一行
复制/删除/粘贴
字符操作:
nx #向后删除 n 个字符,若没有 n 向后删除一个字符
nX #向前删除 n 个字符,若没有 n 向前删除一个字符
d0 #那个是数字的 0 ,删除游标所在处,到该行的最前面一个字符
d$ #删除游标所在处,到该行的最后一个字符
y0 #复制光标所在的那个字符到该行行首的所有数据
y$ #复制光标所在的那个字符到该行行尾的所有数据
p #将已复制的数据在光标下一列贴上
P #将已复制的数据在光标上一列贴上
行操作:
ndd #删除光标所在的向下 n 列,若没有 n 删除游标所在的那一整列
dnG #删除光标所在到第 n 行的所有数据,若没有 n 删除光标所在到最后一行的所有数据
nyy #复制光标所在的向下 n 行,若无 n 复制游标所在的那一行
ynG #复制游标所在列到第n行的所有数据,若无 n 复制游标所在行到最后一行的所有数据
J #将光标所在列与下一列的数据结合成同一列
改变某区域 [c]:
1.可以重复的:
[c]+[num]+[ h / j / k / l / w / b / e / ( / ) / { / } / $ / G / /word / ?word / tc / Tc / fc / Fc / c ]
c: #表示改变操作
重复操作次数: #num 表示操作重复次数
操作区域选择:
h #改变光标前一个字符
l #改变光标所在处的字符
j #改变本行与下一行
k #改变本行与上一行
w #改变光标开始到下一个单词词首处
b #改变光标开始到上一个单词词首处
e #改变光标开始到这个单词的结尾处
( #改变光标开始到句子结束处
) #改变光标开始到句子开始处
{ #改变光标开始到段落开始处
} #改变光标开始到段落结束处
$ #改变从光标开始处到行尾处
G #改变从光标所在行到文件处
/word #删除从光标开始处到下个 word 字符串,不含 word ( word 指代任意字符串,并可以使用 正则表达式 )
?word #删除从光标开始处到上个 word 字符串,不含 word ( word 指代任意字符串,并且可以使用 正则表达式 )
tc #删除从光标开始处到下个 c 字符处,不含 c ( c 指代任意字符 )
Tc #删除从光标开始处到上个 c 字符处,不含 c ( c 指代任意字符 )
fc #删除从光标开始处到下个 c 字符处,含 c ( c 指代任意字符 )
Fc #删除从光标开始处到上个 c 字符处,含 c ( c 指代任意字符 )
c #删除从光标开始到标记 c 这个位置
2.不可重复的:
[c]+[ 0 / ^ / H / L]
c: #表示改变操作
操作区域选择:
0 #改变从光标所在处到某一行的开始位置
^ #改变到某一行的第一个字符位置(不包括空格或TAB字符)
L #改变直到屏幕上最后一行的内容
H #改变直到屏幕上第一行的内容
[c]+[i]+[ { / } / ( / ) / ” / ‘ ]
c: #表示改变操作
i: #表示 in 即在里面的意思
删除某区域:
可以重复的:
[d]+[num]+[ h / j / k / l / w / b / e / ( / ) / { / } / $ / G / /word / ?word / tc / Tc / fc / Fc / c ]
d: #表示删除操作
重复操作次数: #num 表示操作重复次数
操作区域选择: 同改变区域操作[c]
不可重复的:
[d]+[ 0 / ^ / H / L / { / }[ / ]( / ) / ” / ‘]
d: #表示删除操作
操作区域选择:
0 #删除从光标所在处到某一行的开始位置
^ #删除到某一行的第一个字符位置(不包括空格或TAB字符)
L #删除直到屏幕上最后一行的内容
H #删除直到屏幕上第一行的内容
[d]+[i]+[ { / }[ / ]( / ) / ” / ‘]
d: #表示删除操作
i: #表示 in 即在里面的意思
复制某区域:
可以重复的:
[y]+[num]+[ h / j / k / l / w / b / e / ( / ) / { / } / $ / G / /word / ?word / tc / Tc / fc / Fc / c ]
y: #表示复制操作
重复操作次数: #num 表示操作重复次数
操作区域选择:同选择区域操作[c]
不可重复的:
[y]+[ 0 / ^ / H / L]
y: #表示复制操作
操作区域选择:
0 #复制从光标所在处到某一行的开始位置
^ #复制到某一行的第一个字符位置(不包括空格或TAB字符)
L #复制直到屏幕上最后一行的内容
H #复制直到屏幕上第一行的内容
[y]+[i]+[ { / } / ( / ) / ” / ‘ ]
y: #表示复制操作
i: #表示 in 即在里面的意思
高亮显示
/word #将光标跳转到下一个字符串 word 处,并把所有 word 单词高亮显示( word 指代任意字符串,并且可以使用 正则表达式 )
?word #将光标跳转到上一个字符串 word 处,并把所有 word 单词高亮显示( word 指代任意字符串,并且可以使用 正则表达式 )
gd #将与光标所在处的单词相同的单词全部高亮显示,并跳转到上一个高亮显示的单词
gD #将与光标所在处的单词相同的单词全部高亮显示,并跳转到最前面一个高亮显示的单词
# #光标跳转到下个与光标所在处单词相同的单词,并把所有与光标所在处的相同的单词高亮显示
* #光标跳转到上个与光标所在处单词相同的单词,并把所有与光标所在处的相同的单词高亮显示
:nohl #取消高亮显示
行移动操作
>> #将当前行右移一个单位
<< #将当前行左移一个单位(一个tab符)
== #自动缩进当前行
书签
mc #把当前位置记录为书签 c ( c 为任意字符 )
#当定义多个位置的标签为一样时,只有最后一个定义的位置标签会生效
`c #将光标转移到书签 c 处( c 为任意字符 )
十六进制查看文本内容
%!xxd #按十六进制查看当前文件
%!xxd -r #从十六进制返回正常模式
自动补全
[Ctrl+n] #自动补全向下搜索(前提是以前打过的单词)
[Ctrl+p] #自动补全向上搜索(前提是以前打过的单词)
标记文本
进入标记文本模式
v #进入标记文本模式,单字符模式
V #进入标记文本模式,行模式
[ctrl+v] #进入标记文本模式,列模式,类似于UE的列模式
对标记文本模式中区域选择
aw #选中一个单词,含单词后的空格
as #选中一个句子,含句号后的空格
ap #选中一个段落,含段落后的空格
ab #选中()括号中的所有内容,含()
aB #选中{}括号中的所有内容,含{}
iw #选中一个单词,不含单词后的空格
is #选中一个句子,不含句号后的空格
ip #选中一个段落,不含段落后的空格
ib #选中()括号中的内容,不含()
iB #选中{}括号中的内容,不含{}
除此之外还有上面光标移动的方法,但是要除去组合键,如:[ctrl]+[p]
移动标记文本模式中光标位置
o #光标在选择区域中的对角线之间的跳转
O #光标在选择区域中的横纵之间的跳转
当在 V 与 [ctrl]+[v] 模式中
我们除了 o,O 来移动光标位置外,还可以通过移动光标位置中一些方法来移动光标位置(不是所有而是其中一些)
对标记文本模式中数据操作
~ #将选中块中的内容大小写翻转
u #将选中块中的内容转成小写
U #将选中块中的内容转成大写
y #复制选中块中的内容
d/D/x/X #删除选中块中的内容
>> #将当前块右移一个单位
<< #将当前块左移一个单位(一个tab符)
== #自动缩进当前块
窗口操作
:vne [filename] #打开文件 filename,并把光标所在窗口沿横向分为两个窗口
:vs [filename] #打开文件 filename,并把光标所在窗口沿横向分为两个窗口
:sp [filename] #打开文件 filename,并把光标所在窗口沿纵向分为两个窗口
:S [filename] #打开文件 filename,并把光标所在窗口沿纵向分为两个窗口
:new [filename] #打开文件 filename,并把光标所在窗口沿纵向分为两个窗口
************************************************************
在 new 前面可以加的参数:
leftabove #当前窗口的左上方
aboveleft #同上
rightbelow #当前窗口的右下方
belowright #同上
topleft #整个 Vim 窗口的最上面或者最左边
botright #整个 Vim 窗口的最下面或者最右边
************************************************************
:only #关闭除了编辑以外的窗口,但是那些窗口中要是有文本被改写过并且没有保存那么操作将失败
:close #关闭编辑窗口,如果编辑窗口文本修改过且未保存,或编辑窗口为唯一窗口的话,操作失败
:vertical diffsplit [file] #纵向为 file 开个新的编辑窗口,并且比较原编辑文件和 file 编辑文件的不同
:diffsplit [file] #横向为 file 开个新的编辑窗口,并且比较原编辑文件和 file 编辑文件的不同
:res -n #窗口高度减小n
:res +n #窗口高度增大n
[ctrl+w]+[=] #窗口等宽
[ctrl+w]+[h] #将光标移动到左方的窗口
[ctrl+w]+[←] #将光标移动到左方的窗口
[ctrl+w]+[l] #将光标移动到右方的窗口
[ctrl+w]+[→] #将光标移动到右方的窗口
[ctrl+w]+[j] #将光标移动到下方的窗口
[ctrl+w]+[↓] #将光标移动到下方的窗口
[ctrl+w]+[k] #将光标移动到上方的窗口
[ctrl+w]+[↑] #将光标移动到上方的窗口
[ctrl+w]+[t] #将光标移动到最上方的窗口
[ctrl+w]+[b] #将光标移动到最下方的窗口
[ctrl+w]+[ctrl+r] #将光标所在窗口下移
[ctrl+w]+[ctrl+w] #光标在窗口间切换
[ctrl+w]+[q] #退出光标所在窗口,相当于在光标所在窗口的命令行模式中输入:q
[ctrl+w]+[+] #扩大所在窗口
[ctrl+w]+[-] #缩小所在窗口
对所有窗口执行命令
:qall #退出所有窗口,但是如果你有一个窗口发生改写但未保存 vim 是不会退出的
:wall #保存所有修改过的窗口
:wqall #保存所有修改过的窗口并关闭,然后退出 vim
:qall! #强制退出所有窗口,然后退出 vim
多档案编辑
:n #编辑下一个档案
:N #编辑上一个档案
:files #列出目前这个 vim 的开启的所有档案
执行 shell 命令
:sh #打开 shell,可执行shell命令,输入exit退出shell返回到vim
:!cmd #直接执行 shell ( cmd 表示为任意 shell 命令 )
命令行文本操作
:n1,n2 co n3 #将 n1 行到 n2 行之间的内容拷贝到第 n3 行下.若无『 ,n2』则复制 n1 到 n3 行下
:n1,n2 m m3 #移动 n1 行到 n2 行之间的内容移至第 n3 行下.若无『 ,n2』则将 n1 内容移到 n3 行下
:n1,n2 d #删除 n1 行到 n2 行之间的内容,『 ,n2』则将 n1 行删除
:n1,n2 y #复制 n1 行到 n2 行之间的内容,『 ,n2』则将 n1 行复制
:[range]s/{pattern}/{string}/[flag] [count] # 字符替换
************************************************************
格式说明:
range #表示行数
% #表示所有行
n1,n2 #表示由 n1 行到 n2 行之间,若无 n2 则表示在 n1 行处
s #表示substitution,替换的意思
pattern #表示被替换的字符串
string #表示替换的字符串
flag #表示标志,取值g,i,c等
g #表示global,全部
i #表示ignore,忽略大小写
c #表示confirm,一个一个交互确认替换
count #表示从当前行到接下来的第几行,表示范围
**************************************************************
命令行快捷键:
<c-a> 光标移到命令最前
<c-u> 从光标开始删除到最前
<c-r> 匹配最近输入的命令
<c-s> 锁屏
<c-q> 解除锁屏
<shift + insert > 粘贴
.vimrc 配置
syntax on
set nu
set cindent
set tabstop=4
set shiftwidth=4
set autoindent
set showmatch
set matchtime=1
set backspace=2
set mouse=a
set selection=exclusive
set selectmode=mouse,key
set fileencodings=utf-8,gbk
set encoding=euc-cn
set ambiwidth=double
set hlsearch
set incsearch
set wildmenu
发布时间: 9年前【Linux】149人已围观【返回】【回到顶端】
很赞哦! (1)
相关文章
点击排行

站长推荐

猜你喜欢
站点信息
- 建站时间:2016-04-01
- 文章统计:728条
- 文章评论:82条
- QQ群二维码:扫描二维码,互相交流
