VIM笔记(一)
2023年06月29日 14:53

第二章:Simple Editing

移动光标在指挥模式

文本内移动

0:移动到文本开头

$:移动到文本结尾

+:光标下一行开头

-:光标所在行开头

文本块移动

w:移动到单词的结尾(包含空格字符串),如 cursort**,** delete lines**,** iinsert ccharacters**,**

W:向前移动到单词的开头(不计标点符号),ccursort, delete lines, insert characters,

b:向衙移动一个单词

B:向后移动一个单词(不计标点符号)

G:跳转到指定的行

e:单词的结算处不包含标点

E:字符尾部包含标点

简单编辑

a:Append

c:Change

d:Delete

p:Put

y:Yank

x:delete a single character

r:replace a single character

dd:apply the command to the entire line

P:do the operation above the current line, instead of below it

插入新文本

i:在光标前插入

a:在光标后插入

更改文本

c:Change Text

cw: To the end of a word

c2b:Back two words

c$:To the end of the line

c0:To the beginning of the line

cc:To replace the entire current line

C:与c$功能一样

替换文本

r:替换单个字符

R:simply enters overstrike mode. 一直替换直到你输入Esc键

子文本

s:delete the text and enters input model 删除并进入插入模式

S:删除整行并进入插入模式,与cc等效

更改大小写

~:更改大小写,Provide a numeric prefix to change the case of multiple characters.

删除文本

d:加文本对象,表示删除

dw:删除一个单词,从光标所在位置开始删除;总是会删除两个单词之间的空格 ;删除单词最多但不包含标点字符

dW:删除光标下一个单词,直到下一个空格字符

dd:删除整行

D:从光标处删除到结尾与d$相同

de:删除一个单词,但会保留两个单词之间的空格;仅删除到单词的结尾

dE:delete the end of a word, including punctuation. 删除到单词结尾,但包含标点符号

db:向后删除一个单词

d$:从光标处删除到结尾

d0:从光标处删除到开头

x:删除光标当前的字符

X:删除光标当前的前一个字符

数据恢复命令

u:回复上一次操作

U:回复到原始状态

"3p:将3号寄存器的内置粘贴出来 ,单词或行的一部分不会保存在寄存器中,或者使用"ayw 将一个单词复制到寄存器a中

移动文本

p:如果删除不是一行内容的话,会在光标处进行粘贴;如果删除的为一行内容则在光标当前行的下一行进行粘贴;非整行-光标之后,整行-光标下一行

P:如果删除的不是整行内容时,会在光标处前进行粘贴;如果删除的是整行内容则在当前行的前上一行进行粘贴;非整行-光标之后,整行-光标上一行

xp:交换两个字母的位置

复制文本

y:命令也会将内容复制到删除寄存器(deletion register)

yy:复制当前行

Y:复制当前行与yy相同

y0:从光标处开始复制到开头

y^:从光标处开始复制到行开头(不包含空格)

y$:从光标处到结尾进行复制

4yy:从光标处开始向下复制4行

重复与撤消上一次操作

.:可以重复上一次命令

u:撤消上一次编辑,可以不在当前行

U:撤消当前行上的所有操作,如果再按一次,则会恢复到第一次按U的状态

Ctrl+r:撤消撤消操作,也就是回到u上一次状态

更多方法的插入

a:在光标后插入

A:在文本结尾处追加

o:在光标的下一行进行插入

O:在光标的上一行进行插入

s:删除当前字符,并进入插入模式

S:删除行并替换文本,进入插入模式

R:进行替换模式,进行编辑,从光标处开始,进行覆盖

A或a:append

I或i:Insert

O或o:open

S或s:substitute

R或r:replace

Numberic Arguments for Insert Commands

50i*Esc:在光标前插入50个*字符

25a*-Esc:在光标后插入25个*-字符

2r&&:将当前字符以及后面一个字符替换为&字符

