Vim教程1 Vim的语法
基于GitHub开源Vim学习项目learn-vim
1. 为什么需要了解Vim语法
像是我们学习一门外语,我们需要了解它的语法、它的词汇并不断地练习。对于Vim而言,它的语法就是它命令的设计逻辑,词汇就是它的各种快捷键。通过学习其语法,能够让我们通过其规律来进行Vim操作,而不是靠记忆快捷键表来学习。
2. 什么是Vim的语法
Vim的语法:
动词 + 名词
动词 + 量词 + 名词
其中动词指代的以下的键:
y yank(复制)
d delete(删除)
c change 删除文本,将删除的文本存到寄存器中,进入插入模式
根据 :h operator
可以看到,一共有16种operator,但一般只用以上的三种操作符即可。
名词指代的以下的键:
h 左
j 下
k 上
l 右
w 向前移动到下一个单词的开头
} 跳转到下一个段落
$ 跳转到当前行的末尾
3. Vim语法的应用
3.1 实例
let mut a = "123";
对于上述的Rust代码,我们可以结合上述的的语法规则完成下面的操作:
- 复制当前光标位置到行尾的所有文本
- 删除当前位置到下一个单词的开头
- 修改当前位置到这个段落的结尾
根据我们上述的语法规则 动词+名词
。可以使用以下的快捷键进行操作:
- 复制+行尾 -> y$
- 删除+单词开头 -> dw
- 修改+段落 -> c}
当然根据我们上述的语法规则 动词+量词+名词
。也可以使用以下的快捷键进行以下的操作:
- 向左拷贝2个字符:
y2h
- 删除后两个单词:
d2w
- 修改后面两行:
c2j
有一种特殊的语法规则 2*动词
,比如:dd
,yy
,cc
用来执行删除,复制或者修改整个行。这种语法规则是用来表示进行行级操作。
3.2 更多名称(文本对象Text Objects)
上述的语法只能快捷地编辑一些简易的情况。但难以方便地解决比较复杂的情况,比如如何删除括号中的所有内容?如何删除引号内的内容?
文本通常是结构化的,特别是在代码中,文本经常被放置在小括号、中括号和引号当中。Vim提供了一种处理这种结构化的文本对象的方法:
文本对象可以被操作符operations使用,这里有两类文本对象:
i + object 内部文本对象
a + object 外部文本对象
内部文本对象与外部文本对象区别在于,内部文本对象选中的部分不包含包围文本对象的空白或括号等,而外部文本对象则包含这些对象。如果你的光标位于一对括号内不,例如(hello vim)
中:
- 删除括号内部的内容但保留括号:
di(
- 删除括号以及内部的内容:
da(
让我们看一些别的例子,假设你有这样一段Rust的函数,你的光标停留在"Hello"中的"H"上:
fn hello() -> bool {println!("Hello Vim");true
}
- 删除整个"Hello Vim":
di(
- 删除整个函数(被{}包含):
di{
- 删除"Hello"这个词:
diw
让我们来看最后一个例子。假设你有这样一些html的标签的文本:
<div><h1>Header1</h1><p>Paragraph1</p><p>Paragraph2</p>
</div>
如果你的光标位于"Header1"文本上:
- 删除"Header1":
dit
- 删除
<h1>Header1</h1>
:dat
如果你的光标在"div"文本上:
- 删除
h1
和所有p
标签的行:dit
- 删除所有文本:
dat
- 删除"div":
di<
下面列举一些常用的文本对象:
w 一个单词
p 一个段落
s 一个句子
(或) 一对()
{或} 一对{}
[或] 一对[]
<或> 一对<>
t XML标签
" 一对""
' 一对''
` 一对``
可以通过 :h text-objects
了解更多
4. Vim语法的结合性
结合性意味着有很多可以组合起来完成更复杂命令的普通命令,就像是在编程中通过一些简单的抽象建立更复杂的抽象,在Vim中你可以通过简单的命令的组合执行更复杂的命令。Vim语法正是Vim中命令的可结合性的体现。
4.1 Vim与外部程序结合性
Vim的结合性强大之处体现在它和外部程序的可结合性。Vim的过滤操作符!
可以用外部程序过滤我们的文本。
假设你有下面这段混乱的文本并且你想把它用tab格式化的更好看的一些:
Id|Name|Cuteness
01|Puppy|Very
02|Kitten|Ok
03|Bunny|Ok
这件事情通过Vim命令不太容易完成,但是你可以通过终端提供的命令column
很快的完成它,当你的光标位于"Id"上时,运行!}column -t -s "|"
,你的文本就变得整齐了许多:
Id Name Cuteness
01 Puppy Very
02 Kitten Ok
03 Bunny Ok
让我们分解一下上面那条命令,动词是!
(过滤操作符),名词是}
(到下一个段落)。过滤操作符!
接受终端命令作为另一个参数,因此我把column -t -s "|"
传给它。我不想详细描述column是如何工作的,但是总之它格式化了文本。
这就是Vim的结合性的强大之处。知道的动词 操作符
、名词 动作
,终端命令越多,组建复杂操作的能力成倍增长。
这种具有结合性的行为也正符合Unix的哲学:一个命令做好一件事。动作只需要做一件事:前往X。操作符只需要做一件事:完成Y。通过结合一个操作符和一个动作,你就获得了YX:在X上完成Y
甚至,动作和操作符都是可拓展的,你可以自己创造动作和操作符去丰富你的Vim工具箱,Vim-textobj-user
插件允许你创建自己的文本对象,同时包含有一系列定义好的文本对象。
Vim教程1 Vim的语法相关推荐
- 《呆呆大虾原创VIM教程-基础篇》文 and《Vim-从入门到进阶》图
目录 将CapsLock 键 改为 ESC键 原创Vim教程-01前言 原创Vim教程-02小试牛刀 原创Vim教程-03帮助(辅助) 原创Vim教程-04移动 对区域进行选择(图) Vim教程-05 ...
- Vim教程2 在文件中的移动
基于开源的Vim学习教程learn-vim 1. 字符导航 在Vim中最基本的移动单元是上下左右移动一个字符. h 左 j 下 k 上 l 右 当然也可以通过键盘的方向键进行移动. 为什么Vim用这几 ...
- vim教程:vimtutor
目录 一.第一讲 1.移动光标 2.VIM的进入和退出 3.文本编辑之删除 4.文本编辑之插入 5.文本编辑之添加 6.编辑文件 7.第一讲小结 二.第二讲 1.删除类命令 2.更多删除类命令 3.关 ...
- Linux系统里让vim支持markdown格式的语法高亮
Markdown是深受程序员喜爱的一个文件格式. 然而Linux里默认的vim设置,并不支持markdown格式的语法高亮显示. 下面就来介绍如何设置使得markdown格式的文件在vim里也能享有语 ...
- 【Liunx】Linux vi/vim 教程
所有的 Unix Like 系统都会内建 vi 文书编辑器,其他的文书编辑器则不一定会存在. 但是目前我们使用比较多的是 vim 编辑器. vim 具有程序编辑的能力,可以主动的以字体颜色辨别语法的正 ...
- Linux vi/vim教程
文章转自:http://www.runoob.com/linux/linux-vim.html 版权归原作者! 所有的 Unix Like 系统都会内建 vi 文书编辑器,其他的文书编辑器则不一定会存 ...
- Linux入门教程——VI/VIM 编辑器
前言 本文小新为大家带来 Linux入门教程--VI/VIM 编辑器 相关知识,具体内容包括VI/VIM是什么,VIM的三种工作模式介绍,包括:一般模式,编辑模式,指令模式,以及模式间转换等进行详尽介 ...
- VIM 教程文档的学习
原文:http://vimcdoc.sourceforge.net/ 文章目录 词移动 移动到一个指定的字符 括号匹配 移动指定行 滚屏 搜索 简答的查找模式 匹配特殊字符 标记 其它 操作符 可视模 ...
- linux下vi与vim区别以及vim的使用-------vim编辑时脚本高光显示语法
vi与vim vi编辑器是所有Unix及Linux系统下标准的编辑器,他就相当于windows系统中的记事本一样,它的强大不逊色于任何最新的文本编辑器.他是我们使用Linux系统不能缺少的工具.由于对 ...
最新文章
- 浅谈Web中前后端模板引擎的使用
- 模板引擎--handlebars
- 一个案例、6个步骤全程详解A/B测试,看这篇就够了!
- Android中的PopUpWindow
- c语言关键字识别程序,c语言-以关键字搜索程序
- 2017黑客大预言:病毒传播无需文件,无人机可能成为炸弹
- Atitit BLE 协议栈 艾提拉总结 目录 1. ——关于BLE的一些基本概念——
- 浅谈SSD应用和发展趋势
- HFSS阵列天线设计与仿真3
- 遗传算法应用于XGBoost的调参过程
- win10计算机的数字小键盘,如何设置Win10开机默认开启数字小键盘?
- 软件工程(二)——过程模型
- 屏蔽广告效果好的手机浏览器,这3款你一定不要错过
- java周总结1113_流总结_序列化_xml_html
- 机智云AIoT开发平台,让物联网产品开发和运营有迹可循
- linux查询进程号是否存在启动脚本,Shell实现判断进程是否存在并重新启动脚本分享...
- 如何在命令行快速获取公网动态 IP 地址
- UI设计要学习哪些软件
- 怎样修改MindMapper中的线条
- matlab 对曲线积分,matlab计算曲线积分并画出积分曲线
热门文章
- 应用复杂程度极高 公安大数据向新技术招手
- 盘古开源:“大内存”时代即将到来,颠覆性的存储模式
- Windows 10的中文用户名怎么改成英文?
- 联发科4G全网通MT6735通讯模块方案,MT6735核心板资料
- iOS马甲包遇到问题怎么过审,App Store
- 「一文讲透」快消行业营销数字化转型
- android语音信箱功能,语音信箱的功能有哪些?
- Java学习顺序流程和学习方法
- 调研发现:外企最关注员工心理健康,私企对财务健康投资最大,国企更关注员工职业和社会健康 | 美通社头条...
- 打造高效的跑腿配送系统,分享源码与经验