vim_study
vim学习笔记#
启动vim:#
vim -c file :在打开文件前,先执行指定的命令
vim -r file :恢复上次异常退出的文件;
vim -R file :以只读的方式打开文件,但是(可以强制保存<:q>)
vim -M file :以只读的方式打开文件,不可以强制保存。--重点******
vim + file :从文件的末尾开始;
vim +num file :从第num行开始;
vim +/string file :打开file,并将光标停留在第一个找到的string上
vim --remote file :用已有的vim进程打开指定的文件。如果你不想启用多个vim。
文档的操作
- :e file --关闭当前编辑的文件,并开启新的文件。如果对当前文件的修改未保存,vi会警告
- :e! file --放弃对当前文件的修改,编辑新的文件。
- :e + file --开始新的文件,并从文件尾部开始编辑。
- : e+n file --开始新的文件,并从第n行开始编辑。
- : enew --编辑一个未命名的新文档。(CTRL-w n)
- : e --重新加载当前文档
- : e! --重新加载当前文档,并丢弃已做的改动。
- : e#或ctrl+^ --回到刚才编辑的文件,很实用。
- :f 或ctrl+g --改变编辑的文件名,这时再保存相当于另存为。
gf -- 打开以光标所在字符串为文件名的文件。
:w -- 保存修改。
:n1,n2w filename --选择性保存从某n1行到另n2行的内容
:wq --保存并退出
ZZ --保存并退出
:x --保存并退出
:q --退出当前窗口。
:saveas newfiename -- 另存为
vim的安装:建议使用Linux系统使用vim
-
输入vim命令进入vim
-
进去之后的模式是normal模式即普通模式
-
使用:q可以退出vim
编辑:使用“i”进入编辑模式,开始输入文字
i表示(insert),a(append),o(open aline below)
-
使用ESC又可以回到normal模式。使用:wq保存退出
-
i: 在光标前插入;一个小技巧:按8,再按i,进入插入模式,输入=, 按esc进入命令模式,就会出现8个=。 这在插入分割线时非常有用,如30i+
就插入了36个+组成的分割线。 -
I: 在当前行第一个非空字符前插入;
-
gI: 在当前行第一列插入;
-
a: 在光标后插入;
-
A: 在当前行最后插入;
-
o: 在下面新建一行插入;
-
O: 在上面新建一行插入;
-
:r filename在当前位置插入另一个文件的内容。
-
:[n]r filename在第n行插入另一个文件的内容。
-
:r !date 在光标处插入当前日期与时间。同理,:r !command可以将其它shell命令的输出插入当前文档。
-
改写插入:
-
c[n]w: 改写光标后1(n)个词。
-
c[n]l: 改写光标后n个字母。
-
c[n]h: 改写光标前n个字母。
-
[n]cc: 修改当前[n]行。
-
[n]s: 以输入的文本替代光标之后1(n)个字符,相当于c[n]l。
-
[n]S: 删除指定数目的行,并以所输入文本代替之。
注意,类似cnw,dnw,ynw的形式同样可以写为ncw,ndw,nyw。
命令 | 说明 |
---|---|
i | 在当前光标处进行编辑 |
I | 在行首插入 |
A | 在行末插入 |
a | 在光标后插入编辑 |
o | 在当前行后插入一个新行 |
O | 在当前行前插入一个新行 |
cw | 替换从光标所在位置到一个单词的结尾字符 |
命令行模式:
命令 | 说明 |
---|---|
:q! | 强制退出vim,不保存 |
:q | 退出vim |
:wq! | 强制保存并退出vim |
:w <文件路径> | 另存为 |
:saveas <文件路径> | 另存为 |
:x | 保存并退出vim |
:wq | 保存并退出vim |
:set nu | 显示行号 |
:ce(center) | 本行内容居中 |
:ri(right) | 本行内容居右 |
:le(left) | 本行内容居左 |
:set shiftwidth=10 | 设置缩进为10个字符,以此类推(输入Esc回到普通模式,再次尝试>>看缩进是否变化) |
:vs | 竖分屏 |
: sp | 横分屏 |
“cat”这个命令可以查看文档下的英文内容,“注意”如果是中文就会出现乱码#
使用normal模式下的 v命令,进入visual模式,v+ j/k/h/l 进行文本选中
对于选中的文本进行如下按键:
(1.1)d ------ 剪切操作
(1.2)y -------复制操作
(1.3)p -------粘贴操作
(1.4)^ --------选中当前行,光标位置到行首(或者使用键盘的HOME键)
(1.5)$ --------选中当前行,光标位置到行尾(或者使用键盘的END键)
- 使用命令替换文中的内容 “: %s /替换前文本/替换后文本/g(全局替换)
Visual(可视模式)
-
Normal模式下使用V进入visual选择
-
使用v选择行
-
使用Ctrl+v块选择
vim编辑技巧#
-
如何快速纠正错误:进入vim之后使用a/i/o之一进入插入模式
-
ctrl+h删除上一个字符,ctrl+w删除上一个单词,ctrl+u删除当前行
终端编辑:
使用ctrl+A快速移动到开头,使用CTRL+E快速移动到结尾,使用CTRL+B往前移,使用CTRL+F往后移
快速切换insert和normal模式
使用CTRL+C代替ESC(但是可能会中断某些插件)或者"使用CTRL+["
快捷键:
”gi“快速跳转到你最后一次编辑的地方并进入插入模式
**快速移动的方式
:bn 和 :bp → 你可以同时打开很多文件,使用这两个命令来切换下一个或上一个文件。(陈皓注:我喜欢使用:n到下一个文件)
NG → 到第 N 行 (陈皓注:注意命令中的G是大写的,另我一般使用 : N 到第N行,如 :137 到第137行)
gg → 到第一行。(陈皓注:相当于1G,或 :1)
G → 到最后一行。
快速移动方式:
H, J,K,L左下上右
- w/W移动到下一个word/WORD开头。e/E下一个word?WORD尾
b/B回到上一个word/WORD开头,可以理解为backword
word指的是以非空白符分割单词,WORD以空白符分割单词
normal 移动的快捷方式:
w/W: 移动到下一个word/WORD 开头
e/E: 移动到下一个 word/WORD 结尾
b/B: 移动到上一个 word/WORD 开头 (backword)
行间搜索移动
f{char}: 当前光标往行后搜索字符, 分号(;)下一个找到的字符,逗号(,)上一个找到的字符
F{char}: 当前光标往前搜索字符
0: 移动到行首第一个字符
^: 移动到第一个非空白字符
$: 移动到行尾
g_: 移动到行尾非空白字符
页面移动
gg: 文件开头
G: 文件结尾
H: 屏幕的开头(Head)
M: 屏幕的中间(Middle)
L: 屏幕的结尾(Lower)
crtl+u: 上翻页(upword)
ctrl+f: 下翻页(forword)
zz: 将光标所在的一行设置到屏幕的中间
”syntax on"代码高亮
行间搜索移动:
同一行快速移动的方式其实是搜索一个字符并且移动到该字符
- 使用f{char}可以移动到char字符上,t移动到char的前一个字符
- 如果没有搜索到,可以用分号(;)逗号(,)继续搜该行下一个/上一个
- 使用大写F就可以反方向搜索
水平移动:
快速移动到一行的行首和行尾:
- 0 移动到行首第一个字符,^移动到第一个非空白字符
- $ 移动到行尾,g_移动到行尾非空白字符
垂直移动:
使用括号()在句子间移动,可以用:help(来查看帮助)
使用{ }在段落之间移动
使用esay-motion插件移动
页面移动:
gg/G 移动到文件开头和结尾。可以使用ctrl+o快速返回
H/M/L跳转到"屏幕"的开头(Head),中间(Middle)和结尾(Lower)
ctrl+u.ctrl+f.上下翻页。(upword/forward)。zz把屏幕设置为中间
vim快速增删改查#
数字+命令可多次执行该命令
删除:
x 删除一个字符
d[object] 删除一个[object]
[object]包括但不限于:
(a)w 单词(包含空白符)
iw 单词(不包含空白符)
$
0
...
dd 删除当前行
dt[char] 删除直到[char]的字符
修改:
r 替换当前字符
R 进入替换模式
s 删除当前字符并进入插入模式
S 删除当前行并进入插入模式
c[object] 删除一个[object]并进入插入模式
ct[char] 删除直到[char]的字符并进入插入模式
C 删除当前行光标后所有字符并进入插入模式
查询:
:set hls 搜索结果高亮
:set incsearch 增量搜索
/[string] 正向搜索
?[string] 反向搜索
其中:
n/N 下一个/上一个匹配
*/# 当前单词的正向/反向匹配
增加字符:
使用“i"插入模式编辑文本
使用a/i/o进入插入模式
快速删除:
vim在normal模式下使用"x"快速删除一个字符
使用"d"(delete)配合文本对象快速删除一个单词daw(d around word)
dw删除这一个单词 daw删除单词和周围空格 diw删除单词留下空格
dd删除一整个行
dt)表示删除括号内的所有内容
dt""快速删除双引号内的所有内容
d0快速删除到行首
d$快速删除到行尾
数字+d表示删除几行
数字+x表示删除几个字符
快速修改
常用的有三个,r(replace),c(change),s(substitute)
- 在normal模式下使用r可以替换一个字符。s替换并进入插入模式 ,大写S可以替换整行并进入插入
- 使用C配合文本对象,可以快速进行修改
vim查询
- 使用/或者?进行前向或者方向搜索
- 使用n/N跳转到下一个或者上一个匹配
- 使用*或者#进行当前单词的前向和后向匹配
vim的搜索和替换
substitute命令允许我们查找并且替换掉文本,并且支持正则表达式
全局加上S 表示替换,g表示全局替换
替换::% s/要替换的/替换成的/g.c.n
c-r 撤销u命令
\ <精确单词>
:% s/self/this/g 表示在一个文件中用this全局替换掉self
- g(global)表示全局范围内执行
- c(confirm)表示确认,可以确认或者拒绝
- n(number)报告匹配到的次数而不替换,可以用来查询匹配次数
:1,6 s/self/size/g(范围内的使用方式)
如何保存自己写的文档#
在写完代码或者文档以后,使用<:w 文件名.txt>储存文件里(注意一般C盘里会生成swp的文件)所启动盘符的位置
如何使用vim新建文件#
新建文件<:new 文件名.后缀>
新建完成后注意使用:w保存否则直接关闭不会产生文件,如果录入了内容,关闭时会提醒你保存
如何打开文件#
一、 打开文件<:e 文件名>注意:可以使用tab键进行文件夹名称和文件名称的自动补全,可以多次按tab,直到找到需要的。
如何使用vim去打开一个文件
vim file1
二、
vi flname1 flname2 可以同时打开多个文件; 只打开一个文件时,操作结果和``":e"``命令相同。
三、 <:split> `文件``会将当前窗体分为多个区域,在新的区域打开文件。
四、 ":tabnew 文件名“," : tabe 文件名”
外部命令#
:! cmd 执行外部命令。
:!! 执行上一次的外部命令。
:sh 调用shell,用exit返回vim。
:r !cmd 将命令的返回结果插入文件当前位置。
:m,nw !cmd 将文件的m行到n行之间的内容做为命令输入执行命令。工作目录:
- :pwd 显示vim的工作目录。
- :cd path 改变vim的工作目录。
- :set autochdir 可以让vim 根据编辑的文件自动切换工作目录。
文件之间的切换#
先使用``":ls"``查看已经打开的文件列表和编号, 然后使用``":e#编号"``切换需要编辑的文件。 在``:ls``中各文件的编号在未离开vim前是不会变的;<br>这可以切换到a.txt进行编辑。
概念:
Buffer: 内存缓冲区
Window: Buffer的可视化分割区域
Tab: 组织Window为一个工作区
补全命令 :ls 列举当前缓冲区
:b [num] 跳转到[num]缓冲区
:b [name] 跳转到[name]缓冲区
:bpre/bnext/bfirst/blast 跳转到上一个/下一个/第一个/最后一个缓冲区
:e [name] 打开[name]文件
窗口分屏操作
窗口分屏
Ctrl(首先进行分屏操作)
垂直分割(:vs)
水平分割(: sp)
ctrl + w 在窗口之间切换和移动
以使用快捷键操作下面的内容:
C-w s 水平分割窗口
C-w v 垂直分割窗口
C-w w 循环切换窗口
C-w h/j/k/l 切换到←/↓/↑/→窗口
C-w H/J/K/L 移动当前窗口向←/↓/↑/→
C-w = 所有窗口等宽高
C-w _/| 当前窗口最大化高度/宽度
[num]C-w _/| 当前窗口高度设为[num]行/列
Tab(标签页)将窗口分组
:tabnew 新建标签页
:tabe [name] 在新标签页打开[name]文件
:tabc 关闭当前标签页和窗口
:tabo 只保留当前标签页并关闭其他的
C-w T 将当前窗口移动到新标签页
:tabn [num] 切换到[num]标签页,没有[num]表示下一个
[num]gt 同上
:tabp 切换到上一个标签页
gT 同上
修改文件名称#
操作命令是:":f 新的文件名称"
:f` `新的文件名称
保存和退出#
write命令 对文件进行保存 :w保存不退出 :q`退出文件:wq保存并退出``:q``! 不保存并退出``:x` `退出,如果文件更改则保存``shift + ``Z` `+``Z` `退出,如果文件更改则保存(按住Shift,再按两次z)
使用<:qa>可以退出到shell
另存为#
:saveas 另存为名称.txt
Vim系统的帮助#
vim帮助
进入
vim
之后,是普通模式输入 : 进入
命令行
模式有命令不会就使用
:help
或者直接用功能键 F1
比如说
:qa
不会就
:help
这个:qa
输入
:help :qa
:help
的对象是:qa
,中间留了一个空格回车 之后执行命令
注意可以用
:q
先退出当前帮助:help命令有两种写法
- 完整
:help
- 简写
:h
正常模式
(Normal mode)
- 也叫默认模式。
- 进入
vim
时默认的模式所有输入的键都直接对应着命令- 也被叫做命令模式.
插入模式
(Insert mode)
- 任何键盘录入都会插入到当前文档中
可视模式
(Visual mode)
- 很像正常模式
- 但是移动命令会改变选中的一块高亮区域
- 执行的命令会对选定范围进行
选择模式
(Select mode)
- 可以用鼠标或光标键高亮选择文本
- 任何输入都会替换选择的高亮文本
- 并进入插入模式
命令行模式
(Command-Line mode)
- 可以窗口下方执行一条命令
- 一般是通过 : 执行单行命令
- 通过 / 和 ? 进行搜索
Ex mode
(多行命令执行模式)
Ex
指的是Execute
- 在
Normal
正常模式下使用 gQ 进入- 使用
:visual
退出
查看当前文件的信息#
使用:file 可以在状态栏看到当前文件的信息
如何使用键盘跳转vim所打开的文件中的链接#
使用光标或者键盘那移动到链接上使用<ctrl + ] >就可以跳入链接。
使用 <ctrl + o >可以跳出链接,回到原位置
注意(退回到命令模式)#
按 esc 或 ctrl+c 退回到命令模式
尽量使用 ctrl+c
重复的插入#
使用i进入插入模式以后输入相关内容。
再使用ctrl + c退回到正常模式 按下.可以重复刚才的操作。
撤销插入的内容#
使用 < u >可以撤销操作
- 在正常状态下按 ctrl+r 可撤销撤销操作
i 在当前的光标之前插入
I 在本行文本的最前面插入
A
在本行 最后 插入
a 在当前光标之后插入
. 重做
u 撤销
ctrl+r 还原
插入:#
i
是在光标所在的字符之前插入需要录入的文本。
I
是在光标所在行的行首插入需要录入的文本。
a
是在光标所在的字符之后插入需要录入的文本。
A
是在光标所在行的行尾插入需要录入的文本。
o
是光标所在行的下一行行首插入需要录入的文本。
O
是光标所在行的上一行行首插入需要录入的文本。
s
删除光标所在处的字符然后插入需要录入的文本。
S
删除光标所在行,在当前行的行首开始插入需要录入的文本。
i
和a
都是Insert mode commands
插入位置
i
是before cursor
在光标前插a
是after cursor
在光标后插对应命令
i
意思是insert
a
意思是append
区别:
i 在当前的光标之前插入
I 在本行文本的最前面插入
A
在本行文本 最后 插入
- a 在当前光标之后插入
- o 本行下方插入一个新行
- O 本行上方插入一个新行
注意跳转到行首是使用^,跳转到行尾是使用$
跳到某行#
首行是
尾行是
2G 跳到第2行
3G 跳到第3行
4G 跳到第4行
gg 跳到第一行
G 跳到最后一行
set显示行号#
- :set number 是显示行号
- set 是命令,可以设置各种属性
number 是 :set 的参数 option
使用:set nonumber关闭number,不显示行号
简写
:se nu
se nonu
显示相对行号
:set relativenumber
相对行号简写
set relativenumber 简写 se rnu
set norelativenumber 简写 se nornu
使用命令的模式跳转
:30 跳到 第30行
:40 跳到 第40行
:999 跳到末尾,如果总长度没有999.的话
查看当前文件有多少行
:f[file]
或者 ctrl + g
配置文件#
首先打开原来的配置文件,~代表用户文件夹
vi ~/.vimrc
可以用/statusline找到状态条的写法
各种实用开关#
set number
显示行号set relativenumber
显示相对行号set cursorline
光标所在的当前行高亮set cursorcolumn
光标所在的当前列高亮set nocompatible
使用vim
模式,不与Vi
兼容syntax on
打开语法高亮set showmode
在底部显示,当前所处模式set showcmd
命令模式下,在底部显示键入指令set mouse-=a
纯键盘操作set encoding=utf-8
使用 utf-8 编码set autoread
硬盘文件变化后,自动读取- 把上述这些存储到
~/.vimrc
之后,以后这些配置就会自动起作用了- 也可以去
github
搜索.vimrc
找到关于配置的更多信息
复制#
命令是 :y对应的单词是yank
-
找到一行 然后进行yy操作
-
观察
:reg
发现这一行已经进入了寄存器 -
找到一个合适的地方
p
- 可以把寄存器里面的内容放到当前行下面
vim 分屏操作#
使用组合键 ctrl + w s 这个命令就是上下分割当前打开的文件
按住冒号:,接着输入sp,在键入文件名,如下:
:sp file
上面这个命令将会上下分割当前文件和新打开的file
同样使用组合键 ctrl + w ,然后按下v
ctrl +w v
上面这个命令将会左右分割当前的文件
按住冒号 : ,接着输入vsp,在键入文件名称,如下
:vsp file
上面的这个命令将会左右分割当前打开的文件 和新打开的文件file
分屏以后如何在文件之间切换光标,和移动分屏:
1、切换左右分屏的光标:
ctrl + w h
将当前光标定位到左边的屏幕
ctrl + w l
将当前的光标定位到右边的屏幕
2、移动左右分屏:
ctrl + w H
将当前的分屏移动到左边
ctrl + w L
将当前的分屏移动感到右边
3.切换上下分屏的光标 :
Ctrl + w j
将当前的光标移动到下面的分屏
Ctrl + w k
将当前光标移动到上面的分屏
4.移动上下分屏:
Ctrl + w J
将当前的分屏移动到下面的分屏
Ctrl + w K
将当前的分屏移动到上面的分屏
如何关闭分屏呢?
Ctrl + w c
上面这个命令是关闭当前的分屏
Ctrl + w q
上面的这个命令也是关闭当前的分屏,如果是最后一个分屏将会退出 VIM 。
vim分屏打开不同的文件#
vim -On [FILE_1] [FILE_2] ...
vim -on [FILE_1] [FILE_2] ...
-O:垂直分割(vertical)
-o: 水平分割(默认horizontal)
n: 表示分几个屏,可以缺省不写,默认按后面要分割的文件数来决定分几个屏
[FILE_1][FILE_2]: 需要打开文件
查找文本中匹配的目标字符串#
查找字符串</{目标内容}>
查到以后,输入键盘上的 n 会去寻找下一个匹配,N 会去寻找上一个匹配。
:set noic 该命令用来区分大小写的查询。
该命令用来区分大小写的查询。
删除多行文本#
#
:n1,n2d
n1和n2指的是起始行号和结束行号,d是删除关键字
vim处理文本的替换
:{作用范围}s/{目标}/{替换}/{替换的标志}
:s/zempty/handsome/g
将会把当前光标所在行的 zempty 替换成 handsome
:%s/zempty/handsome/g
将会把全文中的 zempty 替换成 handsome
:n1,n2s/zempty/handsome/g
这里的 n1 和 n2 值得是行号,将会替换掉 n1 到 n2 的所有 zempty 为 handsome.
vim的复制、粘贴、删除
三个重要的快捷键
d
,y
,p
d
是删除的意思,通常搭配一个字符 ( 删除范围 ) 实现删除功能,常用的如下:
dw
删除一个单词
dnw
删除 n 个单词,
dfa
删除光标处到下一个 a 的字符处( fa 定位光标到 a 处 )
dnfa
删除光标处到第 n 个 a 的字符处
dd
删除一整行
ndd
删除光标处开始的 n 行
d$
删除光标到本行的结尾
dH
删除屏幕显示的第一行文本到光标所在的行
dG
删除光标所在行到文本的结束
y
是复制的意思,通常搭配一个字符(复制范围)实现复制的功能,常用的如下:
yw` 复制一个单词,还有 `ynw yfa` 复制光标到下一个 a 的字符处,还有`ynfa yy` 复制一行,还有 `nyy
y$
复制光标到本号的结尾
yH
复制屏幕显示的第一行文本到光标所在的行
yG
复制光标所在行到文本的结束
p
,P
是黏贴的意思,当执行完复制或者黏贴的命令以后,VIM 会把文本寄存起来。
p
在光标后开始黏贴
P
大写的 P 光标前开始粘贴
撤销操作和恢复
u
撤销刚才的操作
ctrl + r
恢复撤销操作
删除字符操作和替换
x
删除光标当前所在的字符
r
替换掉光标当前所在的字符
R
替换掉从光标开始以后的所有字符,除非<ESC >
退出,或者jj
(代替上文有提到)退出。
重复命令1#
VIM 的重复命令
. 该命令是重复上一个操作的命令
n重复某个命令 n 次,
如 10p复制 10 次,10dd 删除十次。
代码提示功能#
在编辑模式下 ,快捷键 Ctrl+n 或者 Ctrl+p 会有代码提示功能,我们可以实现快速录入的效果。
宏录制和使用#
VIM 的宏录制
假设需要操作的文本如下,需要将如下文本的每一行的行首插入入一个 tab 键。
hello
hello world
hello world , vim
宏录制的录制操作先将光标移动到第一行,在普通模式下按下 q 键(宏录制是 q 键启动的),在按一个 a (字母随意),表示该宏注册为 a ,按下 I 在行首插入一个 tab 键,按下jj或者
退出编辑模式,按下 j 将光标移动到下一行行首,最后按下 q 键完成录制操作(宏录制是 q 键结束的)。
总结上面例子的操作流程:
q → a → I → tab → jj → j → q
上面的例子成功地把在行首插入 tab 的功能录制了下来,那么如何应用到其他行呢?宏录制的使用
上述的例子,在正常模式下,按 @a执行宏录制的一系列动作,将会在第二行执行插入 tab 。
@@ 是对上一次宏使用的重复操作。n@a 就会执行 n 次一系列的动作。使用宏录制可以一次执行一系列的操作,可以针对一些重复度较高的操作进行宏录制。
可视化模式下 v 的特殊操作#
当操作的文本光标在 “”,‘’ ,(),{} ,[(双引号,单引号,小括号,大括号,中括号)
当中的时候,可以通过 va"选中 ”“ 内的所有内容包括双引号 ,vi" 选中 "" 内的所有内容,不包括 ""。va,vi 会快速选择区域,va 后面会紧跟一个区域结束标志,a 会选中结束符标志,i 就不会。例子如下:
"hello world [VIM is so strong],{we all can master vim skill}"
假设当前光标定位在上面的文本 M 处:
va] 操作将会选中以下文本(加粗部分):
“hello world[VIM is so strong]*,{we all can master vim skill}“
vi] 操作将会选中如下的区域,没有包含 []:
“hello world [VIM is so strong*],{we all can master vim skill}“
vim如何与外界粘贴复制#
\1. 用vim 打开一个文件,然后执行命令:reg 查看是否有 + 或者 × 号 或者执行:version 命令 查看是否有+clipboard
如果存在:
则可以使用 “+y 将vim 里面的内容复制到系统剪贴板或者 +p 将系统剪贴板里面的内容复制到vim 里面
如果不存在:
则需要安装vim-gnome, 然后就可以用以上命令粘贴复制
\2. 可以在 /etc/vim/.vimrc 里面设置 clipboard=unnamedplus 这样就可以直接使用 y p命令直接粘贴复制了
vim[命令](Vim使用笔记 - JollyWing - 博客园 (cnblogs.com))
:pwd 显示vim的工作目录。
:cd path 改变vim的工作目录。
:set autochdir 可以让vim 根据编辑的文件自动切换工作目录。
执行外部命令:
:! cmd 执行外部命令。(这里的命令指的是例如Windows的命令提示符)
:!! 执行上一次的外部命令。
:sh 调用shell,用exit返回vim。
:r !cmd 将命令的返回结果插入文件当前位置。
:m,nw !cmd 将文件的m行到n行之间的内容做为命令输入执行命令。
快速删除#
- :使用 a/i/o等命令进入插入模式
- :ctrl + h 删除上一个字符
- :ctrl + w 删除上一个单词
- :ctrl + u 删除当前行(这个与
- 是一样的效果)
- :
- :
- :
- :快速切换模式的快捷键 :ctrl + c 或者 ctrl + [ 这两个可以
- :A keyboard is recommended here poker2
quick travel#
h,j,k,l(左,下,上,右)
- :
- :
- :
- :
- :
- :
- :
- :
- :
- :
- :
- :
vim的文本概念:#
什么是vim的text object
vim的文本对象(text object)
[number]
[text object] number表示次数,command是命令, d(elete), c(hange), y(ank)
text object是要操作的文本对象, 比如单词w,句子s,段落p
主要使用的有iw, inner word, 如果使用viw,那么v进入选择模式,iw选择当前单词
aw 表示around word,不但会选中当前单词,还会包含当前单词之后的空格。
vim里文本的对象概念,比如一个单词,一段句子,一个段落
文本对象的操作方法:比如(删除一个单词:dw)
例如:iw表示inner word,如果键入viw命令,那么首先v将进入选择模式,然后iw将选中当前单词。
aw表示 a word ,它不但会选中当前单词,还会包含当前单词之后的空格。
增加练习题:在vim尝试使用文本对象快速增删改查。
vim 的复制粘贴与寄存器的使用#
- 全部删除:按esc键后,先按gg(到达顶部),然后dG.
- 全部复制:按esc键后,先按gg,然后ggyG.
- 全选高亮显示:按esc键后,先按gg,然后ggvG或者ggVG.
- 单行复制:按esc键后,然后yy.
normal模式下的复制粘贴分别是使用y(yank)和p(put),剪贴d和p
例如配合文本对象:比如使用yiw复制一个单词,yy复制一行
Insert模式下的复制粘贴
vimrc设置autoindent,可以自动缩进,但粘贴python代码会格式混乱
这个时候使用:set paste 和:set nopaste解决
:set clipboard=unnamed 直接使用系统剪切板
"+y/p 复制粘贴系统剪切板内容
" 可以调用vim 寄存器,可以自行命名,如"ay 即复制至寄存器a
输入ctrl+r,再按 +, 可在insert模式插入系统剪贴板内容
:e! 重新加载当前打开文件
:set paste
:set nopaste
"+ p 粘贴系统中的
insert 模式下 ctrl +粘贴系统剪切板
vim里操作的是寄存器 而不是系统剪贴板。
这里默认使用d删除或者y复制的内容都放到了“无名寄存器”
用X删除一个字符放到无名寄存器,然后p粘贴,可以调换俩字符
vim宏(macro)
vim使用q来录制,同时也是q结束录制
使用q{register}选择要保存的寄存器,把录制的命令保存其中
使用@{register}回放寄存器中保存的一系列命令
例子:选取一段文本(比如个所有的段落加上双引号)首先使用q开始录制,使用a作为寄存器的名称。出现@a以后
使用I在段落首部写入“——然后使用A在段落尾部写入”
完成操作以后按下q结束录制
选中下一行,使用@a执行操作
如果要全部都执行,就全部选中段落。
:‘<,'>normal @a
这样就是给所有的段落加上了双引号。
比如给所有行加上双引号,先按qa进入宏模式,然后输入I跳到行首输入“然后按ESC,然后再按A跳到行尾输入”,然后按ESC,然后按q结束宏录制。然后按V选中想要操作的行,然后按:进入命令行模式,接着输入normal @a
使用V和G选中所用行,使用:进入命令模式输入:'<,'>normal I"回车就会在所有的行首加上双引号。同理把I改成A也可以在行尾加入。
vim的补全
vim补全大法#
什么是补全#
补全是根据当前环境上下文有编辑器【猜】你想输入的东西
比如补全一个单词、文件名、或者代码中的函数名、变量名
vim中提供了多种补全功能,还有由插件拓展功能实现代码补全
vim中常见的补全#
vim中有很多种补全方式
| 命令 | 补全类型 |
| ------ | ---------- |
| <C-n> | 补全关键字 |
|<C-x><C-n>|当前缓冲区关键字|
|<C-x><C-i>|包含文件关键字|
|<C-x><C-j>|标签关键字|
|<C-x><C-k>|字典查找|
|<C-x><C-l>|整行补全|
|<C-x><C-f>|文件名补全|
|<C-x>
|全能(Omin)补全| 常见的三种补全类型#
使用Ctrl+n和Ctrl+p补全单词
使用Ctrl+x,Ctrl+f补全文件名
使用Ctrl+x,Ctrl+o补全代码,需要开启文件类型检查,安装插件
给vim更换配色
使用:colorscheme显示当前的主题配色,默认是default
用:colorscheme <ctrl + d>显示所有配色
{blue default desert evening koehler murphy peachpuff shine torte
darkblue delek elflord industry morning pablo ron slate zellner}找到用中意的配色后,用:colorscheme配色名,就可以修改颜色
网上下载配色:
(https://github.com/flazz/vim-colorschemes)
安装之后就有大量的主题可以更换了
下载到本地,解压。
将
hybrid.vim
文件移动到~/.vim/colors
(如果没有这个目录的话,使用mkdir ~/.vim/colors -p
先创建。)回到第一步,进行切换主题
可以下载多个配色到
~/.vim/colors
即可随时更换如果需要持久化配置,则需要写的
vimrc
中
配置vim
Windows配置:
我的配置文件位置“C:\Users\26411\AppData\Local\nvim”
windows下如何找到init.vim的配置文件:
**
打开 Neovim,使用 <:echo stdpath ('config')>可以查看该目录的具体位置。
vim & neovim 的默认配置文件
一般来说:
vim的默认配置文件地址:~/.vim/vimrc (如果没有就自己创建)
Neovim的默认配置文件地址:~/.config/nvim/init.vim (如果没有就自己创建)
windows下如何找到init.vim的配置文件:
**
打开 Neovim,使用 <:echo stdpath ('config')>可以查看该目录的具体位置。
在以上文件中的配置,只会对当前用户文件生效,也就是 “~/” 目录下
在命令行中输入nvim --version得到以下结果PS C:\Users\26411> nvim --version
NVIM v0.7.0
Build type: RelWithDebInfo
LuaJIT 2.1.0-beta3
Compiled by runneradmin@fv-az320-113Features: -acl +iconv +tui
See ":help feature-compile"
system vimrc file: "$VIM\sysinit.vim"
fall-back for $VIM: "C:/Program Files/nvim/share/nvim"
Run :checkhealth for more info
PS C:\Users\26411>
如何编写自己的vim配置文件
Linux/Unix下新建一个隐藏文件vim ~/.vimrc
windows系统vim $MYVIMRC,通过环境变量编辑配置文件
- nvim在windows系统下的配置文件路径:C:\Users\26411.config\nvim\init.vim
- ~/.config/nvim/init.vim
常用的vim配置
常用设置,比如:set nu设置行号,colorscheme hybrid设置主题
常用的vim映射,比如 noremap
w : w 保存文件 自定义vimscript函数和插件配置
通过把常用的设置写入到.vimrc里避免每次打开vim重新设置
比如设置行号set nu ; 设置主题 colorscheme hybird
vim映射#
相关内容上网查询(慕课网)这里不做叙述。
vim映射就是把一个操作映射到另一个操作
使用map就可以实现映射。比如:map - x 然后按 - 就会删除字符
:map
viw 告诉vim按下空格的时候选中整个单词 :map
dd可以使用ctrl + d 执行dd删除一行 :vmap \ U 把在visual模式下选中的文本大小(u/U转换大小写)
网络小书《笨方法学Vimscript》中关于映射的章节。
安装vim插件
首先安装vim的插件管理器
junegunn/vim-plug: Minimalist Vim Plugin Manager (github.com)
找到vim插件管理器的配置文件
找到需要的内容复制粘贴到init.vim的配置文件里。
然后找到需要的插件
放入配置文件以后退出vim重新进入
使用PlugInstall安装插件然后重启
插件放入到call Plug#begin()
和call plug#end()之间
之后在使用PlugInstall安装插件
如何搜索插件:在GitHub或者vimawesome.com上查找
vim配色方案:
文件目录树
如何切换盘符::NERDTree D:\
vim插件
相关内容在网上自己找到需要的插件,然后安装使用(配置快捷键和特殊功能)
安装
:PlugInstall
卸载插件#
:PlugClean
注释或者删除掉配置文件中需要删除的插件然后在vim中使用:PlugClean。
插件设置文件vim的引用
source ~/.vim/snippits.vim(配置文件的位置)
-
输入vim命令进入vim
-
进去之后的模式是normal模式即普通模式
-
使用:q可以退出vim
编辑:使用“i”进入编辑模式,开始输入文字
i表示(insert),a(append),o(open aline below)
- 使用ESC又可以回到normal模式。使用:wq保存退出
命令 | 说明 |
---|---|
i | 在当前光标处进行编辑 |
I | 在行首插入 |
A | 在行末插入 |
a | 在光标后插入编辑 |
o | 在当前行后插入一个新行 |
O | 在当前行前插入一个新行 |
cw | 替换从光标所在位置到一个单词的结尾字符 |
命令行模式:
命令 | 说明 |
---|---|
:q! | 强制退出vim,不保存 |
:q | 退出vim |
:wq! | 强制保存并退出vim |
:w <文件路径> | 另存为 |
:saveas <文件路径> | 另存为 |
:x | 保存并退出vim |
:wq | 保存并退出vim |
:set nu | 显示行号 |
:ce(center) | 本行内容居中 |
:ri(right) | 本行内容居右 |
:le(left) | 本行内容居左 |
:set shiftwidth=10 | 设置缩进为10个字符,以此类推(输入Esc回到普通模式,再次尝试>>看缩进是否变化) |
:vs | 竖分屏 |
: sp | 横分屏 |
“cat”这个命令可以查看文档下的英文内容,“注意”如果是中文就会出现乱码#
使用normal模式下的 v命令,进入visual模式,v+ j/k/h/l 进行文本选中
对于选中的文本进行如下按键:
(1.1)d ------ 剪切操作
(1.2)y -------复制操作
(1.3)p -------粘贴操作
(1.4)^ --------选中当前行,光标位置到行首(或者使用键盘的HOME键)
(1.5)$ --------选中当前行,光标位置到行尾(或者使用键盘的END键)
- 使用命令替换文中的内容 “: %s /替换前文本/替换后文本/g(全局替换)
Visual(可视模式)
-
Normal模式下使用V进入visual选择
-
使用v选择行
-
使用Ctrl+v块选择
vim编辑技巧#
-
如何快速纠正错误:进入vim之后使用a/i/o之一进入插入模式
-
ctrl+h删除上一个字符,ctrl+w删除上一个单词,ctrl+u删除当前行
终端编辑:
使用ctrl+A快速移动到开头,使用CTRL+E快速移动到结尾,使用CTRL+B往前移,使用CTRL+F往后移
快速切换insert和normal模式
使用CTRL+C代替ESC(但是可能会中断某些插件)或者"使用CTRL+["
快捷键:
”gi“快速跳转到你最后一次编辑的地方并进入插入模式
**快速移动的方式
:bn 和 :bp → 你可以同时打开很多文件,使用这两个命令来切换下一个或上一个文件。(陈皓注:我喜欢使用:n到下一个文件)
NG → 到第 N 行 (陈皓注:注意命令中的G是大写的,另我一般使用 : N 到第N行,如 :137 到第137行)
gg → 到第一行。(陈皓注:相当于1G,或 :1)
G → 到最后一行。
快速移动方式:
H, J,K,L左下上右
- w/W移动到下一个word/WORD开头。e/E下一个word?WORD尾
b/B回到上一个word/WORD开头,可以理解为backword
word指的是以非空白符分割单词,WORD以空白符分割单词
normal 移动的快捷方式:
w/W: 移动到下一个word/WORD 开头
e/E: 移动到下一个 word/WORD 结尾
b/B: 移动到上一个 word/WORD 开头 (backword)
行间搜索移动
f{char}: 当前光标往行后搜索字符, 分号(;)下一个找到的字符,逗号(,)上一个找到的字符
F{char}: 当前光标往前搜索字符
0: 移动到行首第一个字符
^: 移动到第一个非空白字符
$: 移动到行尾
g_: 移动到行尾非空白字符
页面移动
gg: 文件开头
G: 文件结尾
H: 屏幕的开头(Head)
M: 屏幕的中间(Middle)
L: 屏幕的结尾(Lower)
crtl+u: 上翻页(upword)
ctrl+f: 下翻页(forword)
zz: 将光标所在的一行设置到屏幕的中间
”syntax on"代码高亮
行间搜索移动:
同一行快速移动的方式其实是搜索一个字符并且移动到该字符
- 使用f{char}可以移动到char字符上,t移动到char的前一个字符
- 如果没有搜索到,可以用分号(;)逗号(,)继续搜该行下一个/上一个
- 使用大写F就可以反方向搜索
水平移动:
快速移动到一行的行首和行尾:
- 0 移动到行首第一个字符,^移动到第一个非空白字符
- $ 移动到行尾,g_移动到行尾非空白字符
垂直移动:
使用括号()在句子间移动,可以用:help(来查看帮助)
使用{ }在段落之间移动
使用esay-motion插件移动
页面移动:
gg/G 移动到文件开头和结尾。可以使用ctrl+o快速返回
H/M/L跳转到"屏幕"的开头(Head),中间(Middle)和结尾(Lower)
ctrl+u.ctrl+f.上下翻页。(upword/forward)。zz把屏幕设置为中间
vim快速增删改查#
数字+命令可多次执行该命令
删除:
x 删除一个字符
d[object] 删除一个[object]
[object]包括但不限于:
(a)w 单词(包含空白符)
iw 单词(不包含空白符)
$
0
...
dd 删除当前行
dt[char] 删除直到[char]的字符
修改:
r 替换当前字符
R 进入替换模式
s 删除当前字符并进入插入模式
S 删除当前行并进入插入模式
c[object] 删除一个[object]并进入插入模式
ct[char] 删除直到[char]的字符并进入插入模式
C 删除当前行光标后所有字符并进入插入模式
查询:
:set hls 搜索结果高亮
:set incsearch 增量搜索
/[string] 正向搜索
?[string] 反向搜索
其中:
n/N 下一个/上一个匹配
*/# 当前单词的正向/反向匹配
增加字符:
使用“i"插入模式编辑文本
使用a/i/o进入插入模式
快速删除:
vim在normal模式下使用"x"快速删除一个字符
使用"d"(delete)配合文本对象快速删除一个单词daw(d around word)
dw删除这一个单词 daw删除单词和周围空格 diw删除单词留下空格
dd删除一整个行
dt)表示删除括号内的所有内容
dt""快速删除双引号内的所有内容
d0快速删除到行首
d$快速删除到行尾
数字+d表示删除几行
数字+x表示删除几个字符
快速修改
常用的有三个,r(replace),c(change),s(substitute)
- 在normal模式下使用r可以替换一个字符。s替换并进入插入模式 ,大写S可以替换整行并进入插入
- 使用C配合文本对象,可以快速进行修改
vim查询
- 使用/或者?进行前向或者方向搜索
- 使用n/N跳转到下一个或者上一个匹配
- 使用*或者#进行当前单词的前向和后向匹配
vim的搜索和替换
substitute命令允许我们查找并且替换掉文本,并且支持正则表达式
全局加上S 表示替换,g表示全局替换
替换::% s/要替换的/替换成的/g.c.n
c-r 撤销u命令
\ <精确单词>
:% s/self/this/g 表示在一个文件中用this全局替换掉self
- g(global)表示全局范围内执行
- c(confirm)表示确认,可以确认或者拒绝
- n(number)报告匹配到的次数而不替换,可以用来查询匹配次数
:1,6 s/self/size/g(范围内的使用方式)
如何保存自己写的文档#
在写完代码或者文档以后,使用<:w 文件名.txt>储存文件里(注意一般C盘里会生成swp的文件)所启动盘符的位置
如何使用vim新建文件#
新建文件<:new 文件名.后缀>
新建完成后注意使用:w保存否则直接关闭不会产生文件,如果录入了内容,关闭时会提醒你保存
如何打开文件#
一、 打开文件<:e 文件名>注意:可以使用tab键进行文件夹名称和文件名称的自动补全,可以多次按tab,直到找到需要的。
如何使用vim去打开一个文件
vim file1
二、
vi flname1 flname2 可以同时打开多个文件; 只打开一个文件时,操作结果和``":e"``命令相同。
三、 <:split> `文件``会将当前窗体分为多个区域,在新的区域打开文件。
四、 ":tabnew 文件名“," : tabe 文件名”
外部命令#
:! cmd 执行外部命令。
:!! 执行上一次的外部命令。
:sh 调用shell,用exit返回vim。
:r !cmd 将命令的返回结果插入文件当前位置。
:m,nw !cmd 将文件的m行到n行之间的内容做为命令输入执行命令。
文件之间的切换#
先使用``":ls"``查看已经打开的文件列表和编号, 然后使用``":e#编号"``切换需要编辑的文件。 在``:ls``中各文件的编号在未离开vim前是不会变的;<br>这可以切换到a.txt进行编辑。
概念:
Buffer: 内存缓冲区
Window: Buffer的可视化分割区域
Tab: 组织Window为一个工作区
补全命令 :ls 列举当前缓冲区
:b [num] 跳转到[num]缓冲区
:b [name] 跳转到[name]缓冲区
:bpre/bnext/bfirst/blast 跳转到上一个/下一个/第一个/最后一个缓冲区
:e [name] 打开[name]文件
窗口分屏操作
窗口分屏
Ctrl(首先进行分屏操作)
垂直分割(:vs)
水平分割(: sp)
ctrl + w 在窗口之间切换和移动
以使用快捷键操作下面的内容:
C-w s 水平分割窗口
C-w v 垂直分割窗口
C-w w 循环切换窗口
C-w h/j/k/l 切换到←/↓/↑/→窗口
C-w H/J/K/L 移动当前窗口向←/↓/↑/→
C-w = 所有窗口等宽高
C-w _/| 当前窗口最大化高度/宽度
[num]C-w _/| 当前窗口高度设为[num]行/列
Tab(标签页)将窗口分组
:tabnew 新建标签页
:tabe [name] 在新标签页打开[name]文件
:tabc 关闭当前标签页和窗口
:tabo 只保留当前标签页并关闭其他的
C-w T 将当前窗口移动到新标签页
:tabn [num] 切换到[num]标签页,没有[num]表示下一个
[num]gt 同上
:tabp 切换到上一个标签页
gT 同上
修改文件名称#
操作命令是:":f 新的文件名称"
:f` `新的文件名称
保存和退出#
write命令 对文件进行保存 :w保存不退出 :q`退出文件:wq保存并退出``:q``! 不保存并退出``:x` `退出,如果文件更改则保存``shift + ``Z` `+``Z` `退出,如果文件更改则保存(按住Shift,再按两次z)
使用<:qa>可以退出到shell
另存为#
:saveas 另存为名称.txt
Vim系统的帮助#
vim帮助
进入
vim
之后,是普通模式输入 : 进入
命令行
模式有命令不会就使用
:help
或者直接用功能键 F1
比如说
:qa
不会就
:help
这个:qa
输入
:help :qa
:help
的对象是:qa
,中间留了一个空格回车 之后执行命令
注意可以用
:q
先退出当前帮助:help命令有两种写法
- 完整
:help
- 简写
:h
正常模式
(Normal mode)
- 也叫默认模式。
- 进入
vim
时默认的模式所有输入的键都直接对应着命令- 也被叫做命令模式.
插入模式
(Insert mode)
- 任何键盘录入都会插入到当前文档中
可视模式
(Visual mode)
- 很像正常模式
- 但是移动命令会改变选中的一块高亮区域
- 执行的命令会对选定范围进行
选择模式
(Select mode)
- 可以用鼠标或光标键高亮选择文本
- 任何输入都会替换选择的高亮文本
- 并进入插入模式
命令行模式
(Command-Line mode)
- 可以窗口下方执行一条命令
- 一般是通过 : 执行单行命令
- 通过 / 和 ? 进行搜索
Ex mode
(多行命令执行模式)
Ex
指的是Execute
- 在
Normal
正常模式下使用 gQ 进入- 使用
:visual
退出
查看当前文件的信息#
使用:file 可以在状态栏看到当前文件的信息
如何使用键盘跳转vim所打开的文件中的链接#
使用光标或者键盘那移动到链接上使用<ctrl + ] >就可以跳入链接。
使用 <ctrl + o >可以跳出链接,回到原位置
注意(退回到命令模式)#
按 esc 或 ctrl+c 退回到命令模式
尽量使用 ctrl+c
重复的插入#
使用i进入插入模式以后输入相关内容。
再使用ctrl + c退回到正常模式 按下.可以重复刚才的操作。
撤销插入的内容#
使用 < u >可以撤销操作
- 在正常状态下按 ctrl+r 可撤销撤销操作
i 在当前的光标之前插入
I 在本行文本的最前面插入
A
在本行 最后 插入
a 在当前光标之后插入
. 重做
u 撤销
ctrl+r 还原
插入:#
i
是在光标所在的字符之前插入需要录入的文本。
I
是在光标所在行的行首插入需要录入的文本。
a
是在光标所在的字符之后插入需要录入的文本。
A
是在光标所在行的行尾插入需要录入的文本。
o
是光标所在行的下一行行首插入需要录入的文本。
O
是光标所在行的上一行行首插入需要录入的文本。
s
删除光标所在处的字符然后插入需要录入的文本。
S
删除光标所在行,在当前行的行首开始插入需要录入的文本。
i
和a
都是Insert mode commands
插入位置
i
是before cursor
在光标前插a
是after cursor
在光标后插对应命令
i
意思是insert
a
意思是append
区别:
i 在当前的光标之前插入
I 在本行文本的最前面插入
A
在本行文本 最后 插入
- a 在当前光标之后插入
- o 本行下方插入一个新行
- O 本行上方插入一个新行
注意跳转到行首是使用^,跳转到行尾是使用$
跳到某行#
首行是
尾行是
2G 跳到第2行
3G 跳到第3行
4G 跳到第4行
gg 跳到第一行
G 跳到最后一行
set显示行号#
- :set number 是显示行号
- set 是命令,可以设置各种属性
number 是 :set 的参数 option
使用:set nonumber关闭number,不显示行号
简写
:se nu
se nonu
显示相对行号
:set relativenumber
相对行号简写
set relativenumber 简写 se rnu
set norelativenumber 简写 se nornu
使用命令的模式跳转
:30 跳到 第30行
:40 跳到 第40行
:999 跳到末尾,如果总长度没有999.的话
查看当前文件有多少行
:f[file]
或者 ctrl + g
配置文件#
首先打开原来的配置文件,~代表用户文件夹
vi ~/.vimrc
可以用/statusline找到状态条的写法
各种实用开关#
set number
显示行号set relativenumber
显示相对行号set cursorline
光标所在的当前行高亮set cursorcolumn
光标所在的当前列高亮set nocompatible
使用vim
模式,不与Vi
兼容syntax on
打开语法高亮set showmode
在底部显示,当前所处模式set showcmd
命令模式下,在底部显示键入指令set mouse-=a
纯键盘操作set encoding=utf-8
使用 utf-8 编码set autoread
硬盘文件变化后,自动读取- 把上述这些存储到
~/.vimrc
之后,以后这些配置就会自动起作用了- 也可以去
github
搜索.vimrc
找到关于配置的更多信息
复制#
命令是 :y对应的单词是yank
-
找到一行 然后进行yy操作
-
观察
:reg
发现这一行已经进入了寄存器 -
找到一个合适的地方
p
- 可以把寄存器里面的内容放到当前行下面
vim 分屏操作#
使用组合键 ctrl + w s 这个命令就是上下分割当前打开的文件
按住冒号:,接着输入sp,在键入文件名,如下:
:sp file
上面这个命令将会上下分割当前文件和新打开的file
同样使用组合键 ctrl + w ,然后按下v
ctrl +w v
上面这个命令将会左右分割当前的文件
按住冒号 : ,接着输入vsp,在键入文件名称,如下
:vsp file
上面的这个命令将会左右分割当前打开的文件 和新打开的文件file
分屏以后如何在文件之间切换光标,和移动分屏:
1、切换左右分屏的光标:
ctrl + w h
将当前光标定位到左边的屏幕
ctrl + w l
将当前的光标定位到右边的屏幕
2、移动左右分屏:
ctrl + w H
将当前的分屏移动到左边
ctrl + w L
将当前的分屏移动感到右边
3.切换上下分屏的光标 :
Ctrl + w j
将当前的光标移动到下面的分屏
Ctrl + w k
将当前光标移动到上面的分屏
4.移动上下分屏:
Ctrl + w J
将当前的分屏移动到下面的分屏
Ctrl + w K
将当前的分屏移动到上面的分屏
如何关闭分屏呢?
Ctrl + w c
上面这个命令是关闭当前的分屏
Ctrl + w q
上面的这个命令也是关闭当前的分屏,如果是最后一个分屏将会退出 VIM 。
vim分屏打开不同的文件#
vim -On [FILE_1] [FILE_2] ...
vim -on [FILE_1] [FILE_2] ...
-O:垂直分割(vertical)
-o: 水平分割(默认horizontal)
n: 表示分几个屏,可以缺省不写,默认按后面要分割的文件数来决定分几个屏
[FILE_1][FILE_2]: 需要打开文件
查找文本中匹配的目标字符串#
查找字符串</{目标内容}>
查到以后,输入键盘上的 n 会去寻找下一个匹配,N 会去寻找上一个匹配。
:set noic 该命令用来区分大小写的查询。
该命令用来区分大小写的查询。
删除多行文本#
#
:n1,n2d
n1和n2指的是起始行号和结束行号,d是删除关键字
vim处理文本的替换
:{作用范围}s/{目标}/{替换}/{替换的标志}
:s/zempty/handsome/g
将会把当前光标所在行的 zempty 替换成 handsome
:%s/zempty/handsome/g
将会把全文中的 zempty 替换成 handsome
:n1,n2s/zempty/handsome/g
这里的 n1 和 n2 值得是行号,将会替换掉 n1 到 n2 的所有 zempty 为 handsome.
vim的复制、粘贴、删除
三个重要的快捷键
d
,y
,p
d
是删除的意思,通常搭配一个字符 ( 删除范围 ) 实现删除功能,常用的如下:
dw
删除一个单词
dnw
删除 n 个单词,
dfa
删除光标处到下一个 a 的字符处( fa 定位光标到 a 处 )
dnfa
删除光标处到第 n 个 a 的字符处
dd
删除一整行
ndd
删除光标处开始的 n 行
d$
删除光标到本行的结尾
dH
删除屏幕显示的第一行文本到光标所在的行
dG
删除光标所在行到文本的结束
y
是复制的意思,通常搭配一个字符(复制范围)实现复制的功能,常用的如下:
yw` 复制一个单词,还有 `ynw yfa` 复制光标到下一个 a 的字符处,还有`ynfa yy` 复制一行,还有 `nyy
y$
复制光标到本号的结尾
yH
复制屏幕显示的第一行文本到光标所在的行
yG
复制光标所在行到文本的结束
p
,P
是黏贴的意思,当执行完复制或者黏贴的命令以后,VIM 会把文本寄存起来。
p
在光标后开始黏贴
P
大写的 P 光标前开始粘贴
撤销操作和恢复
u
撤销刚才的操作
ctrl + r
恢复撤销操作
删除字符操作和替换
x
删除光标当前所在的字符
r
替换掉光标当前所在的字符
R
替换掉从光标开始以后的所有字符,除非<ESC >
退出,或者jj
(代替上文有提到)退出。
重复命令1#
VIM 的重复命令
. 该命令是重复上一个操作的命令
n重复某个命令 n 次,
如 10p复制 10 次,10dd 删除十次。
代码提示功能#
在编辑模式下 ,快捷键 Ctrl+n 或者 Ctrl+p 会有代码提示功能,我们可以实现快速录入的效果。
宏录制和使用#
VIM 的宏录制
假设需要操作的文本如下,需要将如下文本的每一行的行首插入入一个 tab 键。
hello
hello world
hello world , vim
宏录制的录制操作先将光标移动到第一行,在普通模式下按下 q 键(宏录制是 q 键启动的),在按一个 a (字母随意),表示该宏注册为 a ,按下 I 在行首插入一个 tab 键,按下jj或者
退出编辑模式,按下 j 将光标移动到下一行行首,最后按下 q 键完成录制操作(宏录制是 q 键结束的)。
总结上面例子的操作流程:
q → a → I → tab → jj → j → q
上面的例子成功地把在行首插入 tab 的功能录制了下来,那么如何应用到其他行呢?宏录制的使用
上述的例子,在正常模式下,按 @a执行宏录制的一系列动作,将会在第二行执行插入 tab 。
@@ 是对上一次宏使用的重复操作。n@a 就会执行 n 次一系列的动作。使用宏录制可以一次执行一系列的操作,可以针对一些重复度较高的操作进行宏录制。
可视化模式下 v 的特殊操作#
当操作的文本光标在 “”,‘’ ,(),{} ,[(双引号,单引号,小括号,大括号,中括号)
当中的时候,可以通过 va"选中 ”“ 内的所有内容包括双引号 ,vi" 选中 "" 内的所有内容,不包括 ""。va,vi 会快速选择区域,va 后面会紧跟一个区域结束标志,a 会选中结束符标志,i 就不会。例子如下:
"hello world [VIM is so strong],{we all can master vim skill}"
假设当前光标定位在上面的文本 M 处:
va] 操作将会选中以下文本(加粗部分):
“hello world[VIM is so strong]*,{we all can master vim skill}“
vi] 操作将会选中如下的区域,没有包含 []:
“hello world [VIM is so strong*],{we all can master vim skill}“
vim如何与外界粘贴复制#
\1. 用vim 打开一个文件,然后执行命令:reg 查看是否有 + 或者 × 号 或者执行:version 命令 查看是否有+clipboard
如果存在:
则可以使用 “+y 将vim 里面的内容复制到系统剪贴板或者 +p 将系统剪贴板里面的内容复制到vim 里面
如果不存在:
则需要安装vim-gnome, 然后就可以用以上命令粘贴复制
\2. 可以在 /etc/vim/.vimrc 里面设置 clipboard=unnamedplus 这样就可以直接使用 y p命令直接粘贴复制了
vim[命令](Vim使用笔记 - JollyWing - 博客园 (cnblogs.com))
:pwd 显示vim的工作目录。
:cd path 改变vim的工作目录。
:set autochdir 可以让vim 根据编辑的文件自动切换工作目录。
执行外部命令:
:! cmd 执行外部命令。(这里的命令指的是例如Windows的命令提示符)
:!! 执行上一次的外部命令。
:sh 调用shell,用exit返回vim。
:r !cmd 将命令的返回结果插入文件当前位置。
:m,nw !cmd 将文件的m行到n行之间的内容做为命令输入执行命令。
快速删除#
- :使用 a/i/o等命令进入插入模式
- :ctrl + h 删除上一个字符
- :ctrl + w 删除上一个单词
- :ctrl + u 删除当前行(这个与
- 是一样的效果)
- :
- :
- :
- :快速切换模式的快捷键 :ctrl + c 或者 ctrl + [ 这两个可以
- :A keyboard is recommended here poker2
quick travel#
h,j,k,l(左,下,上,右)
- :
- :
- :
- :
- :
- :
- :
- :
- :
- :
- :
- :
vim的文本概念:#
什么是vim的text object
vim的文本对象(text object)
[number]
[text object] number表示次数,command是命令, d(elete), c(hange), y(ank)
text object是要操作的文本对象, 比如单词w,句子s,段落p
主要使用的有iw, inner word, 如果使用viw,那么v进入选择模式,iw选择当前单词
aw 表示around word,不但会选中当前单词,还会包含当前单词之后的空格。
vim里文本的对象概念,比如一个单词,一段句子,一个段落
文本对象的操作方法:比如(删除一个单词:dw)
例如:iw表示inner word,如果键入viw命令,那么首先v将进入选择模式,然后iw将选中当前单词。
aw表示 a word ,它不但会选中当前单词,还会包含当前单词之后的空格。
增加练习题:在vim尝试使用文本对象快速增删改查。
vim 的复制粘贴与寄存器的使用#
- 全部删除:按esc键后,先按gg(到达顶部),然后dG.
- 全部复制:按esc键后,先按gg,然后ggyG.
- 全选高亮显示:按esc键后,先按gg,然后ggvG或者ggVG.
- 单行复制:按esc键后,然后yy.
normal模式下的复制粘贴分别是使用y(yank)和p(put),剪贴d和p
例如配合文本对象:比如使用yiw复制一个单词,yy复制一行
Insert模式下的复制粘贴
vimrc设置autoindent,可以自动缩进,但粘贴python代码会格式混乱
这个时候使用:set paste 和:set nopaste解决
:set clipboard=unnamed 直接使用系统剪切板
"+y/p 复制粘贴系统剪切板内容
" 可以调用vim 寄存器,可以自行命名,如"ay 即复制至寄存器a
输入ctrl+r,再按 +, 可在insert模式插入系统剪贴板内容
:e! 重新加载当前打开文件
:set paste
:set nopaste
"+ p 粘贴系统中的
insert 模式下 ctrl +粘贴系统剪切板
vim里操作的是寄存器 而不是系统剪贴板。
这里默认使用d删除或者y复制的内容都放到了“无名寄存器”
用X删除一个字符放到无名寄存器,然后p粘贴,可以调换俩字符
vim宏(macro)
vim使用q来录制,同时也是q结束录制
使用q{register}选择要保存的寄存器,把录制的命令保存其中
使用@{register}回放寄存器中保存的一系列命令
例子:选取一段文本(比如个所有的段落加上双引号)首先使用q开始录制,使用a作为寄存器的名称。出现@a以后
使用I在段落首部写入“——然后使用A在段落尾部写入”
完成操作以后按下q结束录制
选中下一行,使用@a执行操作
如果要全部都执行,就全部选中段落。
:‘<,'>normal @a
这样就是给所有的段落加上了双引号。
比如给所有行加上双引号,先按qa进入宏模式,然后输入I跳到行首输入“然后按ESC,然后再按A跳到行尾输入”,然后按ESC,然后按q结束宏录制。然后按V选中想要操作的行,然后按:进入命令行模式,接着输入normal @a
使用V和G选中所用行,使用:进入命令模式输入:'<,'>normal I"回车就会在所有的行首加上双引号。同理把I改成A也可以在行尾加入。
vim的补全
vim补全大法#
什么是补全#
补全是根据当前环境上下文有编辑器【猜】你想输入的东西
比如补全一个单词、文件名、或者代码中的函数名、变量名
vim中提供了多种补全功能,还有由插件拓展功能实现代码补全
vim中常见的补全#
vim中有很多种补全方式
| 命令 | 补全类型 |
| ------ | ---------- |
| <C-n> | 补全关键字 |
|<C-x><C-n>|当前缓冲区关键字|
|<C-x><C-i>|包含文件关键字|
|<C-x><C-j>|标签关键字|
|<C-x><C-k>|字典查找|
|<C-x><C-l>|整行补全|
|<C-x><C-f>|文件名补全|
|<C-x>
|全能(Omin)补全| 常见的三种补全类型#
使用Ctrl+n和Ctrl+p补全单词
使用Ctrl+x,Ctrl+f补全文件名
使用Ctrl+x,Ctrl+o补全代码,需要开启文件类型检查,安装插件
给vim更换配色
使用:colorscheme显示当前的主题配色,默认是default
用:colorscheme <ctrl + d>显示所有配色
{blue default desert evening koehler murphy peachpuff shine torte
darkblue delek elflord industry morning pablo ron slate zellner}找到用中意的配色后,用:colorscheme配色名,就可以修改颜色
网上下载配色:
(https://github.com/flazz/vim-colorschemes)
安装之后就有大量的主题可以更换了
下载到本地,解压。
将
hybrid.vim
文件移动到~/.vim/colors
(如果没有这个目录的话,使用mkdir ~/.vim/colors -p
先创建。)回到第一步,进行切换主题
可以下载多个配色到
~/.vim/colors
即可随时更换如果需要持久化配置,则需要写的
vimrc
中
配置vim
Windows配置:
我的配置文件位置“C:\Users\26411\AppData\Local\nvim”
windows下如何找到init.vim的配置文件:
**
打开 Neovim,使用 <:echo stdpath ('config')>可以查看该目录的具体位置。
vim & neovim 的默认配置文件
一般来说:
vim的默认配置文件地址:~/.vim/vimrc (如果没有就自己创建)
Neovim的默认配置文件地址:~/.config/nvim/init.vim (如果没有就自己创建)
windows下如何找到init.vim的配置文件:
**
打开 Neovim,使用 <:echo stdpath ('config')>可以查看该目录的具体位置。
在以上文件中的配置,只会对当前用户文件生效,也就是 “~/” 目录下
在命令行中输入nvim --version得到以下结果PS C:\Users\26411> nvim --version
NVIM v0.7.0
Build type: RelWithDebInfo
LuaJIT 2.1.0-beta3
Compiled by runneradmin@fv-az320-113Features: -acl +iconv +tui
See ":help feature-compile"
system vimrc file: "$VIM\sysinit.vim"
fall-back for $VIM: "C:/Program Files/nvim/share/nvim"
Run :checkhealth for more info
PS C:\Users\26411>
如何编写自己的vim配置文件
Linux/Unix下新建一个隐藏文件vim ~/.vimrc
windows系统vim $MYVIMRC,通过环境变量编辑配置文件
- nvim在windows系统下的配置文件路径:C:\Users\26411.config\nvim\init.vim
- ~/.config/nvim/init.vim
常用的vim配置
常用设置,比如:set nu设置行号,colorscheme hybrid设置主题
常用的vim映射,比如 noremap
w : w 保存文件 自定义vimscript函数和插件配置
通过把常用的设置写入到.vimrc里避免每次打开vim重新设置
比如设置行号set nu ; 设置主题 colorscheme hybird
vim映射#
相关内容上网查询(慕课网)这里不做叙述。
vim映射就是把一个操作映射到另一个操作
使用map就可以实现映射。比如:map - x 然后按 - 就会删除字符
:map
viw 告诉vim按下空格的时候选中整个单词 :map
dd可以使用ctrl + d 执行dd删除一行 :vmap \ U 把在visual模式下选中的文本大小(u/U转换大小写)
网络小书《笨方法学Vimscript》中关于映射的章节。
安装vim插件
首先安装vim的插件管理器
junegunn/vim-plug: Minimalist Vim Plugin Manager (github.com)
找到vim插件管理器的配置文件
找到需要的内容复制粘贴到init.vim的配置文件里。
然后找到需要的插件
放入配置文件以后退出vim重新进入
使用PlugInstall安装插件然后重启
插件放入到call Plug#begin()
和call plug#end()之间
之后在使用PlugInstall安装插件
如何搜索插件:在GitHub或者vimawesome.com上查找
vim配色方案:
文件目录树
如何切换盘符::NERDTree D:\
vim插件
相关内容在网上自己找到需要的插件,然后安装使用(配置快捷键和特殊功能)
安装
:PlugInstall
卸载插件#
:PlugClean
注释或者删除掉配置文件中需要删除的插件然后在vim中使用:PlugClean。
插件设置文件vim的引用
source ~/.vim/snippits.vim(配置文件的位置)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」