星期一, 八月 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<上一篇 | 目录 下一篇>

星期日, 七月 07, 2019

VIM学习笔记 替换模式(Replace Mode)

进入替换模式

使用大写R命令,将进入替换模式(屏幕底部显示“--REPLACE--”)。此时新输入的文本将直接替代/覆盖已经存在的内容,直至点击ESC键返回常规模式。

ReplaceMode_Edit.gif
Source: medium.com/vim-drops

使用小写r命令,将进入单字符替换模式,此时新输入的字符将替代光标之下的当前字符,然后自动返回到常规模式。

通过在r命令中增加数字前缀,可以一次性替换多个字符。例如,将光标定位到“||”字符处,然后执行2r&命令,可以将其替换为“&&”。

使用gR命令,将进入虚拟替换模式(virtual replace mode)(屏幕底部显示“--VREPLACE--”),其与替换模式最主要的区别在于,对<Tab>键和换行符的不同处理方式。

区别1:对于<Tab>键的处理方式

在替换模式(REPLACE)下,在原有<Tab>键处输入字母'a',将直接替代<Tab>键所占用的所有空格的位置,文本格式遭到破坏:

REPLACE_A
Source: medium.com/vim-drops

在虚拟替换模式(VREPLACE)下,在原有<Tab>键处输入字母'a',将仅仅替代单个空格,文本格式保持不变:

VREPLACE_A
Source: medium.com/vim-drops

从以上实例可以发现:替换模式(REPLACE)将<Tab>键作为一个整体来处理(不管其真实占用多少个空格位置);而虚拟替换模式(VREPLACE)则将<Tab>键拆分为多个独立的空格来分别处理。如果文本以<Tab>分隔排布,在编辑过程中希望保持原有的文本缩进和排版格式,那么建议使用虚拟替换模式。

区别2:对于<NL>换行的处理方式

在替换模式(REPLACE)下,输入<Enter>回车键将增加新行:

REPLACE_NL

在虚拟替换模式(VREPLACE)下,输入<Enter>回车键将用新行替代当前行内容(即清空当前行):

VREPLACE_NL

使用gr命令,可以进入单字符虚拟替换模式。在替换光标下的当前字符之后,将自动返回到常规模式。

请注意,只有包含+vreplace特性的Vim版本才支持虚拟替换模式。请使用:version命令,查看特性列表中是否已包括此项。

请使用以下命令,查看关于虚拟替换模式的更多帮助信息:

:help vreplace-mode

退出替换模式

按下ESC键即可离开替换模式,返回到常规模式。

命令小结
R进入替换模式
r进入单字符替换模式
gR进入虚拟替换模式
gr进入单字符虚拟替换模式

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

星期五, 七月 05, 2019

VIM学习笔记 插入模式 (Insert Mode)

进入插入模式

在常规模式下执行i命令,或者使用:startinsert命令,可以进入插入模式。

灵活使用以下命令,可以直接在你想要的位置进入插入模式:

i在光标之前,进入插入模式
I在本行开头,进入插入模式
a在光标之后,进入插入模式
A在本行结尾,进入插入模式
o在本行之后新增一行,并进入插入模式
O在本行之前新增一行,并进入插入模式
s删除当前字符,并进入插入模式
S删除当前行中的所有文本,并进入插入模式

通过在i,I,a,A命令中增加数字前缀,可以批量插入内容,以避免重复输入。例如:输入50i*命令,然后点击Esc键,将一次性插入50个星号;使用25a*-Esc命令,则将一次性插入25个星号和短线的组合。

通过在小写s命令中增加数字前缀,可以替换多个字符。例如:希望将“www.vim.org”更改为其它网址,可以首先将光标移动到字符“v”处,然后执行3s命令,删除3个字符并进入插入模式输入其它域名。

通过在大写S命令中增加数字前缀,可以替换多行内容。例如:执行3S命令,将删除2行文本,并将第3行文本清空,然后进入插入模式。

在插入模式中编辑

在插入模式下,不能使用h,j,k,l键来移动光标,而必须使用光标移动键。使用以下命令,可以查看使用特殊快捷键进行移动和操作的说明:

:help ins-special-special

