星期三, 八月 28, 2019

VIM学习笔记 工具箱-图表制作 (Toolkit-Diagram)

在编写VIM学习笔记的过程中,特意制作了诸多图表,以便更好地说明编辑状态的变化和命令操作的顺序。以下则将介绍我用于制作图表的几款工具。

Cacoo

Cacoo是免费的的图表绘制网络服务。在其简洁易用的界面中绘制图表,甚至可以称为一种享受。

Cacoo提供了基本形状、网络图、流程图和用户界面等多种类型的图形,可以方便地绘制出丰富多样的图表。每张图表(Diagram)中,可以包含多个页面(Sheet),某个页面还可以做为其它页面的背景。

在图表绘制页面中,可以插入各种图形和文字,并设置其尺寸、边框、阴影等属性。在设置色彩时,还能够利用滴管拾取颜色,以保持图表各部分色彩的一致性。

Tools_Diagram_Cacoo

利用鼠标拖拽,能够方便地定位和排列图表对象。当移动对象与其它对象接近时,将显示辅助标尺,协助你将图形停靠在合适的位置。

Cacoo

在图表管理页面中,可以通过列表或缩略图方式浏览图表;能够创建目录来组织图表;还可以复制、移动或删除图表。可以将多个对象组合成一个整体,也可以将组合后的对象重新分开。通过前置和外置对象,能够更加方便地排布复杂地图表对象。

Tools_Diagram_Cacoo_Folders

图表可以导出为PNG、PDF、PPT等格式的文件;也可以通过公开的链接()或者嵌入的代码来分享图表。

Tools_Diagram_Cacoo_Share

Dia

Dia是开源的图表制作工具,支持Windows、Linux和Mac操作系统。Dia可谓历史悠久,以至于你初次见到它的面目时,会有恍如隔世的陌生感。当然,你更可能惊讶于它波澜不惊的缓慢更新。在图表制作领域,有太多身躯庞大的怪物,比如Microsoft Office Visio,比如LibreOffice Draw,而如Dia这般简陋的存在堪称异类。而正是这份执拗的质朴,让人不离不弃,简单直接地操作,跨平台的免费存在,有友如斯,夫复何求。

Dia内置了流程图、网络图、电路板、数据库和UML等等图形组件,您还可以下载更多类型的图形组件。

Tools_Diagram_Dia_Objects

通过鼠标拖拽,可以很方便地放置和移动图形组件,也可以随心所欲地调整图形尺寸。借助于网格线,可以更直观地排布图形;如果设置了“对齐网格”选项,那么在移动和缩放组件时,都将自动以网格为单位进行操作,既保证了图形尺寸的一致性,又可以快速精确地对齐各个组件。

Tools_Diagram_Dia_Perfer_Grid

在添加直线或折线来连接多个组件时,线条的断点会自动吸附至组件的连接点之上,而不需要你手动调整位置;连接建立之后,即使移动组件,连接也不会断开,而是会随着组件一起延展。这对于持续微调图形,还是很有帮助的。

Tools_Diagram_Dia_Connect

图表可以导出为PNG、JPG、PDF、LaTex等格式的文件。

Ver: 2.0 | YYQ<上一篇 | 目录 下一篇>

星期一, 八月 26, 2019

VIM学习笔记 Ex命令寻址方式(Ex Command-Address)

使用以冒号“:”开头的Ex命令,可以非常高效地处理多行的大段文字。例如使用以下Ex命令进行文本编辑:

命令缩写用途
deleted删除行
movem移动行
copyco复制行
t复制行,与co同义

Ex命令由行地址和命令组成,并以回车键结束。在Ex命令中,可以使用以下三种方式,来指定命令所影响的行范围:

  • 使用行号,指定绝对地址;
  • 使用特殊符号,指定相对地址;
  • 使用搜索模式,指定匹配地址。

指定行号的绝对地址

使用以下命令,可以打印当前文件的第二行内容(到屏幕):

:2p

通过在命令中指定行号范围,可以显示多行内容:

:2,10p

使用以下命令,可以将11至15行移动到23行下面:

:11,15m23

使用以下命令,可以复制23至29行并粘贴到100行下面:

:23,29co100

使用:line delete count形式的命令,即移动到line所指定的行(默认为当前行),然后删除总数为count行的文本(包括line所指定的行在内)。例如,以下命令将删除3至4行(总计两行)文本:

:3 delete 2

特殊符合指定的相对地址

