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的文章。

小站的第一个任务,如何高效的制作简明的网页

建立这个小站的初衷是记录自己在学习过程中遇到的问题,所以网站的界面不需要特别花哨,简洁明了是最好的效果了。

考虑排版的便利,决定使用mardown来写网页了。于是小站诞生后第一件事情也是很重要的一件事情产生了,就是为wordpress选择一个合适的markdown插件。

Markdown编辑器的选择

谷歌了一下wordpress支持的markdown插件,初步锁定了在下面三个编辑器中选择:

  • Jetpack
  • Typewriter
  • PrettyPress

首先是安装了推荐最多的Jetpack,这个插件功能很庞杂,安装以后感觉网站一下子了很多。

最重要的是Jetpack对markdown支持的用户体验很奇怪,用户输入markdown的文本以后会直接转化成网页,后续修改只能当作网页处理。
而且,

- Jetpack
- Typewriter
- PrettyPress

这种最基本的语法居然无法正确识别,果断还是弃了。

接下来体验的是Typewriter,推荐的文章说这个插件会完全替代原有编辑器,只支持markdown了,完全满足我的需求,且效果图也不错。
Typewriter效果图
安装完插件以后发现用年久失修来形容这个插件绝对不过分,可能是好多年没更新的缘故,安装的用户只有20个。
居然跟Jetpack一样是输入完一句markdown以后直接转网页(我甚至怀疑是Jetpack没有卸载干净,这个插件可能根本不起作用了)。跟在推荐网站上看到的宣传效果完全不一样。于是又弃了。

最后一个体验的是PrettyPress,推荐文章里带的效果图展示这个插件可以边编辑边看效果。
PrettyPress效果图
从效果图展示的体验来说,这个插件应该说是我最中意的,结果wordpress插件中心居然已经搜索不到了,悲伤的故事。

谷歌了好半天,中意的三个插件全部阵亡,还是挺心累的,最后决定直接在wordpress插件中心里搜索一下,找用户量最大的试试,于是就找到了下面这款插件(也是现在用来写文章的插件)。

  • WP Githuber MD
    这个插件的效果是比较类似与以上三个中的PrettyPress,安装量在2000+,目前是wordpress的markdown插件中使用人数最多的(是markdown的用户群太小了?还是在wordpress上用markdown就好像拆掉了豪华轿车里的装饰,自己装了几个小板凳?偷笑中。。)

WP Githuber MD的实际使用截图如下,虽然右边的预览框中会出现个别markdown语法没有翻译的情况,但用wodrepss自带但预览查看效果但时候就完全没问题了,会正确替换markdown所有但语法符号,目前来看还是很满意但了。
WP Githuber MD实际使用截图

Markdown插件终于搞好了,以后可以愉快的开始记录学习中遇到的问题了。

Welcome to my blog!

Welcome to my blog, I am a software engineer. I've recently been learning about python, nginx, bash, and some backend development stuff. I'll be documenting problems I'm having with my studies and sharing helpful articles here.If you've encountered a tricky problem, feel free to share the pitfalls you've stepped in and the lessons you've learned.

If you have any questions, you can contact me at contact@010509.xyz.

欢迎来到我的博客,我是一个软件开发工程师。我最近正在学习python、nginx、bash以及后台开发的一些东西。我会在这里记录我在学习中遇到的问题以及分享一些对我有帮助的文章。如果你也遇到过棘手的问题,欢迎一起来交流曾经踩过的坑以及取得的经验。

如果你有什么问题,可以通过contact@010509.xyz与我取得联系。