vim 超强编辑器
时间:2022-07-22
本文章向大家介绍vim 超强编辑器,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
一、Vim编辑器的基本操作
1. 基本操作
- VIM:模式化的编辑器
- 基本模式
- 编辑模式 (命令模式)
- 输入模式 (插入模式)
- 末行模式 (vim内置的命令行接口)
- Note:打开的时候默认的模式是编辑模式
- 打开文件
-
# vim [OPTION]... FILE...
-
+#
:打开文件后,直接让光标处于第#行的行首 -
+/PATTERN
:打开文件后,直接让光标处于第一个被PATTERN匹配到的行的行首;
-
- 模式转换
- 模式转换:
-
:q
:退出 -
:!
:强制退出,丢弃做出的修改; -
:wq
:保存退出; -
:x
:保存退出; -
:w /PATH/TO/SOMEWHERE
:当前编辑的文本保存到别的文件; -
ZZ
:保存退出; -
ESC
-
:
-
ESC
-
i
:insert,在光标所在处前面插入; -
a
:append,在光标所在处的后面插入; -
o
:open,在当前光标所在行的下一行打开新行,并转换为输入模式; -
I
:在当前光标所在行的行首输入; -
A
:在当前光标所在行的行尾输入; -
O
:在光标所在行的上一行打开一个新行,并转换为输入模式; - 编辑模式 – – > 输入模式
- 输入模式 – – > 编辑模式
- 编辑模式 – – > 末行模式
- 末行模式 – – > 编辑模式
- 关闭文件
-
- 图示说明如下: (转载请注明出处)
2. 光标跳转:
- 字符间跳转:
-
h
:左 -
l
:右 -
k
:上 -
j
:下 -
h,j,k,l
-
#COMMAND
:跳转由#指定的个数的字符;
-
- 单词间跳转:
-
w
:跳转至下一个单词或后一个单词的词首; -
e
:跳转至当前或下一个单词的词尾; -
b
:跳转至当前或下一个单词的词首; -
#COMMAND
:由#指定一次跳转的单词数;
-
- 行首行尾跳转:
-
^
:跳转至行首的第一个非空白字符; -
0
:跳转至绝对的行首; -
$
:跳转至绝对行尾;
-
- 行间移动:
-
#G
:跳转至由#指定行; -
G
:跳转至最后一行; -
1G
,gg
:跳转至第一行;
-
- 句间移动:
-
)
:跳转至下一个句子; -
(
:跳转至上一个句子;
-
- 段落间移动:
-
}
:跳转至下一段 -
{
:跳转至上一段
-
3. vim的编辑命令:
- 字符编辑:
-
x
:删除光标处的单个字符; -
#x
:删除光标处起始的#个字符; -
xp
:交换光标所在处的字符及其后面字符的位置;
-
- 替换命令:
-
r
,replace -
r
:替换光标所在处的字符;(单字符替换)
-
- 删除命令:
-
#dd
:向下删除#行; -
d$
:删除至绝对行尾 -
d^
:删除至行首的第一个非空白字符 -
d0
:删除至绝对行首 -
d
:删除命令,可结合光标跳转字符,实现范围删除; -
dd
:删除光标所在行;
-
- 粘贴命令:
- (
p
,put,paste) -
p
:缓冲区中存储的如果为整行内容,则粘贴至当前光标所在行的下方;否则,则粘贴至当前光标所在处的后面; -
P
:缓冲区中存储的如果为整行内容,则粘贴至当前光标所在行的上方;否则,则粘贴至当前光标所在处的前面;
- (
- 复制命令:
-
y$
:复制至绝对行尾 -
y0
:复制至绝对行首 -
y^
:复制至行首的第一个非空白字符 -
yy
:复制整行 -
#yy
:复制多行; -
y
,yank -
y
:复制,工作行行为相似于d命令;
-
- 改变命令:
- 编辑模式 – -> 输入模式
-
c
,change -
c
:修改 -
cc
:删除并输入新内容 -
#cc
:一次删除#行
二、其它编辑操作
1.可视化模式
-
v
:按字符选定 -
V
:按行选定 - Note:经常结合编辑命令;
2. 撤销此前的编辑:
-
u
(undo):撤销此前的操作;-
#u
:撤销指定次数的操作;
-
- 撤销此前的撤销:
- Ctrl+r
- 重复前一个编辑操作:
-
.
-
三、翻屏操作
-
Ctrl+f
:向文件尾部翻一屏; -
Ctrl+b
:向文件首部翻一屏; -
Ctrl+d
:向文件尾部翻半屏; -
Ctrl+u
:向文件首部翻半屏; - vim自带的练习教程:
-
vimtutor
-
四、vim的末行模式
- 内建的命令行接口;
- 特性:
- (1). 地址定界
- 后跟一个编辑命令:
-
d
:删除指定范围的内容 -
y
:复制指定范围的内容 -
w /PATH/TO/SOMEWHERE
:将范围内的行另存至指定文件中; -
r /PATH/FROM/SOMEFILE
:在指定位置插入指定文件中的所有内容; -
:start_pos,end_pos
-
#:
具体的第#行,例如:2表示第2行; -
#,#
:从左侧#表示起始,到右侧#表示结束; -
#,+#
:从左侧#表示的行开始,加上右侧#表示的行数; -
.
当前行; -
$
:最后一行; -
%
:全文;相当于(1,$) -
/pat1/,/pat2/
:表示从第一次被pat1匹配到的行开始,一直到pat2匹配到的行结束 - 使用方式:
- (2). 查找
-
n
:与命令同方向; -
N
:与命令反方向; -
/PATTERN
:从当前光标所在处向文件尾部查找 -
?PATTERN
:从当前光标所在处向文件首部查找
-
- (3). 查找并替换
-
s/要查找的内容/替换为的内容/修饰符
- 查找替换中的分隔符
/
可替换为其它字符,例如: -
i
:忽略大小写 -
g
:全局替换;默认情况下,没一行只替换第一次出现的内容; - 要查找的内容:可使用模式;
- 替换为的内容:不能使用模式,但可以使用1, 2, …等后向引用符号;好可以使用
"&"
引用前面查找时查找到的整个内容; - 修饰符:
-
s@@@
-
s###
-
s
:在末行模式下完成查找替换操作
-
六、vim的文件模式
1. 多文件模式
- vim FILE1 FILE2 FILE3 …
-
:next
切换至下一个文本 -
:prev
切换至前一个文本 -
:first
切换至前一个文本 -
:last
切换至最后一个文本 -
:wall
保存所有 -
:qall
退出所有
-
2. 窗口分隔模式
- vim -o|-O FILE1 FILE2 …
3. 单文件窗口分割:
-
Ctrl+w,s
:split,水平分割 -
Ctrl+w,v
:vertical,垂直分割
4. 定制vim的工作特性:
- 配置文件:(永久有效)
- 全局:
/etc/vimrc
- 个人:
~/.vimrc
(默认不存在,需要自己创建)
- 全局:
- 末行:(当前vim进程有效)
- (1) 行号:
- 显示:
set number
,简写为:set nu
- 取消显示:
set nonumber
,简写为:set nonu
- 显示:
- (2) 括号匹配:
- 匹配:
set showmatch
,简写为:set sm
- 取消匹配:
set nosm
- 匹配:
- (3) 自动缩进:
- 开启:
set ai
- 禁用:
set noai
- 开启:
- (4) 高亮搜索
- 开启:
set hlsearch
- 禁用:
set nohlsearch
- 开启:
- (5) 语法高亮
- 开启:
syntax on
- 禁用:
syntax off
- 开启:
- (6) 忽略字符大小写
- 启用:
set ic
- 禁用:
set noic
- 启用:
5. 书籍推荐:《Vim-handbook-cn-72》
6. 获取帮助
- 在末行模式下:
help SUBJECT
- JavaScript之call()和apply()方法详解
- Javascript快速入门(下篇)
- JavaScript引用类型之Array数组的栈方法与队列方法
- ExtJs学习笔记(14)_Column布局
- 高级盲注—floor,rand,group by报错注入
- 刷脸注册、试装、支付……仅靠一张脸就能买买买的时尚店开业了
- JavaScript引用类型之Array数组之强大的splice()方法
- Linux快速入门03-系统管理
- JavaScript引用类型之Array数组的concat()和push()方法的区别
- JavaScript引用类型之Array数组的排序方法
- Linux快速入门02-文件系统管理
- JavaScript引用类型之Array数组的toString()和valueof()方法的区别
- Linux快速入门04-扩展知识
- JavaScript引用类型之Array数组的拼接方法-concat()和截取方法-slice()
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- java入门015~springboot2整合mybatis,轻松实现mysql数据的增删改查
- 详解Android activity与fragment之间的通信交互
- Android App内监听截图加二维码功能代码
- 微信小程序登录与注册验证码倒计时的效果实现
- Android仿微信朋友圈全文、收起功能的实例代码
- TextView实现图文混合编排的方法
- 小程序云函数调用http或https请求外部数据
- 详解Android中图片的三级缓存及实例
- 借助云开发实现小程序的登陆注册功能
- TextView显示文本控件两种方法 TextView显示link的方法
- Java入门005~Springboot2.2.4引入freemarker模板
- TabLayout使用方法详解
- Java入门006~springboot+freemarker+bootstrap快速实现管理后台
- Java入门007~springboot+freemarker+bootstrap快速实现分页功能
- ToolBar使用方法详解