2S:删除两进入编辑模板 与2jc命令相同

2s:删除指定字符然后进入插入模式

ea:跳到一个单词结算然后进入插入模式

合并两行

J:将光前行与下一行合并成一行

3J:将3行合并成一行

第三章:Moving Around in a Hurry

Movement By Screens

ctrl+F:向下翻一页

ctrl+B:向上翻一页

ctrl+D:向下翻半页(Down)

ctrl+B:向上翻半页(Up)

ctrl+E:一行一行向下翻页

ctrl+Y:一行行向上翻页

Repositionion the screen with Z

z Enter或 z+:将当前滚动到屏幕的顶部

z.:将当前行滚动到屏幕的中间

zz:将当前行滚动到屏幕的蹭

z-:将当前行滚动到屏幕的底部

20z Enter:20行所在位置滚动到屏幕的顶部

H:光标移动到当前屏幕顶部,不会滚动

L:光标移动到当前屏幕询问,不会滚动

**scrolloff:**如果设置为非值,则回顶部空出几行

ctrl+L:重新绘制屏幕

屏幕内移动

H:移动到屏幕首先的第一个字符

M:移动到屏幕中间行第一个字符上

L:移动到屏幕最后一行的第一个字符上

2H:移动到屏幕首行下第2行的第一个字符

2L:移动到离屏幕最后行的前两行的第一个字符串

按行移动

j:向下移动一行

k:向上移动一行

ENTERY:移动到下行第一个不为空的字符串上,忽略空格与Tab

+:移动到下一行第一个不为空的字符串上与Enter一样,忽略空格与Tab

-:移动到前一行的第一个不为空的字符串,忽略空格与Tab

当前行移动

^:移动到当前行第一个不为空的字符上

n |:移动n个字符在当前行上,如果n大于行的字符串则移动到最后

0:移动到当前行开头,不忽略空白字符

Movement by Text Blocks

文本块包含:单词,句子,段落,章节(sections)

句子:根据标点**?!.** vi 后面跟至少2个空格字符为判断结尾。vim终止标点后一个空格字符即为句子结尾

段落:则是根据两块文本之间是否有空白行来判断

数字组合,编辑组合,复制组件

e:移动到以标点或空格分隔的单词结尾处。也就是说会移到标点或空格前

E:移动到以空格分隔单词结尾处,空格前一个字符串

(:移动到当前行句子的开头处

):移动到下一句子的开头处

{:移动到当前段落的开头处

}:移动到下一个段落的开头处

[[:移动到当前章节的开头处

]]:移动到下一个章节的开头处

3):向后移动3个句子

d):删除一个句子

Movement By Searches

/ pattern ENTER:从前向后找,在当前文件中进行搜索,如果能搜索到光标会停止在第一次出现的位置

? pattern ENTER:从后往前找,

**最后的搜索模式在全局是

重复搜索

n:向同一个方向重复搜索

N:向相反的方向重复搜索

/ ENTER:向前重复搜索

? ENTER:向后重复搜索

通过搜索改变

d/move ENTER:从光标处删除到搜索的位置

当前行搜索

f x: find 光标移动到找到的x字符上,从前向后找

F x:光标移动互找到的x字符串,从后向前找

t x:up to 光标移动到找到的字符x的前面一个字符上,从前向后找

T x:光标移动到找到x字符后一个字符, 从后向前找前,

;:同一个方向重复搜索

,:反方向重复搜索

dfx:从光标开始的位置删除到x字符位置

ct.:从光标处删除到.的前一个字符,并进入插入模式

Movement by Line Number

G Go To ,将光标移动到文件最后一行

22G:移动到22行处

``:回到原始的位置,最后一次执行G的位置

'':回到上次标记的位置

Ctrl+G:展示当前行,非移动命令

第四章:Beyond the Basics

更多的编辑命令

