vim入门(下)

vim入门(下)

vim不仅仅是一个文本编辑工具,更是一门语言。今天要记录一下vim作为一门语言来进行编辑以及编写宏来执行重复任务。

把vim当作一门语言来进行文本编辑

vim作为一门语言,包含了表示要执行动作的动词、限制执行范围的形容词、限制执行次数的数字以及描述被执行对象的名词。

表示要执行动作的动词包括:

按键 释义 动词属性
v 选择可视模式的范围 及物动词
c 修改字符,进入插入模式 及物动词
d 删除 及物动词
y 复制 及物动词
x 删除字符 非及物动词
i 在光标前插入,进入插入模式 非及物动词
a 在光标后插入,进入插入模式 非及物动词
p 粘贴 非及物动词
n N 下一个或者上一个/或?搜索的结果 非及物动词

限制执行范围的形容词包括:

按键 释义
i 范围之内(不包括边界)
a 周围以内(包括边界)
t 直到某个字符为止(不包括此字符)
f 直到某个字符为止(包括此字符)
/ 向后搜索,直到找到特定字符串或者正则表达式
? 向前搜索,直到找到特定字符串或者正则表达式

描述被执行对象的名词:

按键 释义
w 单词
s 句子
b
p 段落
t tag(适用于html及xml)
G 直到最后一行
nG 直到第n行
gg 直到第一行,等于1G
0 当前行的第一个字符
$ 当前行的最后一个字符

示例说明:

非及物动词单独使用:

按键组合 释义
x 删除当前字符
p 将此前复制的内容粘贴到当前位置

数字和非及物动词一起使用:

按键组合 释义
8x 从当前为止开始删除8个字符
3k 向上移动3行

及物动词和名词一起使用:

按键组合 释义
dw 删除当前单词
cw 删除当前单词并进入插入模式

及物动词、形容词以及名词一起使用:

按键组合 释义
diw 删除当前单词
ciw 删除当前单词并进入插入模式
cis 删除当前句子并进入插入模式
ci" 删除双引号之间的内容并进入插入模式
c/foo 删除直到下一个foo之前的内容并进入插入模式
ct3 删除直到下一个字符3之前的内容(不包括3)并进入插入模式
cf3 同上,但是包括3
vap 选择整个段落并进入可视模式

使用宏执行重复任务

录制以及重复使用宏的总体步骤如下:

  1. 按下q,然后按下任意一个字幕作为宏名称。宏录制开始。
  2. 在vim中进行任何编辑及操作,所有这些将被录制。
  3. 再次按下q来停止录制。
  4. 按下@以及宏名称来执行宏。
  5. 多次执行宏的按键组合为:N@以及宏名称,其中N是数字,为宏重复执行的次数。

宏应用示例:

假如我们有一个文本文件,里面是要创建的函数名,我们要把根据这些函数名创建含一个没有返回值并且参数为空的函数。

从foo变成void foo(){}

打开文本文件以后,按照如下步骤操作:

  1. 按下qa开始录制宏(a为宏名称)
  2. 编写宏内容:
    • 按下ESC、I,从当前行前面开始插入。
    • 插入"void ",然后按下ESC、A,从行后开始插入。
    • 插入"(){}",然后按下ESC、j跳转到下一行。
  3. 再次按下q结束宏录制。
  4. 按下99(假设有100个函数名)@a,将宏执行99次。

vim入门(上)

今天我要记录一下学习vim的一些收获,我对vim的了解还不能算是精通,还是入门水平,所以这篇的题目就是vim入门。

在linux或者OS X中如何用vim创建或者打开一个文件

如果你的操作系统是linux桌面版或者OS X,你可以在系统中找到Terminal。打开Terminal以后,输入vim 文件路径/文件名,如果文件存在,vim将打开这个文件,如果文件不存在,vim将新建一个文件。
如果你的操作系统是linux服务器版本,你用ssh或者VNC等方式登陆到系统以后,你默认进入了一个Terminal,可以在Terminal中执行上面的操作。
如果你的操作系统是windows,你可以安装Terminal模拟器进行以上操作。或者直接下载vim的安装包进行安装。

在编辑过程中,可以使用:w来保存,u来撤销修改,^r来恢复撤销。
如果要退出vim,:q!是不保存退出,:wq是保存并退出。具体的内容在后面会讲到。

vim的不同操作模式

vim是一款非常强大的编辑器,其在工作时有多种操作模式:

-正常模式
-插入模式
-替换模式
-可视模式
-命令行模式

同一个按键在不同的模式下有不同的含义。比如x,在正常模式下是删除一个字母,在插入模式下会插入字母“x“到文本中。

正常模式

大部分时间里,我们是在正常模式和插入模式下工作。当你用vim打开或者新建一个文档的时候,vim模式是在正常模式下。
在正常模式里,可以快速的进行一些导航或者编辑的操作。

常用的导航操作:

操作按键 操作行为
h 向左移动光标
j 向下移动光标
k 向上移动光标
l 向右移动光标
^ 跳转到本行第一个可视字幕
0 跳转到本行第0列
$ 跳转到本行的行尾
| 跳转到第0列
#| 跳转到第#列
^b 向后翻页
^f 向前翻页
^u 向后翻1/2页
^d 向前翻1/2页
gg 文章开始
G 文章结尾
zz 移动光标所在到屏幕中间
zt 移动光标所在到屏幕上方
zb 移动光标所在到屏幕下方
H 移动光标到屏幕上方
M 移动光标到屏幕中间
L 移动光标到屏幕下方