在插入模式下,可以使用各种快捷键来操作文本,而不需要首先退回到常规模式,然后再执行命令。例如:使用ctrl-U键,可以删除光标之前的所有文字;而ctrl-W键,则可以删除光标之前的一个字符;使用ctrl-T键,可以增加缩进;而ctrl-D键,则可以减少缩进。请使用以下命令,查看插入模式下快捷键的更多帮助信息:

:help ins-special-keys

使用CTRL-O快捷键,可以进入命令模式执行Vim命令,然后重新回到插入模式,以避免多次切换模式的繁琐。例如,首先使用CTRL-O进入命令模式,然后执行dw命令来删除单词,在执行完毕之后将重新回到插入模式。

退出插入模式

按下ESC键即可离开插入模式,返回到常规模式。建议您在输入完毕文字之后,立即退回到常规模式,以利用各种命令来提高编辑效率。

插入模式帮助信息

使用以下命令,可以查看关于插入模式的帮助信息:

:help insert.txt

使用以下命令,可以查看关于快速插入文本的更多技巧。比如:补全、重复插入、从另一行拷贝、插入一个寄存器内容、缩写插入特殊字符等等:

:help usr_24.txt

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

星期一, 七月 01, 2019

VIM学习笔记 QuickFix

某些Vim命令,将会使用QuickFix列表在不同文件的不同位置间导航。例如:使用:make命令进行编译时,遍历编译错误;使用:vimgrep命令进行搜索时,遍历匹配结果;使用:helpgrep命令查找帮助信息时,遍历匹配的主题。

执行以下命令,将在当前文件夹中的所有HTML文件中,搜索字符串“options”:

:vimgrep options *.html

在屏幕底部,将显示查找到的第一个匹配结果:

quickfix_vimgrep_search

打开QuickFix窗口

输入:copen:cwindow命令,将在水平分隔窗口中,打开QuickFix列表以显示所有匹配结果:

quickfix_list

你可以使用ctrl+Wj快捷键,移动到QuickFix窗口。关于在多个窗口之间的跳转操作,请参阅窗口(Window)章节。

在QuickFix列表中导航

使用以下快捷键,可以在QuickFix列表中进行移动或搜索;当到达想要查看的列表项时,点击Enter键,将会打开匹配文件并精确定位到查找结果所处的位置。

k向上移动
j向下移动
Ctrl+b向上翻页pageUp
Ctrl+f向下翻页PageDown
/string向前(Forward)查找字符串string
?string向后(Backward)查找字符串string

注意,如果您在Windows和Mac下,无法利用Ctrl+f键进行翻页,那么请重新恢复Ctrl-F设置

你也可以使用以下命令,直接跳转到匹配文件的查找结果所处位置:

:cnext移动到下一个匹配处
:cprevious移动到上一个匹配处
:cfirst移动到第一个匹配处
:clast移动到最后一个匹配处

quickfix_list_enter

关闭QuickFix窗口

使用以下命令,可以关闭QuickFix窗口:

:cclose

使用:help quickfix命令,可以查看关于QuickFix的更多帮助信息。

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

星期三, 六月 26, 2019

VIM学习笔记 Ctrl-F设置

Ctrl-F默认设置

在Linux下的Vim中,Ctrl-F键默认设置为,向前(Forward)滚动屏幕;

而在Windows和Mac下的Vim中,Ctrl-F键默认设置为,打开查找对话框。

此设置是在2017年2月9日发布的8.0.0321版本中开始生效的。通过查看 "C:\Program Files (x86)\Vim\vim81\mswin.vim" 文件,可以发现 Ctrl-F 被设置为打开查找对话框。

恢复Ctrl-F设置

为了保持不同操作系统之间的操作一致性,建议在配置文件(vimrc)中增加以下代码,以重新将Ctrl-F键设置为向前滚动屏幕:

unmap <C-F>

注意,以上设置命令必须放置在以下载入代码之后,以确保设置不会被覆盖:

source $VIMRUNTIME/mswin.vim

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

星期日, 六月 23, 2019

VIM学习笔记 图形界面选项(guioptions)

GUI选项

使用以下命令,可以通过guioptions选项来设置GUI特征:

:set guioptions=options

其中 options 是一个字母集合,每个字母代表一个选项:

