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 | # 需要在本地环境上安装此命令 |