Change Delete Copy From cursor to..
cH dH yH Top of screen
cL dL yL Bottom of screen
c+ d+ y+ Next Line
c5| d5| y5| Column 5 of curent line
2c) 2d) 2y) Second sentence following
c{ d{ y{ Previous paragraph
c/ pattern d /pattern y / pattern Pattern
cn dn yn Next Pattern
cG dG yG End of file
c13G d13G y13G Line number 13

两个通用模式

  • (command)(number)(text object)
  • (number)(command)(text object)

text object:移动命令

打开文件时的选项

高级跳转位置

vim -c n file:打开一个文件,光标在指定n行处

vim -c / pattern file:打开文件,光标在第一次pattern发生的位置, 如果wrapscan选项已经禁用则无法使用

vim + file:打开文件,光标在最后一行

只读模式

vim -R file:只读模式打开一个文件

view file:使用只读命令打开一个文件

恢复缓冲区

ex -r fileName:恢复某个文件的缓存

vi -r fileName:恢复某个文件的缓存

:pre:将当前的编辑缓冲进行保留,也就是会写到.swp文件中

使用寄存器

部分行的小删除不会保存到编号寄存器

"* :对应粘贴寄存器

"":默认寄存器

"0-9:0-9号寄存器

"a-z:a-z号寄存器

"2p:将2号寄存器的内容粘贴出来

"1pu.u.u.:可以从1号寄存器开始获取每个寄存器的内容

复制到名称寄存器

"dyy:将当前行复制到d寄存器

"a7yy:将当前以下7行复制到a寄存器

"dP:将d号寄存器中的内存复制到当前行的上一行位置

"ap:将a号寄存器中的内容复制到当前行的下一行位置

"zd)":删除从光标处到句子结尾,然后存放到z寄存器

"Zy)":将当前光标到句子结尾,追加到z寄存器

标记位置

m x:使用x标记当前位置,原始的vi只支持小写字母,vim支持大小写字母

'x:将光标移动互x标记位置的所在行的第一个字符

``x`:将光标移动到标记的位置x处

'':返回到前一个标记或上下文的行首。移动到标记的行处

``:移动后返回到前一个标记或上下文的确切位置。移动到标记处

d`a:从光标处删除到指定标记点位置

d'a:从光标处删除到指定标记点所在行,所在行也会删除

可以通过两次标记来删除内容

第五章:Ex编辑器

::进入Ex编辑器模式

定义范围行

:3,18d:删除第3行到18行,包括第3行和第18行

:160,224m23:将160行到224行的内容移动到23行

:23,29co100:将23-29行内容复制到100行后

:set nu:设置显示行号
:set nonu:设置不显示行号

:set !nu:设置不显示行号 vim

:1,10#:显示1到10行的内容在下方

:=:显示总行数

:.=:显示当前光标所在行的行数

:/pattern/=:显示从光标所在位置开始向下搜索第一次出现pattern的行号

行寻址符号

.:表示 当前行

$:表示文件最后一行

0:表示文档的顶部,相当于1-

%:表示文件中的每一行

:.,$d:从当前行删除到最后一行

:20,.m$:将20行到当前行的内容移动到最后一行

:%d:删除文件中的所有行

:%t$:复制所有的行到文件最后(连续复制)

可以使用+-运算符来操作

:.,.+20d:删除当前行以下20行

:226,$m.-2:将226行到最后一行移动到当前行的上2行

:.,+20#:显示当前行到下20行的内容

:-,+t0:将当前行的上一行与下一行,一共3行复制到顶部

可以省略.来操作;直接使用+-进行相对定位操作;当+-没有数字时,默认为1; 也可以使用++--来移动2行

搜索模式

:/pattern/d:从光标下一行开始进行匹配,删除匹配到pattern的行

:/pattern/+d:从光标一下开始进行匹配,删除匹配到pattern行的下一行

:/pattern1/,/pattern2/d:删除从pattern1匹配的行到pattern2的行

:.,/pattern/m23:将当前行到匹配到pattern的行移动到第23行

:?pattern?d:从光标上一行开始进行匹配,删除匹配到pattern的行

:/pattern1/,/pattern2/t10:从光标下一行开始,从匹配到pattern1的行到pattern2的行复制到第10行

d/pattern:删除从光标位置到第一次匹配到pattern的位置中的字符

:.,/while/d:删除从光标处到第一次匹配到while的行

重新定义当前行的位置

:100,+5p:执行这个命令时会报错,vim会理解为从100行,到光标下5行的位置进行打印,如果光标所在行+5小于100则会报错,如果想实现100行以及100以下5行需要进行打印,则需要执行:100;+5p,其中;将重新定义位置

:100;+5p:将第100行到100行以下5行进行打印

:/pattern/;+10p:打印匹配到的pattern下10行进行打印

全局搜索

g:显示包含模式的行。

g!:表示不包含模式的行,与v相同

:g/pattern:显示文件中最后一次出现pattern的位置

:g/pattern/p:显示所有匹配到位置
:g/pattern/nu:带行号显示所有匹配的位置的行号

:g!/pattern:显示 没有匹配pattern的内容

:60,120g/pattern/p:显示60到120行所有匹配到pattern的行

结合Ex命令

:1,3d | s/pattern1/pattern2/:删除1到3行,然后对第4行的进行pattern1与pattern2的替换

:1,5m10| g/pattern1:将第1到5行移动到第10行,然后显示匹配到的pattern1所在行的内容

保存并退出文件

ZZ:保存并退出文件;将缓冲区写入到文件,但不退出

:w:只保存文件

:wq:保存并退出文件,即使文件没有更新,写入也是无条件发生的。这会更新文件的修改时间.

:x:写入文件并退出,只有当文件修改时,才会被修改。

:w!:强制写入

:q!:强制退出,还原原来的文件

保存部分文件

:230,$w newfile:将230到文件结尾保存到新文件中

:.,600w newfile:将当前行到600行保存到新文件中

追加文件内容

:240, $w >> file:将240行到文件结尾的内容追加到文件中

复制一个文件到另一个文件

:r filename:将一个文件内的内容插入到光标所在位置的下一行。

:10r filename:将filename中的内容插入到第10行

:$r filename:将文件内容插入到文件最后一行

:0r filename:将文件内容插入到文件开头

/pattern/r filename:将文件插入到pattern匹配的位置

编辑多个文件

vim file1 fiel2:vim打开多个文件

:n:下一个文件

:args:显示 参数列表,用括号括住的是文件名

:rewind:可以将当前文件设置为第一个文件名

:prve:返回上一个文件

:last:下一个文件

:e filename:打开其它文件,如果文件存在,如果不存在则会以单词为内容新建立一个文件

文件引用

:%:当前文件名

:e#:可以回到上一次编辑的文件

:e! #:放弃当前编辑的内容,返回到上一次文件中

:e!:放弃当前编辑的内容,返回上一次保存的节点

: w %.new:将当前文件保存为另与文件相同的.new文件

ctrl+^:可以快速切换到上一个文件中,相当于:e #

文件之间的编辑

两种方式,一种在command model下,一种是在ex command model下来操作

方式一

"a4yy:将当前行以下4行复制到a寄存中

e filename: 打开一个新的文件

"ap:将a寄存器的内容复制到 filename中

方式二

:23,24ya a :将23到24行内容复制到a寄存中

pu a:将a寄存中的内容复制出来

第六章:全局替换

替换命令

:s/old/new/:将old替换成new,只替换old第一次出现的位置

:s/old/new/g:将全文中的old替换成new

:50,100s/old/new/g:将第50到100行的内容进行替换

:1,$s/old/new/g:从第1行到文本结尾进行内容的替换

%s/old/new/g:全文替换与1,$相同

确认替换

:1,30s/his/the/gc:每一次替换都需要进行确认

跨文件Doing Things