选项描述
aAutoselect如果设定了此选项,那么在可视化模式下选中文本,Vim会将所选文本放置到系统的全局寄存器中。这就意味着,可以将当前选中的文本用命令 "*p 粘贴到其他文件。如果没有设定此选项,那么就需要使用命令 "*y 将所选择的文本复制到系统寄存器中。在系统寄存中的文本,也可以被其他程序所使用。
P类似Autoselect,但使用"+寄存器,而不是"*寄存器。
fForeground在Linux系统上,gvim可以执行fork()命令,让编辑器在后台运行。通过设置此选项,可以禁用此行为。如果在一个脚本程序中,需要执行gvim命令使得用户可以编辑文件而且要等待到编辑工作结束,此选项就会显得更为有用。(注意:这个选项需要在初始文件中进行设置)
iIcon如果设置了这个选项,gvim就会在X Windows系统上运行而且最小化时会显示一个图标。如果没有设置这个选项,只会显示正在编辑的文件名称而不会显示图标。
mMenu显示菜单栏。
MNomenu如果设置了此选项,那么系统菜单的定义文件$VIMRUNTIME/menu.vim就不会被读入。(注意:此选项需要在初始文件中进行设置)
gGray将不可用的菜单显示为灰色。如果没有设置此选项,那么不可用的菜单就会从菜单栏或是工具栏中移除。
guioption
tTear off启用Tear off菜单(可以将菜单从界面中分离出来)
guioption
TTool bar显示工具栏。
rAlways Right scrollbar总是在编辑器右侧放置滚动条。
RDisplay Right scrollbar如果窗口垂直分隔,将在编辑器右侧放置滚动条。
lAlways Left scrollbar总是在编辑器左侧放置滚动条。
LDisplay Left scrollbar如果窗口垂直分隔,将在编辑器左侧放置滚动条。
bBottom scrollbar在编辑器底部放置滚动条。
vVertical dialog boxes对话框中的按钮采用垂直排列。
guioption

GUI选项实例

使用以下命令,可以隐藏菜单栏、工具栏和滚动条,以获得更大的屏幕空间用于文本编辑;同时,摆脱了对于菜单和工具栏的依赖,也可以死心塌地的使用命令了:

:set guioptions-=m
:set guioptions-=T
:set guioptions-=r
:set guioptions-=l
:set guioptions-=b

guioptions

如果想要重新显示隐藏的窗口部件,可以使用以下命令:

:set guioptions+=T

使用:help guioptions命令,可以查看关于GUI选项的更多帮助信息。

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

星期二, 六月 18, 2019

VIM学习笔记 启动图形界面(gui-start)

指定屏幕位置

在操作系统的终端中执行以下命令,可以在指定的屏幕位置打开图形界面的GVim:

$ gvim -geometry width+ x heightx_offset-y_offset

请注意, -geometry 标记用于指定屏幕位置和窗口大小。此标记仅适用于Linux操作系统。

  • width,窗口宽度;
  • height,窗口高度;
  • x_offset,以像素数指定屏幕的左边界和窗口的左边界的距离。如果此值为负数,那么则是指定编辑器的左边界和屏幕的右边界的距离;
  • y_offset,以像素数指定与屏幕上边缘的距离。如果此值为负数,则是指定了与屏幕下边缘的距离。

使用以下命令,将在屏幕的左上角启动gvim:

$ gvim -geometry +0+0

使用以下命令,将在屏幕的右下角启动gvim:

$ gvim -geometry -0-0

使用以下命令,可以打开一个80行x24列的编辑窗口:

$ gvim -geometry 80x24

使用以下命令,则可以在屏幕的左上角打开一个80行x24列的编辑窗:

$ gvim -geometry 80x24+0+0

如果我们需要针对同样尺寸的窗口进行截图,那么此功能就非常有价值了。

移动窗口位置

在GVim中使用以下命令,可以得到当前窗口(相对于左上角)的屏幕位置:

:winpos

winpos

使用:winpos X Y命令,则可以将当前窗口移动到指定的屏幕位置:

:winpos 20 30

指定窗口尺寸

使用以下命令,可以显示当前窗口的行数:

:set lines?

使用以下命令,则可以设置窗口的行数为n:

:set lines=n

如果需要指定窗口的列数为n,则可以使用以下命令:

:set columns=n

