初识Vim

Vim被称为神一样的编译器,人类历史上最好文本编辑器(^_^)。学习成本很高,学习路线陡峭。下面列举一些入门的教程:

安装Vim8

如果你的电脑已经安装了vim,可以使用 --version 参数查看vim当前版本,例如:

vim --version

输出:

IM - Vi IMproved 8.1 (2018 May 18, 编译于 Oct 16 2023 18:14:13)
...

我的vim是8.1版本。如果当前系统并未安装vim,可以通过下面命令安装vim:

sudo pat-get install vim

运行上面命令后,如果vim的版本依旧还是7,可以用如下命令:

sudo add-apt-repository ppa:jonathonf/vim
sudo apt update
sudo apt install vim

安装可能会报错,大家根据报错信息自行百度解决^_^

Vim状态模式

vim中总共有五种模式,分别为:

  • 普通模式:执行vim指令,如光标移动,复制、粘贴、撤销等操作。这是vim中的默认模式,在该模式下不能插入文字。
  • 插入模式:用于文本输入、编辑。
  • 视图模式:又叫选择模式,用于文本的选择。该模式可以执行普通模式下的指令,用于文本选择。
  • 末行模式:该模式下可以保存退出vim,进行查找替换,执行外部命令,分屏等操作。
  • 替换模式:替换模式下可以对现有文本进行替换。

几种模式关系如下图:

打开Vim

进入vim有两种方式,分别如下:

vim              #方法一
vim filename #方法二,指定文件名,在启动vim同时,会打开该文件

通过方法一打开vim,会显示vim的基本信息(版本号、简单用法)。我们可以进入插入模式嵌入文本,后续退出时如果需要保存文件,则需要指定文件名。

方法二在打开vim时,指定了文件名,如果当前目录下存在该文件,则会通过vim打开。如果该文件不存在,vim会暂时打开一个没有任何字符的文件。后续编辑完成后,在保存退出时,无需再指定文件名。

保存文件内容

:w                      #保存文件,用于在打开vim时指定了文件
:w+未被使用的文件名 #以指定的文件名保存当前vim内容

退出vim

退出vim可以在末行模式下输入q(quit),常用的操作如下:

:q          #对于没有改动的文件,用q即可退出
:wq #对于发生过修改的文件,保存并退出
:q! #对于发生过修改的文件,放弃修改并退出, !表示强制的意思
:qa #如果打开了多个窗口,全部退出

vim模式

普通模式

页面操作

zz        #将当前行置于页面中间
ctrl+u #向上翻页
Ctrl+f #向下翻页

光标移动与跳转

文本对象

在 Vim 中,文本对象以一对标记字符或关键字来表示。它可以与操作命令结合使用,以便更精确地选择、编辑和处理文本。文本对象可以是字符、单词、句子、段落等等,它们可以在各种命令中使用,比如删除(d)、复制(y)、替换(c)等操作。