在指定行地址时,可以将以下特殊符号与行号组合使用:

  • .”,点代表当前行;
  • $”,美元符号代表最后一行;
  • %”,百分号代表文件的每一行,等同于1,$的组合;
  • +”,加号用于增加偏移量;
  • -”,减号用于减少偏移量。

使用以下命令,可以删除最后一行:

:$d

使用以下命令,可以删除从当前行到文件末尾:

:.,$d

使用以下命令,可以删除文件中的所有行:

:1,$d

:%d

使用以下命令,可以把20至当前行的文本移动到文件末尾:

:20,.m$

使用以下命令,可以复制所有行并粘贴到文件的尾部:

:%t$

当符号“+”和“-”放置在数字前面时,就会像数学运算符一样,表示加上或减去指定的行数。

使用以下命令,可以删除当前行之前的所有行:

:1,.-1d

使用以下命令,可以删除从当前行到当前行以下20行:

:.,.+20d

使用以下命令,可以把226行到文件末尾的文本移动到当前行的上面两行的后面:

:226,$m.-2

由于当前行是假定的开始位置,因此在使用+或-时并不必需输入圆点符号;如果在+或-后面没有数字,那么就等价于+1和-1;数字0代表文件的开头(即0行)。

使用以下命令,可以复制3行(当前行,前一行,后一行),并粘贴到文件开头:

:-,+t0

搜索模式指定的匹配地址

使用以下命令,可以删除下一个包含模式pattern的行:

:/pattern/d

使用以下命令,可以删除下一个包含模式pattern的行的下一行:

:/pattern/+d

使用以下命令,可以删除第一个包含pattern1的行与第一个包含pattern2的行之间的所有行:

:/pattern1/,/pattern2/d

使用以下命令,可以从当前行到第一个包含pattern的行之间的文本移动到23行后面:

:.,/pattern/m23

在命令中使用偏移量(offset),可以精确地重置地址定位。例如,以下命令中+1是指匹配行的下一行,-1是指匹配行的上一行:

:/pattern1/+1,/pattern2/-1 delete

在命令中指定行号,将从指定行开始进行查找。例如,以下命令将从第7行开始查找,然后删除匹配行:

:7/pattern/d

重新定义当前行的位置

假设当前光标在第一行,执行以下命令:

:100,+5p

系统将反馈以下信息,认为终止行位置小于起始行位置:

Backwards range given, OK to swap (y/n)

如果输入“y”,则意味着交换行范围的起止位置,即显示(1+5=)6至100行;如果输入“n”,则行范围(100至6行)无效,命令失败。

如果我们希望将第一个行地址视为“当前行”,那么可以在ex命令中使用分号“;”代替逗号“,”。

不管当前光标处于文件的哪一行,以下命令都将视第100行为当前行,并显示当前行及之后5行(即100至105行):

:100;+5p

分号也可以用于搜索模式的相对地址中。例如,以下命令将显示下一个包含模式pattern的行以及之后的10行:

:/patter/;+10p

Ver: 2.0 | YYQ<上一篇 | 目录 下一篇>

星期一, 八月 19, 2019

VIM学习笔记 Ex模式 (Ex Mode)

很久很久以前,人们还是使用打印设备而非显示器来与计算机进行沟通。比如打印出某行代码以确定需要修改的内容,然后针对文本进行操作,再次打印以检查变更效果。在此情形之下,行号就成为有效的定位工具。虽然,今天我们已经不再如此依赖打印设备,但是基于行编辑的Ex模式,在操作文本时还是有某些优势的:比如将文本从一个文件移动到另一个文件;快速地对大于单个屏幕的文本块进行编辑;针对整个文件中的特定模式进行全局替换等等。

可以说,Vim是Ex行编辑器的可视模式。或者说,Ex是Vim的底层行编辑器。

进入Ex模式

在操作系统的命令行中,使用以下Ex命令,可以进入Vim的Ex模式:

$ ex filename

ExMode

在Vim的常规模式下,使用Q或者gQ命令,可以进入Vim的Ex模式:

ExMode_FromNormalMode

执行Ex命令

ex命令由行地址和命令组成,并以回车键结束。

如果我们在命令中没有指定行号,那么命令将默认作用于当前行。例如以下命令将在当前行中,将第一个"Hello"替换为"Hi":

:s/Hello/Hi

请注意,在命令执行之后,受到影响的当前行,将会被重新打印到屏幕上:

ExMode_ChangeCurrentLine