当行过宽时,vim会自动进行回折以适应屏幕的宽度。如果设置了nowrap选项,则Vim不会自动折行,这时超出屏幕的部分将不会被显示出来。在默认的情况下,Vim也不会显示水平滚动条。我们可以使用:set guioptions+=b命令来显示水平滚动条。关于折行显示的更多信息,请参阅折行(Wrap)章节。

配置文件(vimrc)中增加以下命令,将行和列都设置为足够大的值,可以在启动GVim时自动最大化窗口:

set lines=500 columns=500

标题栏

使用以下命令,可以将当前窗口的标题设置为正在编辑的文件名:

:set title

默认情况下,窗口标题将显示当前编辑的文件名,随后是一个状态标识码,以及文件路径:

set title

其中,状态标识码有以下几种:

  • -,文件不可更改;
  • +,文件已经更改;
  • =,只读文件;
  • =+,只读文件,已经被更改。

有时文件全名会很长,我们可以使用以下命令,来指定文件名占用标题栏空间的百分比:

:set titlelen=85

使用以下命令,可以直接改变标题为指定字符串:

:set titlestring=Hello World!

使用:help titlestring命令,可以查看关于titlestring选项的更多帮助信息。

命令小结
:winpos [x] [y]显示/指定窗口位置
:set lines?显示当前窗口的行数
:set lines=n设置行数
:set columns=n设置列数
:set guioptions+=b显示水平滚动条
:set title在窗口标题中显示文件名
:set titlelen=85设置文件名占用标题栏的百分比
:set titlestring=str设置窗口标题

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

星期一, 六月 17, 2019

VIM学习笔记 搜索结果计数器(searchindex)

vim-searchindex插件,可以在屏幕底部的命令行中,显示匹配搜索结果的总数,以及当前所处第几个匹配结果。

plugin_vim_searchindex

安装配置

推荐您使用vim-plugVundle等插件管理器,来安装GitHub上的vim-searchindex插件。

使用:help searchindex命令,可以查看vim-searchindex插件的帮助文件。

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

星期四, 六月 13, 2019

VIM学习笔记 对话框(Dialog)

查找对话框

使用以下命令,将会打开一个查找对话框:

:promptfind [string]

如果在命令中指定了[string]值,那么就会查找该字符串;如果没有指定[string]值,那么将会查找上次搜索的字符串。

promptfind

替换对话框

使用以下命令,将会打开一个替换对话框:

:promptrepl [string]

如果在命令中指定了[string]值,那么就会查找并替换该字符串;如果没有指定[string]值,那么将会查找并替换上次搜索的字符串。

promptrepl

文件对话框

使用:browse命令,可以打开一个文件对话框,然后对选中的文件执行操作。例如以下命令,将在打开的文件对话框中选择文件,然后执行:edit命令:

:browse edit

:browse命令的一般形式如下:

:browse {command} [directory]

  • {command},需要执行的编辑器命令。例如,:read,:write,:edit等;
  • [directory],指定文件浏览器开始的目录。如果没有指定此参数,那么将会使用browsedir选项所指定的目录。

browsedir选项可以使用以下三个值:

  • last,上次浏览的目录(默认值);
  • buffer,与当前缓冲区相同的目录;
  • current,当前目录。

如果希望从当前目录开始选择文件,那么可以使用以下设置命令:

:set browsedir=current

可以使用以下命令,在指定目录中选择并打开文件:

:browse e E:\learn-vim\

选项对话框

使用:browse set:options命令,将会打开一个窗口并显示Vim选项:

在目录行上(index line),点击<CR>回车键,将跳转到相应类别的具体选项:

在包含set命令的行上(set line),点击<CR>回车键,可以执行该设置命令。如果该选项是布尔值,那么点击回车键将立刻打开/关闭此选项;如果该选项是数值或者字符串,那么可以先修改此值,然后再点击回车键来变更选项。

在包含帮助信息关键字的行上(help line),点击<CR>回车键,可以显示该选项的帮助信息。

使用:help :browse-set命令,可以查看更多选项对话框的帮助信息。关于更多选项设置的信息,请参阅设置选项(set-option)章节。

命令小结
:promptfind打开查找对话框
:promptrepl打开替换对话框
:browse打开文件对话框
:browse set打开选项对话框
:options

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

星期一, 六月 10, 2019