常用的编辑操作:

操作按键 操作行为
x 删除一个字母
dd 删除一整行
D 删除到行尾
s 删除字母并插入
S 删除行并插入
>> 缩进
<< 反缩进
p 粘贴到后面
P 粘贴到前面
w 下一个单词
e 词尾
b 上一个单词

正常模式与其他模式到切换

按键操作 按键行为
i 插入模式,在当前字符前插入
a 插入模式,在当前字幕后插入
I 插入模式,在行首插入
A 插入模式,在行尾插入
s 插入模式,删除当前字母并在当前字母位置插入
S 插入模式,删除当前行并在行首插入
r 替换模式,替换当前字符
R 替换模式
v 可视模式
V 可视行模式
^v 可视块模式
: 命令行模式

编辑模式

编辑模式就跟一般文本编辑器是一样的,所有的字母等输入都直接反应在文件内容中,所有正常模式下的命令都不可用。导航的话只能使用上下左右四个光标键,按键“ESC”返回正常模式。

替换模式

替换模式分为两种: r为替换当前字符,输入一个字符后会恢复到正常模式;R为多字符替换,会用输入字符持续替换当前行到内容。

可视模式

可视模式分为三种: v可视模式下可选择连续到字符串,V可视行模式下可选择连续行,^v可视块模式下可选择一整块长方形区域。选择了以后可进行复制删除修改等操作。

命令行模式

命令行模式下可操作各种命令,比如查找(/ ?)、替换(s)、保存(w)、退出(q)等。

今天先总结了一下vim的几种模式,vim还是一门强大的编程语言,将在下一篇博客中进行总结。

附录:vim键盘图
vim键盘图(英)
vim键盘图(中)

打造高效的开发环境

要打造一个高效的开发环境,有三个很重要方面:

  • 选择一个对开发者友好的操作系统
  • 选择一个轻量且功能强大的IDE
  • 选择一个高效的编辑器

操作系统的选择

在我们的日常生活中,接触最多的操作系统是Windows。

大部分人选择Windows的原因是Windows上丰富的生活娱乐软件支持,专业一点的说法就是其生活娱乐生态很好。
如果你日常生活使用的操作系统选择Mac,那你就必须舍弃很多优秀的游戏;如果你日常生活使用的操作系统选择Linux的桌面系统,你舍弃的就不仅仅是游戏了,办公生活软件也都得舍弃。

选择一个操作系统作为开发平台也是同样的道理,不过这个时候我们要考虑的就不是生活娱乐生态了,我们要考虑开发生产生态的完整性。

从开发环境和生产环境的一致性角度来说,最好的选择应该是Linux的桌面操作系统。你在centos的桌面系统上开发测试完成以后,部署到centos的服务器上出现问题的概率肯定是最小的。
但是Linux桌面操作系统的用户体验和成熟的商业操作系统相比还是有一定的差距,而且缺乏成熟的IDE。

这个时候我们就需要一个即方便开发又要对用户友好的操作系统,基于Unix的MacOS是一个不错的选择。
选择MacOS主要有以下几个好处:

  • Linux和MacOS大部分系统以及第三方开发的命令是兼容的,只有少数命令有细微差异
  • 不管你从事什么开发(前端、Android、后台、iOS等),MacOS上都有成熟的IDE可供选择
  • MacOS使用的用户体验比Linux的桌面系统和Windows都要好一些。

所以,在开发平台的选择上,我选择了MacOS。如果考虑到苹果硬件的成本比较高,可以选择Mac Mini或者黑苹果。
如果不想使用MacOS,Linux的桌面系统也是个可以接受的不错选择,Linux桌面系统在近几年也有不错的进步。

IDE的选择

IDE的选择跟你要从事开发的种类有很强的关联性。
如果你要从事iOS的开发,你就只能选择Xcode;如果你要从事Android的开发,你最好的选择可能是Android Studio。
但是如果你是从事其他的开发工作,我个人比较推荐Visual Studio Code。
我在学习python的初期,使用的是Wing IDE,接触到Visual Studio Code以后就果断放弃Wing了。

选择Visual Studio Code主要是其不但简洁,还有很多丰富的插件。这些丰富的官方以及第三方插件赋予了Visual Studio Code无比强大的功能。

  • 丰富的开发预览插件,无论你是从事c、c++,还是python;或者是用md写文档,都有大量合适的插件可以使用。
  • 丰富的编辑器支持,像vim等插件。
  • 支持各种语言编译调试的插件。

编辑器的重要性

在学习开发过程中,使用什么样的编辑器会在很大程度上决定你的开发效率。
优秀等编辑器有很多,Windows上我之前比较常用等是notepad++,MacOS上我之前使用比较多的BBEdit都是很优秀的编辑器。
这些编辑器对普通文字编辑需求来说可能已经足够了。但是写代码的过程中,更多的时候不是顺序的输入,需要不断的跳跃修改。
大部分优秀的编辑器在这方面表现就比较一般了,这个时候你就需要宇宙上最强大的编辑器vim了。

Vim的强大不仅仅是可以快速定位修改代码,它本身也是一个强大的语言。使用vim的时间越长你就越能感觉到它的强大,越无法离开它了。
Vim的内容太多了,今天的篇幅不够了。后面我会再写一些详细介绍vim的文章。