vim 基础操作学习记录
vim 操作
分屏: :vs 横分屏 :sp 竖分屏
Visual 可视模式
Normal 模式下使用v进入visual选择
使用 shirt+v选择行
使用 ctrl+v 进行快选择
编辑模式下(a,i,o)
快速纠错
Ctrl+h 删除上一个字符,Ctrl+w 删除上一个单词, Ctrl+u删除当前行
Ctrl+a 移动到开头 Ctrl+e 移动到末尾 Ctrl+b 前移 Ctrl+f 后移
快速切换insert和normal模式
Esc 按起来不方便
可以使用Ctrl+c 代替Esc(可能会中断某些插件不推荐)或者Ctrl+[
gi 快速跳转到最后一次编辑的地方并进入插入模式
vim快速移动
h,j,k,l 左下上右
w/W 移动到下一个单词开头。 e/E 下一个单次末尾。
b/B 回到上一个单次开头。backword
行间搜索移动
同一行快速移动的方式搜索一个字符并且移动到该字符
使用f{char} 可以移动到char字符开头,t移动到char的前一个字符
如果第一次没搜到,可以使用分号;下一个 逗号,上一个 继续搜索 改行
大写F 翻过来搜索前面的字符
vim 水平移动
0 移动到行首第一个字符, ^ 移动到一个非空白字符
$移动到行尾, g_移动到行尾非空白字符
常用的是0和$就可以满足日常需求了
vim重置移动
() {}
vim 页面移动
gg/G 移动到文件开头或结尾, 使用Ctrl+o 快速返回
H/M/L跳转屏幕开头(Head), 中间(Middle)和结尾(Lower)
Ctrl+u Ctrl+f 上下翻页(upword/ forword) zz 把屏幕放置为中间。
vim 快速增删改查
vim 快速删除
vim 在normal 模式下使用x快速删除一个字符
使用d配合文本对象快速删除一个单次daw (d a word) 会删除单词周围的空格。
dd 删除整行 dt( 删除括号中的内容
d 和 x 都可以搭配数字来执行多次
vim 快速修改
常用的 r (replace), c (change), s(substitute)
normal模式下使用r可以替换一个字符。 s替换并进入插入模式
使用c配合文本对象,我们可以快速修改 c
vim 查询
:set hls 高亮查询
:set incsearch 边搜索边高亮查询字符
使用 / 或者? 进行向上或者向下搜索
使用n/N 跳转到下一个或者上一个匹配项
使用* 或者 # 进行当前单次的前向和后向匹配
vim 搜索替换
substitute 命令允许我们查询并且替换文本,支持正则表达式
:[range]s[substitute]/{pattern}/{string}/[flags]
range 表示范围 比如 :10,20 表示10~20行 %替换所有
pattern 是要替换的模式,string 是替换后的文本
flags常用标志
g(global) 表示全局范围内执行
c(confirm) 表示确认,可以确认或者拒绝修改
n(number) 报告匹配到的次数而不替换,可以用来查询匹配次数
vim 多文件操作
buffer window tab
buffer 是指打开的一个文件的内存缓冲区
窗口是buffer可视化的分割区域
tab可以组织窗口为一个工作区
buffer
vim打开一个文件后会加载内容到缓冲区
之后的修改都是针对内存中缓存区,并不会直接保存到文件。
直到我们执行:w(write)的时候才会吧修改内容写入到文件
buffer之间的切换
使用:ls列举当前缓冲区,然后使用:b n跳转到指定的文件中
:bpre :bnext :bfirst :blast
或者用 :b buffer_name 加上tab补全来跳转
:e [edit] a.txt 打开a.txt
window 窗口
窗口是可视化的分割区域
一个缓冲区可以分割成多个窗口,每个窗口也可以打开不同的缓冲区。
Ctrl+w s水平分割, Ctrl+w v 垂直分隔。或者:sp 水平 :vs 垂直
每个窗口可以继续被无限分割
如何切换窗口
Ctrl+w(window)
C-w w 在窗口间循环切换
C-w h 切换到左边的窗口
C-w j 切换到下边的窗口
C-w k 切换到上边的窗口
C-w l 切换到右边的窗口
C-w = 使所有窗口等宽、等高
Tab(标签页)将窗口分组
vim 的text object
vim 里文本也有对象的概念,比如一个单次,一段句子,一个段落
很多其他编辑器经常只能操作单个字符来修改文本,比较低效
通过操作文本对象来修改要比只操作单个字符高效
文本对象操作方式
[number] <command>[text object]
number 表示次数;command是命令, d(delete), c(change), y(yank)
text object 是要操作的文本对象,比如单次w, 句子 s, 段落p
vim 复制粘贴与寄存器使用
vim normal模式复制粘贴
normal模式下复制粘贴分别使用y(yank) 和p(put), 剪贴d和p
我们可以使用v(visual) 命令选中所要复制的地方,然后使用p粘贴
配合文本对象:比如使用 yiw复制一个单次,yy复制一行
vim insert模式下的复制粘贴
大部分人使用Ctrl+v 或者Cmd+v 粘贴
这个和其他的文本编辑器差不多,但是粘贴代码有个坑
很多人在vimrc中设置了autoindent 粘贴python代码缩进错误
可以使用 :set paste 和 :set nopaste 解决
什么是vim寄存器?
vim 在normal模式下复制、剪贴的内容去了哪里?
vim里的操作的是寄存器而不是系统剪贴板,这和其他编辑器不同
默认我们使用d删除或者y复制的内容都放到了 “无名寄存器“
用x删除一个字符放到无名寄存器,然后p粘贴,可以调换两字符顺序
深入寄存器(register)
:echo has('clipboard') 输出1 支持以下操作
vim不适用单一剪贴板进行剪贴、复制与粘贴,而是多组寄存器
通过 "{register} 前缀可以指定寄存器,不指定使用默认无名寄存器
比如使用 "ayiw 复制一个单词到寄存器a中, "bdd删除当前行到寄存器b中
vim中 "" 表示无名寄存器,缺省使用。 ""p其实等于与p
其他常用的寄存器
除了有名寄存器 a-z, vim中还有一些其他常见的寄存器
复制专用寄存器 "0 使用y复制文本同时会被拷到复制寄存器0
系统剪贴板 "+ 可以在复制前加上 复制到系统剪贴板
其他一些寄存器 比如 "% 当前文件名, ". 上次插入的文本
:e! 重载文件
什么是vim宏(macro)
很多使用vim很久的vimer 都没用过宏
宏可以看成是一系列命令的集合
我们可以使用宏录制一系列操作,然后用于回放
宏可以非常方便地把一系列命令用在多行文本上
如何使用宏
宏的使用分为录制和回放
vim 使用 q{register}来录制,同时也是q结束录制
使用 q{register}选择要保存的寄存器,把录制的命令保存其中
使用 :normal @{register}回访寄存器中保存的一系列命令
什么是补全?
只要手速快,补全什么的都是浮云
补全是根据当前环境上下文由编辑器 “猜” 你想输入的东西
比如补全一个单词、文件名、或者代码中的函数名、变量名等
vim中提供了多种补全功能,还可以有插件扩展功能实现代码补全
vim 中常见的补全
C-n 普通关键字
C-x C-n 当前缓冲区关键字
C-x C-i 包含文件关键字
C-x C-] 标签文件关键字
C-x C-k 字典查找
C-x C-l 整行补全
C-x C-f 文件名补全
C-x C-o 全能补全
常见的三种补全类型
Ctrl+n 和 Ctrl+p 补全单词
Ctrl+x f 补全文件名
Ctrl+x o 补全代码,需要开启文件类型检测,安装插件
输出当前文件绝对路径::r! echo %:p
给vim 换个配色
使用 :colorscheme 显示当前的主题配色,默认是default
用 :colorscheme Ctrl+d 显示所有配色
: colorscheme 配色名 切换配色
vim a.txt b.txt -O 打开两个文件并分屏
编写vim配置
:set number 设置行号
持久化vim配置文件
vim 复制到系统剪贴板
vim --version | grep clipboard 如果有+clipboard,恭喜你可以直接使用了。
vim ~/.vimrc 加入一下配置
set clipboard=unnamed
如果是-clipboard
1 | # ubuntu |
搜索历史记录
C-b + [
fzf 插件
1 | # 需要在本地环境上安装此命令 |