如果我们在命令中指定了行号,那么命令将作用于指定的行范围。例如以下命令将在多行中,将所有"Hello"替换为"Hi":

:1,6s/Hello/Hi

请注意,在命令执行之后,受到影响的行信息,将会被重新打印到屏幕上:

ExMode_ChangeMultiLine

退出Ex模式

使用以下命令,可以退出Ex模式,并进入常规模式:

:vi

使用以下命令,可以退出Ex模式,并返回到操作系统的命令行提示符下:

:q

ExMode_Q

Ver: 2.0 | YYQ<上一篇 | 目录 下一篇>

星期二, 八月 06, 2019

VIM学习笔记 工具箱-屏幕截图 (Toolkit-Screenshot)

在编写VIM学习笔记的过程中,我刻意增加了屏幕截图/录像的数量,以便能够更直观地说明各种命令的用法和效果。以下则为我用于制作屏幕截图/录像的几款工具:

屏幕截图

在屏幕截图领域,有无数优秀的软件。由于使用频率如此之高,我相信每个人也都有自己的偏好。而Greenshot则是我在试用多款软件之后,安定下来的选择。

Greenshot可以截取整个屏幕、指定窗口、和矩形区域。而“截取上次区域”功能,则可以快速截取之前选定的屏幕区域。比如:我想要说明针对同一文字区域执行命令的效果,那么首先在原始状态下通过鼠标拖拽截取屏幕,然后执行命令,接下来只要点击Shift + Print快捷键就可以针对上次选定的屏幕区域再次进行截图。这大大提高了多次重复截图的效率,而且确保了多次截图时像素位置和图片尺寸的一致性。

Greenshot可以将屏幕截图输出到剪贴板、打印机、文件或者内置的图片编辑器。通过选择以下快捷菜单,可以将屏幕截图同时发送到剪贴板和图片编辑器。那么你就可以在图片编辑器中查看屏幕截图的效果;然后选择继续编辑图片,或者保存为文件,或者直接关闭编辑器,然后将图片粘贴到其他应用程序当中。

Tools_Screen_Greenshot_Destination

在Greenshot内置的图片编辑器中,可以为图片增加注解、标识重点、绘制图形;还可以应用边框、阴影、锯齿、高亮和模糊等多种效果。更重要的是,图片可以保存为greenshot类型的文件。之后您可以多次打开greenshot文件,不断对屏幕截图进行修改,然后再将最终结果输出为PNG或JPG图片格式。这种对于屏幕截图进行多次调整的能力,在其他屏幕截图软件中并不多见。

Tools_Screen_Greenshot_Editor

Greenshot是免费的开源软件,支持Windows和Mac操作系统;在Linux下,我会使用开源的Flameshot;而在Mac下,则购买了久负盛名的SnagIt,同时也使用免费的Snappy

屏幕录像

对于多步骤的键盘操作,静态的屏幕截图就显得力不从心了,而使用ScreenToGif录制动态的屏幕录像,则能够更流畅地演示连续操作。

点击“录像机”按钮,然后将ScreenToGif窗口像取景框一样,移动到需要捕捉的屏幕区域之上;点击红色“录制”按钮,即可以进行屏幕录像:

Tools_Screen_ScreenToGif_Recorder

完成录制之后,可以在ScreenToGif内置的编辑器中,对屏幕录像进行逐帧调整。比如添加文本和图像元素,调整帧的顺序,删除多余的帧等等。也就是说,你可以通过后期制作,来提供更多视觉辅助,并修正操作演示中不够顺畅的步骤。屏幕录像编辑完成之后,可以导出为Gif动画或者Avi视频。

Tools_Screen_ScreenToGif_Editor

ScreenToGif是Windows下的开源软件。在Linux下,我会使用开源的OBS Studio;在Mac下,我使用开源的屏幕录像软件Kap

按键屏显

对于Vim中大量的按键操作,即使利用屏幕录像来演示,有时仍然显得词不达意。而使用Carnac,则可以在屏幕上实时显示按键操作,也就可以同步展示输入的命令,以及执行命令的结果。

通过设置按键屏显的位置、字体大小、颜色、背景和样式,可以更加美观和直观地辅助屏幕录像。

Tools_Screen_Carnac_Appearance

例如以下屏幕录像,演示了在将'j'映射为'gj'之后,向下移动键和j键,对于折行的不同处理(请参阅折行章节的详细说明)。俗话说,“一幅图画胜过千言万语”,而一段活动的影像更又胜强百倍了吧?