VIM学习笔记 比较文件-消除差异(diffget & diffput)

在操作系统的命令行中使用以下命令,可以利用Vim比较多个文件:

$ vimdiff file1 file2

如下图所示,红色高亮区域显示了两个文件中第三行的差异,左侧文件包含文字“ACTUAL”,而右侧文件则包含文字“BUDGET”:

vimdiff

在比较文件并发现不同之处以后,可以通过命令消除这些差异点。

获取差异

使用]c命令,可以移动到差异处。

使用:diffgetdo命令,将从另一文件中获得差异文字并复制到当前文件中,以消除差异。

例如,在左侧文件中执行:diffget命令,会将右侧文件中的文字“BUDGET”,复制到左侧文件,并替代掉差异文字“ACTUAL”:

diffget

如果希望一次性获取整个文件的差异,那么可以使用以下命令:

:%diffget

推送差异

使用:diffputdp命令,将以当前文件为基准,消除另一文件中的差异。

例如,在左侧文件中执行:diffput命令,会将左侧文件中的文字“ACTUAL”推送到右侧文件,并替代掉差异文字“BUDGET”:

diffget

如果希望一次性推送整个文件的差异,那么可以使用以下命令:

:%diffput

使用:diffget和:diffput命令消除差异之后,vim会自动刷新差异的高亮显示;如果您采用手动修改文字来消除差异,那么需要执行:diffupdate命令来刷新差异的高亮显示。

消除多个文件间的差异

我们可以同时比较多个文件之间的差异。例如以下命令,将比较三个文件:

$ vimdiff file1 file2 file3

如下图所示,红色高亮区域显示了三个文件中第三行的差异:

vimdiff

因为此时打开了多个缓冲区 (Buffer),所以需要执行:diffget [bufspec]和:diffput [bufspec]命令以指明缓冲区。例如:diffput 3命令,将推送差异到第三缓冲区:

vimdiff

其中,[bufspec]参数可以是缓冲区编号,缓冲区名称,或者缓冲区名称的一部分。可以使用:buffers命令,来查看包含缓冲区编号和名称的列表。

帮助信息

使用:help copy-diffs命令,可以查看合并/消除差异的更多帮助信息。

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

星期二, 六月 04, 2019

VIM学习笔记 设置选项(set-option)

Vim是一个高度可定制的编辑器,我们可以使用 :set 命令来设置大量的选项,其大致可分为三种:布尔值选项、数值选项和字符串选项。

查看选项

使用以下命令,可以列示所有选项:

:set all

如果希望查看某个选项的当前值,那么可以使用 :set option? 命令,其返回值将显示在屏幕底部。例如:

:set list?

设置选项

使用以下命令,可以设置布尔值选项:

命令形式描述示例
:set option打开选项:set list
:set nooption关闭选项:set nolist
:set option!反转选项:set list!
:set invoption反转选项:set invlist
:set option&将选项设置为默认值:set list&

如果顺序执行这些命令,那么选项变化如下图所示:

setoption_bl

使用以下命令,可以设置数值选项:

命令形式描述示例
:set option = value设置选项的值:set shiftwidth=4
:set option += value在选项中加入一个值:set shiftwidth+=2
:set option -= value在选项中减去一个值:set shiftwidth-=3
:set option ^= value将选项乘以一个值:set shiftwidth^=2
:set option&将选项设为默认值:set shiftwidth&

如果顺序执行这些命令,那么选项变化如下图所示:

setoption_num

使用以下命令,可以设置字符串选项:

命令形式描述示例
:set option = value设置选项的值:set cinwords=test
:set option += value在选项末尾增加字符串:set cinwords+=end
:set option -= value从选项中移去字符串:set cinwords-=test
:set option ^= value在选项开头增加字符串:set cinwords^=start
:set option&将选项设为默认值:set cinwords&

如果顺序执行这些命令,那么选项变化如下图所示:

setoption_str

我们可以在一行:set命令中,设置多个选项。例如以下命令,将设置三个不同的选项:

:set list shiftwidth=4 incsearch

使用以下命令,可以将所有的选项都重置为默认值:

:set all&

使用以下命令,将列示出所有与其默认值不同的选项:

:set

set

使用:help set-option命令,可以查看设置选项的更多帮助信息。

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