vim学习笔记.docx
《vim学习笔记.docx》由会员分享,可在线阅读,更多相关《vim学习笔记.docx(14页珍藏版)》请在冰豆网上搜索。
vim学习笔记
vim有5中模式:
(1)正常模式normalmode
(2)插入模式insertmode
(3)命令模式commandmode
(4)可视模式visualmode
(5)选择模式selectmode
移动命令motion:
hjkl 左下上右
ctrl+f 往前翻一页
ctrl+b往后翻一页
ctrl+d往前翻半页
ctrl+u往后翻半页
$光标移到行首
^光标移到行尾
0光标移到行首
#G或#shift+g光标移到#行
gg光标移到文件头
G或shift+g光标移到文件尾
H或shift+h光标移到当前页的头
L或shift+l光标移到当前页的尾
M或shift+m光标移到当前页的中间
w 光标移到下一个字的头部
W
e 光标移到下一个字的尾部
E
b 光标退回到上一个字的头部
插入Insert:
I 进入插入模式,从第一个不为空的地方插入
i 在当前光标下前面插入
a在当前光标后面插入
A在当前行尾插入
o 新建一行 --光标动
O新建一行 --光标不动
删除delete:
dd 删除当前行或用大写D
d#w删除当前字开始的#个字
#dd 删除从当前行开始的后面#行
x 删除后面
#x 执行#次命令
X和#X删除前面
修改change:
c#w修改从当前字开始的#个字
C修改当前位置到行尾
复制copy:
yy复制当前行
#yy复制从当前行开始的#行
#yw
yw从当前光标位置开始复制一个字
p 粘贴
替换replace:
r 替换当前光标下的字符
R 替换光标所到之处的字符,知道按ESC为止
回到上一个操作:
u
命令行:
:
setnu 显示行数
/ 正向搜索 可以用n选择下一个符合的字符
?
反向搜索 可以用n选择上一个符合的字符
保存save:
wfile保存文件名为file
wq 保存并退出
q!
强制退出
shift+左键
shift+右键
shift+上键
shift+下键
替换字符串:
:
%s/xxx/yyy 每一行第一个
:
%s/xxx/yyy/g 每一行所有的
:
s/xxx/yyy
:
s/xxx/yyy/g
n,$s/xxx/yyy
n,$s/xxx/yyy/g
可以使用#作为分隔符,此时中间出现的/不会作为分隔符
:
s#vivian/#sky/#替换当前行第一个vivian/为sky/
:
e!
返回到上一次保存
:
efile切换编辑文件
:
n
#当编辑时有多个文件(比如vimfile1file2)时切换到下一个文件,与:
efile
~ 代表该行不会保存在文件中
gvimfilename 在新的窗口中编辑一个文件,多了许多menu按钮
vim filename 在当前的终端中编辑一个文件
vim有好多模式最基本的两个是normalmode和insertmode
要查看mode输入setshowmode
J---join将两行变为1行
#J将从当前行开始的#行合并为一行u
undo和redo:
u--undo最后一次编辑,也就是最后一次完整的insert模式下输入的东西,都会被undo;或者undo最后一次命令如输入xxxx则需要uuuu才能恢复,而不是输入一个u
ctrl+r--- redo和undo是配套用的,即如果没有undoredo就不起作用,就相当于ctrl+z和ctl+y一样
追加:
i---在光标前插入
a---在光标后插入
I----在行首第一个非空处插入
A---在行尾插入
添加新的一行:
o---在当前行下面添加新行,并且进入insert模式
O--在当前行上面添加新行,并且进入insert模式
注:
#+命令代表执行#次命令
#+i+编辑+esc
例如3+a+!
+esc---->!
!
!
退出:
ZZ 保存并退出
没有备份如果ZZ了就不能返回以前的文件了
这里可以开启备份的配置输入命令setbackup,backup的文件名是当前文件名+~ 例如test.txt--->test.txt~ 如果不想有这样的文件名可以自己设定backup的扩展名setbackupext=.bak例如test.txt--->test.txt.bak
q!
---不保存退出
e!
---不保存并且重新加载原文件继续编辑
帮助:
help或者按F1
CTRL+] (jumptotag)将光标放在tag上面,然后ctrl+]相当于鼠标点击超链接
ctrl+T(poptotag)
ctrl+O(jumptoolderposition)
标签tag:
就相当于goto里面的标签用来标识一个位置
可以用ctags*.c命令来生产tag文件,然后在vim中使用:
tagstartlist,这个命令可以找到"startlist"函数,即使它在另一个文件中
:
tags--->列出tags
:
tag--->到达最低端的tag
:
#tag--->返回#次tag
如果想既有当前文件又能看到tag的文件,那么可以使用stagtagname然后ctrl+W+]
移动:
w---往后移动一个单词,单词首部
#w---往后移动#个单词
b---往前移一个单词
#b---往前移#个单词
e---往后移动一个单词单词尾部
#e---往后移动#个单词单词尾部
ge--往前移动一个单词单词尾部
#ge---往前移动#个单词单词尾部
$--移到行尾 键盘上END
^---移到行首(第一个非空)键盘上
0---移到最开端HOME
fx---从当前字符开始查找字符x例如fa查找a
#fx---从当前字符开始查找第#个x字符
Fx---反向查找x
#Fx---反响查找第#个x
tx和fx功能一样,只不过是它最终停在该字符的前面
txTx#tx#Tx
取消查找比如已经按下f,又不想查找了那么接着按下esc
匹配括号:
%---比如将鼠标放在左括号上,然后%那么会自动定位到与该左括号对应的右括号(){}[]
如果光标不在这些符号上,输入%后回自动定位到第一个符号上面
#G--- 如果想回到跳转之前的位置用'',如果你再次使用''则又会回来
G---到文件尾
gg--文件头
H(home、high)---当前页的开头,也就是说你能看见的所有行的第一行
L(last、low)---当前页的开头,也就是说你能看见的所有行的第一行
M(middle)--当前页的中间,也就是说你能看见的所有行的中间
ctrl+G---告诉你当前在哪比如文件名当前位置第几行第几列占总文件的百分之多少
:
setnumber
:
setnonumber
是否显示行号
:
setruler在右下角显示光标的位置比如行列
:
setnoruler取消显示
ctrl+U--向后滚半个屏幕
ctrl+D--向前滚半个屏幕
ctrl+F--向前滚一个屏幕
ctrl+B--向后滚一个屏幕
ctrl+E--网上滚一行,其实内容是往下翻,
ctrl+Y--往下滚一行
查找:
/string 查找某个字符串
对于.*[]^%/\?
~$等特殊字符,需要加反斜杠例如/\^
然后按n--表示光标移动到下一个匹配字符#n--表示光标移动到下#个字符
N--有相反的效果
?
word--向后查找字符串,它的功能与/一样
n---往后N---往前
其实/+n==?
+N
忽略大小写:
setignorecase setnoignorecase
vim会记住输入的查找历史例如/+up(down)或者当你记得需要查找的首字母,你可以/+o+up例如你查找one 不光是/会有历史,:
也会有历史
查询整个单词,排除那些只是某个单词的一部分的内容:
例如输入/the\>只会查找到单词the排除there等包含the的单词,但是这个并没有把xxxthe排除
输入/\这个才是真正的the
*和#---查找到所有跟整个单词匹配的字符串
g*和g#--只要包含该字符串的所有单词都可以
设置高亮查找:
:
sethlsearch
:
setnohlsearch
:
nohlsearch --只是当前查找不高亮显示如果下一次查找还会高亮显示
查找轮回:
:
setwrapscan --当查找的某个字符到达最后一个匹配字符时,再按n则回到第一个匹配的地方
:
setnowrapscan---不会回到第一个匹配的地方在最后一个停止
初始化设置参数:
:
scriptsnames显示一些脚本文件名字
:
edit~/.vimrc然后编辑该文件在改文件最后添加:
sethlsearch
然后ZZ保存退出
这样当你下次打开vim的时候就会默认为hlsearch
查找行首或者行尾的字符
/^string 行首
/$string行尾
匹配任何单个字符用dot(.)
/c.m表示第一个字符是c第二个字符任意第三个字符是m
当你真正的要查找一个.时,需要用转义字符\.
ctrl+O(older)--- 该功能和''功能类似
ctrl+I(I在O旁边)和tab键功能一样
:
jumps列出跳转的位置
可以自己设置marks就是标记类似于书签,到时候通过命令很容易回到这里
命令m{mark}设置比较mark为a~z
定位到该mark使用'{mark}定位到该标记所在行的行首
`{mark}定位到该标记所在列
例如先ma 然后'a就会回到该a标记的地方
操作可以带任意的移动操作:
移动操作有hjklwe$^0等
操作有dc等例如d$ 从当前到行尾删除d4w删除从当前的4个单词d^删除从当前到行首dl--相当于xdh--相当于X
这种即为operator-motion模式
操作符c--change其实它跟d的功能完全一样,只不过c会进入插入模式
而且cw(和ce相同)时不会删除到下一个单词开始处,而dw会删除到下一个单词开始处例如songjun cw---删除了song但dw--删除了song+空格
更多的change:
cc跟dd对应 只不过进入插入模式相当于dd+a
x---dl
X---dh
D---d$
C---c$
s---cl
S--cc--change整行
数字#应该放在哪里:
#dw---作#次dw操作
d#w--一次删除#个单词
这两个效果一样
也可以这样用adbw删除了a*b个单词
替换单个字符:
r--它的功能跟cl和s功能一样,只不过它不需要按esc,也就是说它的整个过程都是在命令模式下进行的
例如thereissomething
rT--->Thereissomething而且还是处于命令行模式
也可以#rT-->替换了
也可以将某个字符替换成回车换行r+
.---重复一个改变的动作--注意这里的改变不包含光标的移动
Togenerateatableofcontents
要删除标签tag
f<
df>
f<
.
f<
.
但是它不会重复u和ctrl+R,以及需要:
的命令
.是一个非常重要
可视模式visualmode
就是将你选种的高亮显示让你很直观的看到你要删除那些东西,这样非常方便,例如你不知道删除几个单词所以不好用d#w但是如果使用v模式,则只要选中这些然后输入d就可以了
如果不想删除这些高亮显示的则按esc
如果想选择整行使用V
Vjj---高亮显示当前行以及下面两行
高亮显示块ctrl+V---选区为一个矩形块
注意operator后面能够跟motion
移动text:
当你使用d或x或者其他操作如c删除时,可以使用p(put不是paste)将被删除的东西黏贴到其他地方注意p操作不需要y操作在当前光标的下面(后面)黏贴
P--在当前光标的上面(前面)黏贴
可以Pp好多次 #p #P
交换两个字符--xp
例如the打成了teh--将光标移到e然后输入xp即可
复制文本:
y(yanking本来是copy但是c被change占了)y是operator所以后面可以跟motion如yw注意yw包含空格ye不包含空格
yy--复制整行
使用剪切板:
当使用的是gui时,可以使用菜单栏里面的copy和paste功能,使用Visualmode选中复制的数据
当没有GUI时,使用''*+y ''*+p的操作
setmodifiable
setnomodifiable
文本对象:
textobject
比如当你在一个word中间时,如果输入dw则只会删除光标一个的单词部分,不能删除整个单词,这时你需要把光标移到单词开始处才能dw掉整个单词
daw--可以简化这种操作,deleteaword
caw也一样
cis
casasentence
上面aword和asentence都是对象
在V模式也可以使用例如v+as这样就选中一行
目前已经有三种方式对文本进行改变
1、operator+motion需要考虑光标位置
2、visualmode
3、operator+text 不需要考虑光标位置
替换模式replacemode
R进入替换模式
在该模式下敲backspace键会恢复原来的数据,而不是删除
~---改变当前光标下的大小写
设置vim参数增加插件扩展vim功能
vimrc文件:
vim在启动时执行该文件,该文件里面有初始化命令
(vi里面是exrc)