j-gj

Carnac是Windows下的开源软件。在Linux下,我会使用开源的Screenkey;在Mac下,我使用开源KeyCastr

工具箱 — 屏幕截图相关
WindowsLinuxMac
屏幕截图logologologo
屏幕录像logologologo
按键屏显logologologo

Ver: 2.0 | YYQ<上一篇 | 目录 下一篇>

<

星期六, 八月 03, 2019

VIM学习笔记 命令行模式 (Command-line Mode)

命令行模式 (Command-line Mode)

输入:命令,使用/?搜索命令,都将进入命令行模式。用户可以在屏幕底部的命令行中输入命令,或者使用以下快捷键遍历之前的命令历史,然后点击<Enter>键来执行命令。

显示上一条命令
Ctrl + p
显示下一条命令
Ctrl + n
Ctrl + b移动到命令行开头
Ctrl + e移动到命令行末尾
Ctrl + ←向左移动一个单词
Shift + ←
Ctrl + →向右移动一个单词
Shift + →
Ctrl + w删除光标前的一个单词
Ctrl + u删除光标前的所有字符

输入部分命令,比如输入:set,然再点击上下光标键,将自动对命令历史纪录进行过滤,仅显示以“set”开头的命令历史纪录。在输入/?查找命令时,此特性同样有效。请注意,此时是大小写敏感的。

继续键入命令:set i之后,按下TabCtrl+D键,将显示以“i”开头的set命令;继续按Tab键,则可以在这些命令列表间移动,按下回车键就可以执行该命令。

set_i_tab

进入命令行模式之后,点击Ctrl+rCtrl+w键可以将当前光标下的word粘贴到命令行中;点击Ctrl+rCtrl+a键可以将当前光标下的WORD粘贴到命令行;点击Ctrl+r%键可以将当前文件名粘贴到命令行。

利用以上快捷键,可以大大简化命令行的输入。比如想要替换光标下的单词,那么只要输入:substitute命令,然后再点击Ctrl+r和Ctrl+w键,就可以将光标下的单词插入到命令行中,而不需要手工输入替换的文字了。

:%s/<Ctrl+r><Ctrl+w>//g

比如在编辑vimrc配置文件时,会面对大量的设置命令,只需要将光标移动到配置选项之上,输入:help命令,然后点击Ctrl+r和Ctrl+w键,就可以查询该关键字的帮助信息:

:help <Ctrl+r><Ctrl+w>

使用:help c_CTRL-R_CTRL-W命令,可以查看关于Ctrl+r和Ctrl+w键的帮助信息。使用:help cmdline-editing命令,可以查看关于命令行编辑的帮助信息。使用:help :命令,可以查看关于命令行模式的帮助信息。

命令行窗口 (Command-line Window)

可以使用以下四种方式,来打开命令行窗口:

  1. 在命令行模式下,使用CTRL-F快捷键打开命令行窗口,并显示命令历史纪录;
    请注意,您可以使用:set cedit命令,更改此快捷键。
  2. 在常规模式下,使用q:命令打开命令行窗口,并显示命令历史纪录;
    command-line-window
  3. 在常规模式下,使用q/命令打开命令行窗口,并显示向前查找(search forward)的历史纪录;
    command-line-window
  4. 在常规模式下,使用q?命令打开命令行窗口,并显示向后查找(search backward)的历史纪录;
    command-line-window

我们可以将命令行窗口,视为常规的缓冲区 (Buffer)来操作。使用kj键,可以在命令历史纪录中上下移动;也可以使用/命令查找命令历史纪录,并在此基础上进行修改,然后点击<Enter>键来执行命令(命令行窗口也将同时关闭)。

如果同时打开多个缓冲区 (Buffer),那么可以在一个缓冲区的命令行窗口使用yy命令复制一条命令,然后在另一个缓冲区的命令行窗口中粘贴并执行该命令,或者在命令行中使用:@"<CR>来执行复制的命令。也就是说,你可以很方便地在多个缓冲区中,重复执行命令(比如相同的:%s/old/new/g替换操作),而不必多次手工输入命令。

使用以下命令,可以设置命令行窗口的高度(默认值为7):

:set cmdwinheight=n

使用:q命令,可以关闭命令行窗口。

使用:help command-line-window命令,可以查看命令行窗口的更多帮助信息。

Ver: 2.0 | YYQ<上一篇 | 目录 下一篇>