vim基本操作
Vim简介:
- Vim是一个Unix以及类Unix文本编辑器。
- 特点:功能强大、高度可定制。
vim 和 vi 区别:
- Vim = Vi + IMproved
- Vim相对于Vi优点:
- 多级撤销
- 语法加亮可自动补全
- 支持多种插件
- 通过网络协议(HTTP/SSH)编辑文件
- 多文件编辑
- Vim可以编辑压缩格式文件(gzip、zip等)
Vimrc 配置
Vimrc 概述:
- rc = run command
- 分为系统级vimrc 和 用户级vimrc
- 每一行作为一个命令执行
Vimrc 使用:
-
版本
:version
:-
vim test.txt
创建一个txt文件 输入esc + shift + :
输入version
查看版本。 -
可以看到系统文件跟用户文件vimrc所在的位置:
system vimrc file: "/etc/vimrc" user vimrc file: "$HOME/.vimrc" 2nd user vimrc file: "~/.vim/vimrc" user exrc file: "$HOME/.exrc"
-
第二种打开:
:e ~/.Vimrc
(.Vimrc文件是自己创建的,Vim会自动搜索到)
-
-
注释:
'
单引号 -
根据每一行的开头都显示行号:
- 开启:
:set number
- 关闭:
:set nonumber
- 简写:
:set nu
- 开启:
-
设置光标移动位置的时候,右下角显示页码详细信息:
- 开启:
:set ruler
- 关闭:
:set noruler
- 简写:
:set rul
- 开启:
-
设置查看历史记录:
- 设置历史记录1000页:
:set history=1000
- 设置历史记录1000页:
-
查找的时候匹配值会高亮显示:
- 开启:
:set hlsearch
输入完/
后面跟要查找的值,你会发现高亮匹配。 - 关闭:
:set nohls
- 简写:
:set hls
- 开启:
-
查找的时候边输入搜索,边高亮显示:
- 开启:
:set incsearch
输入完/
后面跟要查找的值,你会发现一边搜索一边高亮提示 - 关闭:
:set noincsearch
- 简写:
:set inc
- 开启:
-
忽略查找选项的大小写:
- 开启:
:set ignorecase
- 开启:
-
自动缩进功能:
:set autoindent
:set smartindent
Vim不同模式
四种模式:
普通模式
- 打开默认模式
- 移查删改
可视化模式:
- 对一整块区域操作:按
v
插入模式:
- 添加文本:按
i
命令模式:
- 命令模式跟普通模式有些相似
- 按
esc
+:
+输入的命令
基础入门
Vim 寄存器
类型 | 含义 | 表达方式 | 举例 | 特点 |
---|---|---|---|---|
无名寄存器 | 默认寄存器 | “” | “” p=p | 会被最后一条覆盖 |
数字寄存器 | “+{0-9}缓存最近10次操作 | ”0 “{1-9} | ”0P “1P | 0用于复制专用1-9用于最近9次行删除活修改记录 |
有名寄存器 | 26英文字母命名有名寄存器 | ”[a-z]/[A-Z] | "ayw | "A会通过^J追加到“a寄存器中 |
黑洞寄存器 | 有去无回 | ”_ | "_dw | 只想删除而不是覆盖无名寄存器 |
- 查看寄存器:
:reg
Vim移动、跳转与缩进
移动:
光标的移动
h | 左移 |
---|---|
l | 右移 |
j | 下移 |
k | 上移 |
^/0 | 移动到行首/包含缩进空格 |
$ | 移动到行尾 |
单词和字符串移动
w(识别特殊字符)/W(不识别特殊字符) | 正向移动到一个单词开头 |
---|---|
b/B | 反向移动 |
e/E | 正向移动下一个单词结尾 |
ge | 反向 |
跳转:
Ctrl+f/F | 下一页 |
---|---|
Ctrl+b/B | 上一页 |
Ctrl+d/u | 向下/上翻半页 |
gg | 跳转到文件首行 |
<Line_Number>gg/G | 跳转到指定行 |
G | 跳转到文件最后一行 |
{g}+Ctrl-g/G | 查看文件信息/{g}更加详细 |
缩进:
>>/:> | 右缩进 |
---|---|
m,n /:m>(n-m+1) | m到n行缩进(:25,66 >) |
m>n等价于命令:m,m+n-1> | m行开始共n行缩进一次(:25>3(缩进行数)) |
增删改查等常规操作
删除、复制、粘贴
-
对比:
Windows Vim 不同处 cut delete 剪切:和剪切相同,而不是直接删除 copy yank 复制:等同于复制由于c用于修改(change)被迫选了yank paste put 粘贴:粘贴完全相同
基本操作:
按键操作 | 定义 |
---|---|
d = delete = cut | 剪切 |
y = yank ~copy | 类似于复制 |
p/P = put ~ paste | 粘贴到光标后/光标前 |
u = undo | 撤销之前操作 |
Ctrl+r = redo | 重做/恢复之前操作 |
基础操作:
按键操作 | 定义 |
---|---|
yw | 复制当前光标单词 |
y2w | 复制正向两个单词 |
p/P = put ~ paste | 粘贴到光标后/光标前 |
yy类似于dd | 复制当前光标整行 |
调换字符:
按键操作 | 缓冲区内容 |
---|---|
{start} | Practica lvim |
F{space} | Practica lvim |
x | Practica lvim |
p | Practica lvim |
行剪切粘贴
按键操作 | 缓冲区内容 |
---|---|
{start} | Line1 Line2 |
dd | Line2 |
p | Line2 Line1 |
组合删除:
([count]operation([Count]{motion}))
x/X | 删除光标下/前单个字符 |
---|---|
dw(d = delete w = word) | 删除一个单词(必须再词首) |
d{hjkl} | 删除上下左右一个操作前的字符 |
d$=D | 删除光标到行尾的字符 |
d^ | 删除光标到行首的字符 |
-
扩展:
dd 删除当前整行 n{dd} 向下删除n行(包括当前行)(5dd) 5dw 删除正向单词5次 3w 正向移动单词3次 D3w 正向删除3w动作 2d3w 正向删除3w动作 2次
修改、查找、替换
插入
按键操作 | 定义 |
---|---|
Shift+i/A | 插入模式并移动到行首/尾 |
a/i | 光标后/前插入 |
[n]O/o | 行前/后插入n次 |
[n] + i | 插入模式重复n次(5 i hello ESC) |
转换
按键操作 | 定义 |
---|---|
~ | 单个字符大小写转换 |
g ~ w | 单词大小写转换(必须再首行才可以操作) |
g ~ $/g ~ ~ | 整行大小写转换 |
gU/uw | 单词转换成大小/写 |
. | 对上一次操作的重复 |
查找
按键操作 | 定义 |
---|---|
F/f{char} | 反向/正向查找单个字符 |
t{char} | 查找字符前一个字符 |
dt{char}/df{space]} | 删除光标到查找字符间字符 |
/{char} | 命令查找 |
替换
查找替换
-
语法
[range]s[ubstiture]/{pattern}/{string}/[flags]
按键操作 定义 s/going/rolling/g 当前行所有goging替换成rolling(: s/run/sss) %s/going/rolling/g %匹配所有范围(:%s/run/sss)替换全局
操作替换
按键操作 | 定义 |
---|---|
Shift+r/R | 替换模式 |
r | 单个字符替换 |
cw | 修改单个单词 |
c$/C类似于d操作符 | 修改光标之后行内内容 |
高级功能
缓冲区与多文件编辑
缓冲区
- Buffer 是内存中一块缓冲区域,用于临时存放Vim打开过的文件。
缓冲区列表
- :files
- :buffers
- :ls
- 打开以后会看到显示的信息如下:
- 1,2,3,4,5,6:缓冲区序列号
- #/%a:指示状态
- Buf-ant.txt:文件名
- 第一行:光标位置
- 打开以后会看到显示的信息如下:
缓冲区列表指示状态
标记 | 含义 |
---|---|
a | 激活缓冲区,缓冲区被加载且显示 |
h | 隐藏缓冲区,缓冲区被加载但不显示 |
% | 当前缓冲区 |
# | 交换缓冲区 |
= | 只读缓冲区 |
+ | 已经更改缓冲区 |
- | 不可改缓冲区,'modifiable’选项不置位 |
缓冲区列表操作
指令 | 含义 |
---|---|
:bp[revious] | 上一个缓冲区 |
:bn[ext] | 下一个缓冲区 |
:bf[irst] | 到第一个缓冲区 |
:bl[ast] | 到最后一个缓冲区 |
:buffer Number/File_name | 指定缓冲区 |
:ball | 编辑缓冲区 |
Ctrl + ^/b# | 切换前一个buffer(交换buffer) |
缓冲区列表操作
指令 | 含义 |
---|---|
:qall! | 退出全部缓冲区 |
:wall! | 写入全部缓冲区 |
:badd | 添加一个新缓冲区,但不设置为当前缓冲区 |
:bd[elete] | 删除缓冲区 |
:n,m/%bd | 删除n到m编号/所有的缓冲区文件 |
:bufdo{CMD} | bufdo set number |
:E /:bd | 打开文件目录列表/返回到最初buffer |
多窗口与标签分组
多窗口(分屏)
分屏操作
指令 | 含义 |
---|---|
Vim-O/on | 水平/垂直分屏 n:数据,o:Open(vim -o3 nihao_0*打开) |
Ctrl + w c/q | 关闭当前窗口/最后一个窗口时退 |
Ctrl + w s | 上下分割当前打开的文件 |
:sp filename | 上下分割,并打开一个新的文件 |
Ctrl + w v | 左右分割当前打开的文件 |
:vsp filename | 左右分割,并打开一个新的文件 |
移动分屏和尺寸变动
指令 | 含义 |
---|---|
ctrl + w K | 向上移动 |
ctrl + w J | 向下移动 |
ctrl + w L | 向右移动 |
ctrl + w H | 向左移动 |
ctrl + w + | 增加高度 |
ctrl + w - | 减少高度 |
ctrl + w = | 让所有屏的高度一样 |
标签
- 标签就是容纳一系列窗口的容器。(浏览器的标签)
标签操作 | 含义 |
---|---|
:tabnew | 新建标签页 |
:tabfind | 查找并在新标签页中打开文件 |
:tabs | 显示已打开标签页的列表 |
:tabclose | 关闭当前标签页 |
:tabonly | 仅保留当前标签页打开 |
:tabn/p/first/last | 移动到下/上/第一/最后一个标签页 |
:tabm | 将当前标签页放置到指定位置 |
标签操作和命令键
指令 | 含义 |
---|---|
gt/T | 移动到下/上一个标签 |
{i}gt | 移动到i位置的标签 |
noremap :tabnext | Vimrc中自定义快捷键 |
noremap :tabprevious | Vimrc中自定义快捷键 |
:table | 编辑标签中的某个文件 |
tabm 0/tabm | 移动当前tab到第一个/最后一个 |
tabm{i} | 移动当前tab到 i+1 位置 |
文本对象和宏
文本对象
{operator} {a} {object}
- 包含尾部间隔空格
{operator} {i} {object}
- 不包含尾部单词间隔空格
快对象
textobject | 说明 |
---|---|
]/[ | [block] |
)/(、b | block |
>/<、>/< | < > block |
}/{ 、B | Block |
t | tag block: <> </ > |
Visual mode
指令 | 说明 |
---|---|
viw | 选中单词 |
vis | 选中句子 |
vip | 选中段落 |
vi( | 选中圆括号中内容 |
vi[ | 选中中括号中内容 |
vit | 选中标签中的内容 |
Visual mode (多层操作)
指令 | 说明 |
---|---|
v2i{ | 选中两层d大括号之间的所有内容数字限定选择的嵌套层数 |
v3aw | 选择三个单词(包含中间的2个间隔空格) |
v3iw | 选择三个单词(2个单词+间隔空格) |
可将v选择操作指令替换为c、x、d、y等操作(operator),来针对文本对象操作。 |
宏
- Vim的Macro就是用来解决重复的问题。
简单操作
指令 | 说明 |
---|---|
qa | 开始录制宏存到寄存器a中 |
qA | 追加宏再a寄存器中追加 |
n@a | 执行n遍a寄存器中的操作 |
@@ | 再执行一遍上一次操作 |
:n, mnormal @a | n到m 行执行j寄存器a宏操作 |
:let @a= ’ | 编辑宏a寄存器 |
宏最佳操作:
- 规范光标位置:0
- 执行编辑和操作
移动光标到容易回放的位置: j
操作模式:
- 先插入(i):
- qa:进行宏的录制
- yy:复制,p:粘贴
- ctrl + a: 进行+1
- q:退出宏
- 100@a:调用宏
宏保存
- viminfo / vimrc file
- 保存历史和非空寄存器
- vim 启动时读取
- 容易被覆盖
Visual(可视化)模式
- 定义:再可视化模式下,可以对一个文本块的整体进行操作。
三种子模式:
v | 激活面向字符的可视模式 |
---|---|
V/shift + v | 激活面向行的可视模式 |
Ctrl + v | 激活面向列块的可视模式 |
- 字符->行->块
可视化操作:
操作符 | 说明 |
---|---|
gv | 重选上次的高亮选区 |
o | 切换选取边界 |