常见的文本对象:

  • w:单词(word)文本对象。 vw 表示选中光标当前位置到结尾的单词(包括括号)。
  • s:句子(sentence)文本对象。 vis 表示选择光标所在位置的句子,但不包括句子末尾的标点符号和空格。
  • p:段落(paragraph)文本对象。 vip 表示选择光标所在位置的段落,不包括段落前后的空行。
  • t:标签(tag)文本对象。vit 表示选择光标所在位置的标签,包括标签的开始和结尾。
  • (、)、[、]、{、}<、>:括号文本对象。 vi( 表示选中括号内的内容。
  • "、':引号文本对象。vi" 表示选中双引号内的内容。

例如:

假设文本为:<window>text="C++"</window>
vit -> text="C++" 假设文本为:"Hello World!"
vi" -> Hello World! 假设文本为:<Hello world>
va< -> <Hello world>

光标移动

h          #光标左移
j #光标下移
k #光标上移
l #光标右移

在单词之间跳转

w          #移动光标到下一个单词的开头
b #移动光标到上一个单词的开头
e #移动光标到单词结尾,如果当前已经在结尾,则移动到下一个单词结尾处 W #移动光标到下一个以空白字符分隔的单词开头
B #移动光标到上一个以空白字符分隔的单词开头
E #移动光标到下一个以空白字符分隔的单词结尾

小写与大写的区别在于:分割单词的分割符不同。对于一个单词,大写只认准空格符 ' ' 作为一个单词的分隔,而小写则以非字母作为分割符。

行间跳转

f+字符     #快速跳转至当前行中该字符位置
t+字符 #快速跳转至当前行中该字符前一个字符位置
F+字符 #反过来搜索
T+字符 #反过来搜索

如果跳转的位置不正确,可以使用分号“;”继续向下搜索,使用逗号“,”向上搜索。

行首与行尾跳转

数字0      #光标移动到行首
^ #光标移动到行首第一个非空白字符
$ #光标移动到行尾
g_ #光标移动到行尾最后一个非空白字符
% #在成对的括号之间跳转

页面间跳转

gg            #跳转至文件开头位置(第一行)
G #跳转至文件结尾位置(最后一行)
行号+gg #跳转至指定行号
H #跳转至当前页面开头行
M #跳转至当前页面的中间行
L #跳转至当前页面结尾行’‘
''(两个单引号) #将光标退回上次所在位置

Jump List-跳转列表

在 Vim 中,Jump List(跳转列表)是一个记录了编辑器中跳转操作的历史记录。Jump List 以栈的形式保存了跳转操作,可以通过命令来回溯和跳转到不同的位置。

Jump List 中保存了以下类型的跳转操作:

  • 普通跳转,例如光标移动、gg、w、f等操作。
  • 文件跳转,在后面的窗口拆分中介绍
  • 查找跳转

可以用一下命令来操作 Jump List 表:

Ctrl+o          #回退到上一个跳转
Ctrl+i #前进到下一个跳转
g; #等价于Ctrl+i
g, #等价于Ctrl+o
:ju #显示 Jump List 表

删除操作

在vim中,删除操作是一种剪切操作,被删除的文本会保存在vim寄存器中。

字母x

小写x                 #删除光标所在位置字符
大写X #删除光标前一个字符
数字+小写x #删除光标后指定个数的字符
数字+大写X #删除光标前指定个数的字符

字母s

字母 s 是 substitute 的简写,表示代替、替换的意思。相比于字母x,字母 s 在删除文本的同时,会进入插入模式。

小写s                  #删除光标所在位置字符,并进入插入模式
大写S #删除当前行所有字符,并进入插入模式
数字+小写s #删除光标往后指定个数字符,并进入插入模式
数字+大写S #向下删除指定数字行,并进入插入模式

字母r

字母 r 是 replace 的简写,表示代替、替换的意思。与字母 s 的区别是,字母 r 会进入替换模式。替换模式是在现有文本上进行修改操作,但文本替换完成后,会返回普通模式。

r+单个字符          #将光标位置字符替换成指定字符
数字+r #进入替换模式,可以替换光标位置往后指定个数的字符
R #进入连续替换模式,可以替换多个字符,按Esc退出

字母d

字母 d 是 delete 的简写,表示删除。

选中文本+d            #删除选中文本
大写D #s删除光标至本行结尾处所有字符
dd #删除当前行
数字+dd #向下删除指定数字行
d+移动命令 #删除移动范围内的文本
d+文本对象(w) #删除文本对象
daw #完整删除光标所在单词以及空白字符
diw #完整删除光标所在单词,不会删除空白字符
da+配对字符 #删除配对字符内文本,配对字符会被删除
di+配对字符 #删除配对字符内文本,配对字符不会被删除
dt+字符 #在当前行中,删除到指定字符之间的所有字符

dw与daw的区别:

  • dw是 delete word 的含义,表示从当前光标位置开始删除一个单词。
  • daw是 delete around word 的含义(官方的解释是 delete a word ),around表示环绕,该操作会完整的删除该单词,即使光标不在单词开头。
假设需要删除 HelloWorld 字符串,光标处于 o 的位置
dw -> Hell
daw ->

da与di的区别:

  • da 表示 delete around,在删除指定文本对象时,会连同文本对象符一起删除。
  • di 表示 delete inner,在删除指定文本对象时,只会删除文本对象。
假设需要删除 "Hello World" 字符串,光标处于引号内部
da" ->
di" -> ""

字母c

字母 c 是change的意思,表示修改。其功能与字母 d 类似,会将文本删除,并切换至插入模式。

复制粘贴

普通模式下,复制粘贴分别使用y(yank)和p(put)命令,例如:

小写y              #复制选中内容(需要配合视图模式使用)
大写Y #复制当前行
yy #复制当前行
数字+yy #向下复制多行
yiw #复制一个单词
yis #复制一个句子
yaw #复制一个单词(包括空格)
yas #复制一个句子(包括空格) 小写p #将寄存器中的内容插入到光标之后(粘贴操作)
大写P #将寄存器中的内容插入到光标之前(粘贴操作)

撤销

小写u                #撤销最后一次执行的操作
大写U #撤销整行修改
Ctrl+r #反撤销

插入模式

当我们进入插入模式,左下角状态栏中会提示“insert”或“插入”文字,表示当前处于插入模式。

进入插入模式的方法

i      #在光标之前进入插入模式
a #在光标之后进行插入模式 I #在光标所在行行首进入插入模式
A #在光标所在行行尾进入插入模式 o #在光标所在行下边插入新行,将光标移动到新行行首并进入插入模式。
O #在光标所在行上边插入新行,将光标移动到新行行首并进入插入模式。 gi #回到上次退出插入模式的位置继续

Ctrl+命令快捷操作

Ctrl+u            #删除当前行中光标前所有字符
Ctrl+h #删除光标前一个字符,与Backspace功能相同
Ctrl+w #删除光标前一个单词
Ctrl=[ #退出插入模式切换至普通模式

复制粘贴

Ctrl+r+选项          #根据选项含义粘贴文本
#0:表示最近一次复制的文本
#":表示默认寄存器
#寄存器名:粘贴指定寄存器中的内容
#+:系统剪贴板
Ctrl+Shift+c #将光标选中内容拷贝至剪贴板
Ctrl+Shift+v #将剪贴板中的文本粘贴到光标位置

在粘贴从外部复制的代码时,会导致粘贴后的文本缩进出现问题。原因是我们在vimrc中设置了autoindent。可以用下面方法处理:

:set paste
粘贴文本
set nopaste

这样有点麻烦,我们也可以在粘贴文本后,用下面方式调整缩进:

gg=G

视图模式

进入视图模式

v          #进入视图模式,通过移动光标进行选择
V #进入视图模式并选中当前行
Ctrl+v #以矩形块方式选中文本

大小写转换

u          #将选中的文本转换为小写
U #将选中的文本转换为大写

末行模式

末行模式又被成为命令模式,主要用于执行命令、插件、查找替换等。

查找

?+待查找字符串+回车           #在当前文件中反向查找该字符串
/+待查找字符串+回车 #在当前文件中正向查找该字符串 n #切换至下一个匹配字符串
N #切换至上一个匹配字符串
* #切换至下一个匹配字符串
# #切换至上一个匹配字符串

n 与 * 的区别是: * 会根据当前光标所在位置,跳转到下一个匹配单词相同的光标位置。

替换

替换格式如下:

:[range] s/{pattern}/{string}/[flags] 
  • range:表示范围,比如:2,10表示2-10行,%表示全部
  • pattern:表示要替换的文本,可以是正则表达式
  • string:表示替换后的文本
  • flags:表示替换标识
    • g:表示全局范围内替换
    • c:表示询问是否替换
    • n:表示报告匹配到的文本次数,不执行替换。

用法:

:% s/C++/Java/g      #将当前文件中所有"C++"字符替换为"Java"

#% s/\<printf\>/printf_s/g    #将当前文件中所有"printf"字符替换为"printf_s"

#2,10 s/C++//n       #统计2-10行中"C++"字符出现的次数

文件

在vim中,打开一个文件后会将该文件的内容加载到缓冲区。后续对该文件的修改,都是针对内存中的缓冲区,并不会直接保存到文件中。只有使用":w"命令,文件数据才会写入的磁盘中。Vim支持打开多个文件,并在这些文件间切换。

打开其他文件

:e+文件路径              #打开指定文件(可以使用通配符,用于打开多个文件)
:e! #强制重新加载当前文件,丢弃对文件所做的所有更改。
e+文件路径+n #打开指定文件并定位到第 n 行
e+文件路径+/pattern #打开指定文件并进行查找

查看已打开文件

输入":ls"命令列举当前已经打开的文件。例如:

:ls
1 "a.txt" 第 3 行
2 # "b.txt" 第 2 行
3 %a "c.txt" 第 2 行 #第一列表示文件编号,可以使用 :b+编号 切换至不同文件。
#第二列表示缓冲区中的状态,%a表示当前正在编辑的文件,#表示上一个文件
#第三列表示文件名
#第四列表示光标所处行

文件切换

:b+n         #跳转至第n个文件
:bpre #根据当前文件编号,跳转至上一个文件
:bnext #根据当前文件编号,跳转至下一个文件
:bfirst #根据当前文件编号,跳转至第一个文件
:blast #根据当前文件编号,跳转至最后一个文件
:b+文件名 #根据文件名跳转

窗口

窗口拆分

Ctrl+w+s     #水平分割
:sp #水平分割 Ctrl+w+v #垂直分割
:vs #垂直分割

切换活动窗口

Ctrl+w+w     #在窗口之间循环切换
Ctrl+w+h #切换至左边窗口
Ctrl+w+j #在窗口之间循环切换
Ctrl+w+k #在窗口之间循环切换
Ctrl+w+l #在窗口之间循环切换

重排窗口大小

Ctrl+w+=         #所有窗口等高等宽
Ctrl+w+_ #最大化活动窗口的高度
Ctrl+w+| #最大化活动窗口的宽度
数字+Ctrl+w+_ #把活动窗口
数字+Ctrl+w+| #所有窗口等高等宽

执行外部命令

在末行模式下,输入 ! 外部命令,可以vim中执行外部shell命令,例如:

:! ls-l

执行外部命令后,Vim 会暂时切换到命令行输出模式,可以查看程序输出。按下任意键或按回车键可以返回 Vim 编辑界面。需要注意的是,执行外部命令可能会导致 Vim 的编辑进程暂时被阻塞,直到命令执行完成。如果命令的执行时间较长,可能会导致 Vim 在这段时间内无响应。

以root身份保存文件

有时候,在编辑系统文件或者受权限保护的文件的时候,可能忘记在命令之前添加sudo,这只会以只读方式打开文件。如果此时已经做了修改,不可能撤销当前修改,然后重新打开。可以用如下命令解决:

:w !sudo tee %

寄存器

在vim中的复制、删除、剪切不是操作的系统剪切板,而是一个“无名寄存器”。使用y、d命令,实际是将文本内容保存到该寄存器中。

除了“无名寄存器”,vim还可以指定有名寄存器。有名寄存器用a-z表示,通过使用引号(")+寄存器名使用,例如:

"ayy          #复制当前行到a寄存器
"aiw #复制一个单词到a寄存器
"bdd #剪切当前行剪切到b寄存器 "ap #将a寄存器粘贴到当前行
"%p #将文件名输出当前行

还有一些其他的寄存器:

""            #表示无名寄存器
"0 #复制寄存器
"+ #表示系统剪贴板(需要vim支持clipboard)
"% #当前文件名
". #上次插入的文本

插入内容

:r! echo %        #插入当前文件名
:r! echo %:p #插入当前路径
:r 文件名 #将指定文件中的内容插入至光标后
:r !外部命令 #将外部命令的输出结果插入至光标后

Vim其他功能

宏可以看作一系列命令的集合。我们可以使用宏录制一系列操作,然后通过回放将其作用于多行文本上。在vim中,录制的宏是保存在寄存器中的。因此,在录制宏时,需要指定寄存器。下面介绍如何录制一个宏:

  • 在普通模式下输入q+寄存器名,此时已经进入录制模式。
  • 正常进行操作。
  • 按下q结束录制。
  • 在视图模式下选中需要作用宏的行。
  • 按下:进入末行模式,输入:normal @寄存器名

例如,给下列url加上双引号:

https://www.bilibili.com/
https://www.baidu.com/
https://www.sina.com.cn/
https://www.qq.com/
https://www.1688.com/

具体步骤:

光标定位到第一行
普通模式下输入: qa 此时左下角显示recording @a
按下大写I移动到行首并进入插入模式,输入:"
按下ESC退出插入模式,按下大写A移动到行尾并进入插入模式,输入:"
按下ESC退出插入模式,按下q退出录制
视图模式下选中2-5行
按下: 此时末行模式变为::'<,'> 输入: normal @a 按下回车,应用宏。

完成上面功能,还有一种不使用宏的方法:

光标定位到第一行,按下大写A,选中整行
按下大写G,选中全部文本
按下: 此时末行模式变为: :'<,'> 输入: normal I" 执行1、2步再次选中全文
按下: 此时末行模式变为: :'<,'> ,按下 ctrl+p,打开上一次执行的命令
将 normal I" 替换为 normal A" ,回车

补全功能

vim中开启补全功能有如下方式:

Ctrl+n              #普通关键字补全,向后选择item项
Ctrl+p #普通关键字补全,向前选择item项
Ctrl+x+n #当前缓冲区关键字
Ctrl+x+i #包含文件关键字
Ctrl+x+] #标签文件关键字
Ctrl+x+k #字典查找
Ctrl+x+l #整行补全
Ctrl+x+f #文件名补全,在使用open指定文件路径时使用
Ctrl+x+o #全能补全

Vim配置

配色

vim提供了一些自带的配色方案,可以通过下列命令查看和修改:

:colorscheme                #显示当前的主题配色,默认是default
:colorscheme Ctrl+d #显示所有的配色方案
:colorscheme 配色名 #更换配色

如果对自带的配色不满意,可以从网上下载合适的配色方案:

https://vimcolorschemes.com/

上面网站中提供了很多好看的主题配色,可以从中选取一款,然后在GitHub中下载下来:

git clone https://github.com/morhetz/gruvbox.git

#确保当前用户目录下存在colors目录
mkdir -p ~/.vim/colors #将.vim文件拷贝到colors目录下
cp /gruvbox-master/colors/gruvbox.vim ~/.vim/colors/
#在vim中开启配色
:colorscheme gruvbox

配置文件

有两种方式修改vim中配置:

/etc/vim/vimrc            #全局配置,所有用户都会生效

~/.vimrc                  #仅作用于该用户

vim在打开时,会加载配置文件中的设置并应用,这样就不用每次打开vim时,还需要单独进行配置了。

修改配置文件后,如何让其生效,有两种方式:

  • 退出vim再重进
  • 再末行模式下输入:source+配置文件
:source ~/.vimrc

vimrc文件中包含:

  • 常用设置,比如 :set nu 设置行号。
  • 常用vim映射
  • 自定义的vimscript函数
  • 插件配置

常用设置如下:

#命令                  #语义                    #缩写
set number 代码显示行号 set nu
set nonumber 关闭行号 set nonu
syntax on 关键词高亮显示
set cindent c 语法自动缩进 set ci
set autoindent 新行自动缩进 set ai
set shiftwidth=4 缩进宽度 4 set sw=4
set tabstop=4 tab 键宽度 4 set ts=4
set softtabstop=4 制表符宽度 4 set st=4

映射

vim映射允许你将一个操作映射到一个命令或一系列命令上,从而简化编辑的过程。例如我们可以将F2映射为保存,这样就不需要先按Esc退出编辑模式,在使用:w保存,极大程度上简化了操作。

映射分为两类,递归映射与非递归映射:

  • 递归映射:是指将一个新的映射关联到一个已定义的映射上。例如将 "-" 映射为 "dd",又将 "+" 映射为 "-",此时输入 "+"也可以实现"dd"的功能。
  • 非递归映射:对于映射的命令,不会进行递归解释。

递归映射存在嵌套的风险,因此不建议使用。

vim中,常用的 normal 、visual 、insert 和 command-line 都可以定义映射。

normal映射

nnoremap {keys} {command}          #创建不递归的 normal 模式映射
nmap {keys} {command} #创建递归的 normal 模式映射

案例:

nnoremap <F2> :w<CR>      #将 F2 键映射到保存文件的命令。
nmap <F3> dd #将 F3 键映射到删除当前行的命令。

visual映射

vnoremap {keys} {command}        #创建不递归的 visual 模式映射
vmap {keys} {command} #创建递归的 visual 模式映射

案例:

vnoremap <C-c> "+y     #将 Ctrl + c 键映射到复制选定文本到剪贴板(需要clipboard支持)

insert映射

inoremap {keys} {command}        #创建不递归的 insert 模式映射
imap {keys} {command} #创建递归的 insert 模式映射

案例:

inoremap jj <Esc>`^          #按下jj切换至 normal 模式且不改变光标位置

command-line映射

cnoremap {keys} {command}        #创建不递归的 command-line 模式映射
cmap {keys} {command} #创建递归的 command-line 模式映射

案例:

cnoremap w!! w !sudo tee % >/dev/null      强制写入

vimscript

推荐一篇教程《笨方法VimScript》

Vim插件

插件是一个目录,其中包含了一个或多个脚本。这些脚本用vimscript编写,目的是为了弥补或增加vim的某个功能。

在一个插件目录中,通常会有两个子目录(plugin 和 doc )。其中,plugin 目录下会有一个 .vim 后缀的插件脚本;而 doc 目录下会有一个 .txt 后缀的文档文件。例如,以 unimpaired 插件为例:

$ ls -R vim-unimpaired/

vim-unimpaired/:
doc plugin README.markdown vim-unimpaired/doc:
tags unimpaired.txt vim-unimpaired/plugin:
unimpaired.vim

包(Package)

在vim8中,增加了包(package)特性。包是一个目录,在该目录下包含了一个或者多个插件。

通常,包目录一般在如下目录:

 ~/.vim/pack/

该目录下存放vim启动时要加载的插件。你可以在该目录下创建任意多少个包。例如,可以创建一个全部由其他人编写的插件包,取名为 bundle 目录。你也可以创建一个由自己编写的 myPlugins 目录。vim在启动时会遍历 pack/*/start 目录下的插件,并将其添加至 runtime path 环境变量中。

安装插件

我们以 vim-unimpaired 插件为例:

mkdir -p ~/.vim/pack/bundle/start        #确保目录存在
cd ~/.vim/pack/bundle/start
git clone https://github.com/tpope/vim-unimpaired.git

如何确认是否安装成功?打开vim,在末行模式下输入:

echo join(split(&runtimepath,','),"\n")

输出:

...
/home/test/.vim/pack/bundle/start/vim-unimpaired
...

此时,你可以打开vim,然后输入以下命令查看插件是否起作用:

[on            #开启显示行号
]on #关闭显示行号

安装插件帮助文档

在末行模式下输入:

:help unimpaired

会有如下提示:

E149: sorry, no help for unimpaired

这是因为vim不知道去哪索引该帮助文档,只需要在末行模式下输入:

:helptags ALL

再次输入刚刚的命令,即可打开帮助文档。如果出现 E152 错误,可忽略,这是由于 runtimepath 中的路径没有写入权限造成的。

安装可选插件

vim中有两种插件,日常使用的插件和偶尔使用的插件。前面介绍的是日常使用的插件,在每次启动vim时,会自动加载。还有一种可选插件,只有当我们需要使用时,才会加载。并且在退出vim后,下次在启动时,不会加载。

可选插件安装在 bundle/opt/ 目录下, 下面演示安装 Scriptease 插件:

mkdir -p ~/.vim/pack/bundle/opt
cd ~/.vim/pack/bundle/opt
git clone https://github.com/tpope/vim-scriptease.git

打开vim,可选插件并不会在启动时加载,需要手动加载插件:

:packadd vim-scriptease

:scriptnames          #验证是否安装成功

更新插件

cd ~/.vim/pack/bundle/start/vim-unimpaired
git pull

移除插件

rm -rf ~/.vim/pack/bundle/start/vim-unimpaired

安装插件管理器(Vim-plug)

在Vim-plug的GitHub首页中,提供了官方文档。GitHub链接

在线安装:

curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim

其他端安装官方文档中有说明。

离线安装:

下载好 Vim-plug,将 plug.vim 拷贝至 ~/.vim/autoload/ 目录下:

mkdir -p  ~/.vim/autoload/
cp plug.vim ~/.vim/autoload/plug.vim #需要根据当前路径调整plug.vim

安装完成后,可以在 ~/.vimrc 文件中添加或删除插件,假设需要安装vim-startify插件,操作如下:

call plug#begin('~/.vim/autoload')
Plug 'mhinz/vim-startify' #vim-startify插件
call plug#end()

保存文件,在末行模式下执行:

:source ~/.vimrc      #应用配置项
:PlugInstall #安装插件

如果需要卸载,输入:

:PlugClean

如何搜寻插件

vimawesome网站上集成很多vim插件,可以在该网页上寻找满足需求的插件。

版权

本文主要参考 《玩转Vim 从放弃到爱不释手》(感谢作者无私录制免费视频)。文章由本人学习后整理而成。

Vim-从放弃到入门的更多相关文章

  1. Windows & Linux 安装使用 Vim 编辑器 3分钟入门 - 精简归纳

    Windows & Linux 安装使用 Vim 编辑器 3分钟入门 - 精简归纳 JERRY_Z. ~ 2020 / 8 / 25 转载请注明出处! 目录 Windows & Lin ...

  2. (大数据工程师学习路径)第二步 Vim编辑器----高级功能入门

    一.多文件编辑 1.使用vim编辑多个文件 编辑多个文件有两种形式,一种是在进入vim前使用的参数就是多个文件.另一种就是进入vim后再编辑其他的文件. 同时创建两个新文件并编辑 $ vim 1.tx ...

  3. vim高级工能入门

    一.多文件编辑 1.vim   1.txt  2.txt  3.txt同时打开3个文件在vim缓冲区, 命令模式下输入:n 切换到下一个文件,可以加!:n! 强制切换,之前那个没有保存,仅仅是切换. ...

  4. vim:放弃hjkl

    vim放弃使用hjkl,可以加快文本的编辑速度,不信,看我摘录的文章:http://vimcasts.org/blog/2013/02/habit-breaking-habit-making/ Wor ...

  5. Vim编辑器Go简单入门

    今天是一次做Go的笔记,一开始直接打开Github上的Go项目然后跑到Wiki位置,然后作者列出了一堆学习Go的资料,这里我 以第一个学习资料https://tour.golang.org/作为Go学 ...

  6. 《Java从入门到放弃》入门篇:springMVC数据校验

    昨天我们扯完了数据传递,今天我们来聊聊数据校验的问题.来,跟着我一起读:计一噢叫,一按艳. 在springMVC中校验数据也非常简单,spring3.0拥有自己独立的数据校验框架,同时支持JSR303 ...

  7. 《Java从入门到放弃》入门篇:hibernate中的多表对应关系

    hibernate中的对应关系其实就是数据库中表的对应关系, 就跟某些电影中的某些场景是一样一样滴. 比如可以是一男一女,还可以是一男多女, 更可以是多男一女,最后最后最后还可以是多男多女!!! 有些 ...

  8. 史上最全Vim快捷键键位图 -- 入门到进阶

    文章欢迎转载,但转载时请保留本段文字,并置于文章的顶部 作者:卢钧轶(cenalulu) 本文原文地址:http://cenalulu.github.io/linux/all-vim-cheatshe ...

  9. vim编辑器-Linux从入门到精通第四天(非原创)

    文章大纲 一.vi介绍二.vim三种模式(重点)三.命令模式四.模式间的切换(重点)五.末行模式六.编辑模式七.实用功能八.扩展九.学习资料下载十.参考文章   一.vi介绍 Vi编辑器是所有Unix ...

  10. pandas操作mysql从放弃到入门

    目录 相关帮助文档 一.如何读取数据库-read_sql 二.如何筛选数据 三.如何连表-merge 四.如何删除一行或一列-drop 五.如何分组统计-groupyby 六.如何排序-sort_va ...

随机推荐

  1. FishSpeech应用篇——专属朗读人

    背景 FishSpeech部署教程参见:使用FishSpeech进行语音合成推理 - 天命小猪 - 博客园 部署好之后,就能够基于推理来定制自己专属朗读人.编程能力强的小伙伴可以结合AI定制一个自己的 ...

  2. MySQL - [11] InnoDB存储引擎

    Page 页.是真正理解InnoDB存储引擎的入口. 一.Page -- 页 1.1.InnoDB 数据页及其结构 为了避免一条一条读取磁盘数据,InnoDB采取页的方式,作为磁盘和内存之间交互的基本 ...

  3. 【MathType】word2016数学公式编号

    问题 毕业论文排版中,对数学公式需要类似(3-1)的格式. 解决技巧 在写论文初稿的时候,先不要于公式的编号,先给它编一个号,比如(3) (2) (4)的. 最后写完了以后,再再添加section , ...

  4. Laravel11 从0开发 Swoole-Reverb 扩展包(二) - Pusher 协议介绍

    Pusher 协议概述 Pusher 协议 是一种用于实时 Web 通信的协议,它基于 WebSocket 技术,并提供了一套 发布-订阅(Pub/Sub)模式,用于让客户端(如浏览器.移动端.后端服 ...

  5. Linux 安装 MySQL 8.0

    目录 下载 安装数据库 修改mysql配置文件(若没有则新建) 安装并初始化mysql 查看mysql密码 配置启动 登录MySQL 修改密码 配置远程连接 配置防火墙 常见错误 Windows 安装 ...

  6. 如何在 PostgreSQL 中运行 TLS 回归测试

    概述 本文将分享一个简单的步骤,介绍如何在 PostgreSQL 中运行 SSL/TLS 回归测试. Postgres 回归测试 每当我们想要添加新功能或进行修复时,都应该运行 PostgreSQL ...

  7. 学习 Docker 如何查看镜像信息?

    学习 Docker 如何查看镜像信息? 一.images 命令列出镜像 通过使用如下两个命令,列出本机已有的镜像: docker images 或: docker image ls 如下图所示: 对上 ...

  8. Noise——随机之美

    本篇博文介绍图形学中噪音生成的一般方法. Noise可以干什么? 不规则表面生成 有机体模拟 流体烟雾模拟 甚至是使用noise对灯光强度,位置做扰动: 只有我们想象不到的,没有noise不能涉猎的! ...

  9. [每日算法 - 华为机试] leetcode45 :跳跃游戏 II 「动态规划神器推荐」

    leetcode入口 45. 跳跃游戏 IIhttps://leetcode.cn/problems/jump-game-ii/ 题目描述 给定一个长度为 n 的 0 索引整数数组 nums.初始位置 ...

  10. 学习unigui【24】Echart的使用:多个坐标系

    使用echart非常简单,网上有介绍. 主要放一个unihtmlFrame.然后unihtmlframe.text := 'html的代码',就会渲染(初次调用echart的js库要一点稍后). un ...