星期六, 九月 28, 2019

VIM学习笔记 命令历史记录 (History)

Vim会将命令历史记录,保存在viminfo文件中;通过viminfo和history选项,可以控制存储历史记录的类型和数量;在命令行模式搜索文本时,则可以重新调用这些历史记录。

命令历史类型

命令历史可以分为以下几种类型({name}):

类型标识内容
c[md]:命令行历史
s[earch]/ or ?查找字符串历史
e[xpr]=表达式寄存器("=)历史
i[nput]@由input()函数输入的历史
d[ebug]>调试命令历史
a[ll]所有类型的历史记录

查看命令历史

使用以下命令,可以显示命令行历史记录:

:history

history

使用以下命令,可以显示所有类型的历史记录:

:history all

history all

使用以下格式的:history命令,可以查看指定类型和指定数目的历史记录:

:his[tory] [{name}] [{first}][, [{last}]]

  • {name},指定历史记录类型
  • {first},指定命令历史的起始位置(默认为第一条记录);
  • {last},指定命令历史的终止位置(默认为最后一条记录)。

如果没有指定 {first} 和 {last},那么将会列出所有命令历史。

如果指定了 {first} 和 {last},那么就会列出指定范围内的历史记录条目。例如以下命令,将列出第一到第五条命令行历史:

:history c 1,5

正数,表示历史记录的绝对索引,也就是:history命令列出的第一列数字。即使历史记录中的其它条目被删除了,该索引数字也会保持不变。例如以下命令,将列出指定位置(第五条)命令行历史:

:history c 5

负数,表示历史记录的相对索引。以最新一条记录 (索引号为 -1) 为基准向后算起。如以下命令,将列出所有历史记录中倒数第二条记录:

:history all -2

使用以下命令,则会列出所有历史记录中最近的两条记录:

:history all -2,

使用以下命令,可以查看:history命令的帮助信息:

:help :history

删除历史记录

使用以下命令,可以删除命令行历史记录:

:call histdel("")

可以删除指定类型的历史记录。例如使用以下命令,将删除所有查询历史记录:

:call histdel("seach")

您也可以直接编辑viminfo文件,直接删除其中的历史记录。请注意,需要重启Vim,以重新读取修改后的viminfo文件。

命令历史选项

通过history选项,可以控制记录历史记录的数量(默认为50)。例如以下命令,设置保存1000条命令历史记录:

:set history=1000

请注意:在viminfo选项中,也有命令历史相关参数;请在vimrc配置文件中,检查'viminfo'和'history'设置的的一致性和优先级。

命令小结
:history显示命令行历史记录
:history all显示所有类型的历史记录
:set history设置报错历史记录的数量

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

星期一, 九月 23, 2019

VIM学习笔记 viminfo

Vm使用viminfo选项,来定义如何保存会话(session)信息,也就是保存Vim的操作记录和状态信息,以用于重启Vim后能恢复之前的操作状态。

viminfo文件

viminfo文件默认存储在以下位置:

  • Linux和Mac:$HOME/.viminfo,例如:~/.viminfo
  • Windows:$HOME\_viminfo,例如:C:\Users\yiqyuan\_viminfo

viminfo文件主要保存以下内容:

  • Command Line History(命令行历史纪录)
  • Search String History(搜索历史纪录)
  • Expression History(表达式历史纪录)
  • Input Line History(输入历史记录)
  • Debug Line History(调试历史纪录)
  • Registers(寄存器)
  • File marks(标记)
  • Jumplist(跳转)
  • History of marks within files(文件内标记)

Vim在退出时,会将上述信息存放到viminfo文件中;在启动时,将会自动读取viminfo信息文件。

使用以下命令,可以手动创建一个viminfo文件:

:wviminfo file_name

使用以下命令,可以重新读去viminfo文件:

:rviminfo

使用以下命令,可以查看关于viminfo文件的帮助信息:

:help viminfo

viminfo选项

viminfo选项可以指定保存哪些内容,以及在何处的viminfo文件中保存这些信息。viminfo选项是一组使用逗号分隔的字符串;其中每个参数,是以单个字符开头的数值或字符串值。

Windows下的默认值为:

set viminfo='100,<50,s10,h,rA:,rB:

Linux和Mac下的默认值为:

set viminfo='100,<50,s10,h

viminfo选项列表
选项描述帮助信息
!如果包含,表示保存和恢复以大写字母开头并且不包含小写字母的全局变量。例如,保存 “KEEPTHIS” 和 “K_L_M”,但不保存 “KeepThis” 和”_K_L_M”。:help viminfo-!
"设置每个寄存器最多保存的行数。是“<”选项的旧称。需要在“"”之前加上转义反斜杠,否则将会被识别为注释的开始。:help viminfo-"
%如果包含,表示保存和恢复文件缓冲区列表;如果后跟数值,该数值指定保存缓冲区的最大数目;如果不包含数值,则保存所有缓冲区。如果Vim启动时指定文件名参数,则缓冲区列表不予恢复。如果Vim启动时没有指定文件名参数,则缓冲区列表从viminfo文件里恢复。没有文件名的缓冲区和帮助文件的缓冲区不会写入viminfo文件。不保存quickfix、unlisted、unnamed和在可移动介质上的缓冲区。:help viminfo-%
'保存指定数目文件中的标记。如果viminfo选项非空,则必须包含此参数。包含本项目意味着jumplist和changelist也保存在viminfo文件里。:help viminfo-'
/保存搜索历史的最大数目。如果此值非零,那么将保存搜索和替代模式。如果不包含,则使用history选项的值。:help viminfo-/
:保存命令行历史的最大数目。如果不包含,则使用history选项的值。:help viminfo-:
<每个寄存器保存的最大行数。如果为零,表示不保存寄存器。如果不包含,则表示保存所有的行。“"”是本项目的旧称。:help viminfo-<
@保存输入行历史的最大数目。如果不包含,则使用history选项的值。:help viminfo-@
c如果包含,则使用viminfo-encoding选项指定的编码格式写入viminfo文件。:help viminfo-c
f是否保存文件位置标记。如果为零,不保存文件位置标记 (0~9,A~Z)。如果不包含或者非零值,则保存位置标记。:help viminfo-f
h载入viminfo文件时,关闭高亮效果。如果不包含,则取决于在最近搜索命令之后是否使用过:nohlsearch命令。:help viminfo-h
n指定viminfo文件的名称。该名称必须紧随在字母“n”之后,并且必须为最后一个选项。如果启动Vim时指定了-i参数,那么此文件名将覆盖viminfo选项指定的文件名。文件名中的环境变量,将在文件打开时被扩展。:help viminfo-n
r不保存指定可移动介质或路径内的文件的相关信息。可以设置多个路径参数。例如在Windows上,你可以用“rA:,rB:”指定软驱或U盘。也可以在Linux上,使用“r/tmp”来屏蔽临时文件。此选项将忽略大小写。每个参数的最大长度为50个字符。:help viminfo-r
s如果为零,将不保存寄存器。缺省值“s10”,将忽略超过10 Kbyte文本的寄存器。:help viminfo-s

在单独指定viminfo文件的位置时,为了不覆盖viminfo选项的当前值,通常会在设置命令中使用“+=”操作符:

:set viminfo+=n$LOCALAPPDATA/_viminfo

:set viminfo+=nC:\\_viminfo

您可以参考以下命令,在vimrc配置文件中,定义viminfo选项:

set viminfo=\"50,'1000,h,f1,rA:,r$TEMP:,r$TMP:,r$TMPDIR:,:500,!,n$VIM/_viminfo

请注意:

  • 请不要将“<”设置过大,因为此选项将影响保存至viminfo文件中的信息量。在Vim启动时,如果读取尺寸过大的viminfo文件,将影响Vim启动速度;
  • 请在vimrc文件开头,首先定义:set nocompatible选项。

使用以下命令,可以查看viminfo选项的更多信息:

:help 'viminfo'

命令小结
:wviminfo写入viminfo文件
:rviminfo读取viminfo文件
:set viminfo设置viminfo选项

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

星期一, 九月 16, 2019

VIM学习笔记 工具箱-版本控制(Toolkit-Git)

众所周知,几乎所有Vim插件管理器都是使用GitHub来安装和更新插件;你也可以直接从GitHub下载Vim安装程序;而我的这个VIM学习笔记也是托管在GitHub上的,以实现在多台电脑上同步文档并进行版本管理。

本文并不会详细介绍GitHub的安装与使用,而是聚焦于如何使用GitHub与Vim相互配合。GitHub有着非常完善的(中文)文档;而视觉化的git简明指南更便于快速入门;还有表格化的速查表可以随时查阅各种命令的参考信息。

Git客户端

除了GitHub官方出品的客户端git-scm.com列出了各种操作系统下的更多客户端软件供您选择。

我强烈建议您尽量使用Git命令,而不是依赖于某个客户端软件。事实上,只需要记忆非常有限的几个常用命令,就可以毫无障碍地在各种命令行环境中进行Git操作了。关于详细操作说明,推荐阅读Learn the Basics of Git in Under 10 Minutes

Tools_Git_CLI

文档写作

learn_vim_GitHub

我的这个VIM学习笔记,都是通过手工编写HTML代码来完成的。也就是说,我需要在多台电脑上的不同操作系统之下测试命令执行,然后持续修改网页源文件。正是GitHub帮助我完美实现了文档的一致性和版本控制。同时,利用GitHub Pages功能,还可以自动发布为网页以供浏览器直接阅读。

Tools_Github_Pages

在此过程中,也充分体现了如下图所示的Git工作流程:

  1. 在电脑A上,编辑文档并使用以下命令将变更提交到服务器:
    • $ git add
    • $ git commit
    • $ git push
  2. 在电脑B上,使用以下命令从服务器上获取最新版本的文件:
    • $ git pull

Git_Workflow
Source: medium.com/free-code-camp

同理,也可以使用GitHub,在多台电脑间同步你的dotfiles配置文件。例如通过同步.vimrc配置文件,可以在多台电脑上快速部署相同的Vim配置,以获得相同的使用体验。

插件管理

不管您是通过vim-plug,还是Vundle来安装和管理插件,首先都需要使用$ git clone命令来安装插件管理器本身。而之后在安装其它插件时,也需要在vimrc配置文件中指定GitHub Repository的名称。

如果您仍然习惯于手工安装插件,那么也可以直接从GitHub克隆或者下载插件。

Vim官方网站VimAwesome中查找插件时,你也会发现相对应的GitHub链接。

代码片段管理

GistGitHub服务的一部分,用户可以将常用的代码片段存储云端,然后在不同的客户端中进行复用;也可以将代码片段内置到网页内,或者通过网址与他人分享。

使用Gist.vim插件,可以直接在Vim中管理Gist代码片段。你也可以使用Lepton等客户端软件,来管理Gist代码片段。

Browse Gist

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

星期五, 九月 06, 2019

VIM学习笔记 Ex脚本 (Ex Script)

如果希望一次性执行多条Ex命令,那么可以将这些命令保存为脚本文件,然后即可重复调用。

例如我的这个VIM学习笔记,都是在Vim里手工编写HTML代码的。相同的代码也会同步粘贴到我的blog里。而在搬运代码之前,我需要删除其中的Tab制表符和换行符。也就是说,我需要重复执行几个删除和替换命令。

ExScript_Purpose

创建脚本文件

我将以下命令,存储名为ExScript_Sample.vim的脚本文件。其中,所有以双引号(")开头的文本,都将被视为注释。注释可以单独为一行,也可以被放置在行的末尾。

ExScript_Sample

在Vim中执行脚本文件

在Vim中编辑文件时,可以使用以下命令来调用Ex脚本:

:source ExScript_Sample.vim

Vim将在屏幕底部显示命令执行的结果(比如修改或替换的行数等);点击Enter回车键,将返回常规模式:

ExScript_Message

如果您对执行结果不满意,那么也可以使用u命令,撤销 (Undo)以上操作。

在启动vim时,可以将文件名做为参数(Arguments),以打开多个文件。例如使用以下操作系统命令,将打开当前目录下的所有网页文件:

$ vim *.html

我们可以先在当前文件下,使用:source命令执行脚本;然后使用:next命令,切换到下一个文件,依次针对各个文件分别执行脚本。

而使用以下命令,则可以一次性对所有参数列表中的文件执行脚本:

:argdo source ExScript_Sample.vim

在命令行中执行脚本文件

在操作系统的命令行中,使用vim的-c选项,可以在加载文件之后自动执行Ex脚本文件:

$ vim -c "source ExScript_Sample.vim" test.html

利用竖直线“|”分割符,可以组合执行Ex脚本文件和Ex命令:

$ vim -c "source ExScript_Sample.vim | w" test.html

利用竖直线“|”分割符和argdo命令,可以针对多个文件分别执行脚本文件,然后保存并退出:

$ vim -c "argdo source ExScript_Sample.vim | w" -c "qa" A.html B.html C.html

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

星期一, 九月 02, 2019

执行Ex命令(Ex Command-Run)

可以使用以下几种方式来执行Ex命令:

  • 在常规模式下,输入冒号“:”以及命令,点击回车键即可执行Ex命令;
  • 进入Ex模式,执行Ex命令;
  • 调用Ex脚本,以执行其中的Ex命令;
  • 使用竖直线“|”分割符,组合执行多条Ex命令;
  • 执行寄存器中存储的Ex命令。

组合执行多条Ex命令

竖直线“|”作为分割符,可以将多个命令组合在一起执行。使用“|”时,如果前一个命令影响到文件中行的顺序,那么下一个命令将使用新的行位置进行工作。

使用以下命令,将首先删除第1行至第3行,然后在当前行(即调用ex命令之前的第4行)进行替换:

:1,3d | s/thier/their/

使用以下命令,将首先把1至5行移动到第10行之后,然后显示所有包含模式pattern的行:

:1,5m10 | g/pattern/nu

利用寄存器执行Ex命令

例如在Ex脚本文件(Ex Script)中包含以下命令:

%s/\n//

我们移动到此行,然后使用以下命令将该行内容删除到命名寄存器(Regists)“g”之中:

"gdd

使用以下命令,则可以执行已存储在“g”寄存器之中的命令:

:@g

ExCommand_Run_by_Register

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