星期五, 七月 31, 2020

VIM学习笔记 Zeavim离线文档查看器

Zeal是开源的跨平台软件,用于离线浏览各种开发文档。Zeal使用Dash提供的文档集(Docsets),涵盖近200种开发语言。

Zeavim插件,可以在Vim中调用Zeal来查看离线文档。

安装配置

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

建议vimrc配置文件中增加以下设置,以利用前缀键(leader)来调用Zeavim功能:

nmap <leader>z <Plug>Zeavim
vmap <leader>z <Plug>ZVVisSelection
nmap gz <Plug>ZVOperator
nmap <leader><leader>z <Plug>ZVKeyDocset

查询文档

使用<leader>z快捷键或:Zeavim命令,将根据当前文件类型在相应的Docset中,查找当前光标下的单词:

plugin_zeavim_leaderZ

使用gz命令,将根据当前文件类型在相应的Docset中,查找文本对象指定的关键词。例如在Vim脚本文件中,使用gziw命令,将在Vim Docset中查找当前光标下的单词:

Zeavim

使用<leader><leader>z快捷键或:Zeavim!命令,将根据用户输入,在指定的Docset中,查找指定的关键词:

Zeavim

使用以下命令,可以查看插件的帮助文件:

:help zeavim

使用命令行调用Zeal

如果不希望安装额外的插件,那么也可以用"zeal docset:keyword"的形式直接调用Zeal命令行。例如以下命令,将在Vim文档中查找关键字"endif":

:!zeal vim:endif

定义以下快捷键,将根据当前文件类型在相应的Docset中,查找当前光标下的单词:

:nnoremap <Leader>z :exec "!zeal " . expand(&ft) . ":" . "<cword>"<CR>

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

星期五, 七月 24, 2020

VIM学习笔记 重定向(redir)

重定向到文件

使用以下命令,在将信息输出到屏幕的同时,也会保存到指定的文件中:

:redir > {file}

如果指定的文件以及存在,那么需要使用!参数进行强制覆盖:

:redir! > {file}

如果希望信息被追加到文件末尾,那么可以使用以下命令:

:redir >> {file}

假设需要查询大量的信息输出(例如:version命令),或者保存调试信息,那么信息重定向就会非常有价值。

使用以下命令,可以停止信息的重定向:

:redir END

重定向到寄存器

我们可以将信息输出重定至寄存器之中,比如剪贴板寄存器(+)、命名寄存器(a-z,A-Z)和未命名寄存器(")。

使用以下命令,可以将信息输出重定向至剪贴板寄存器:

:redir @+

这样您就可以使用"+p命令, 将信息输出粘贴到当前文本。

使用以下命令,可以将命令历史记录粘贴到当前文件中:

:redir @+
:set nomore
:history
:put +
:set more
:redir END

其中,:set nomore命令用于暂定显示“--More--”信息,否则在分页显示命令历史记录时,需要点击按键以继续下一页的显示。

使用以下命令,可以查看更多帮助信息:

:help :redir

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

星期五, 七月 17, 2020

VIM学习笔记 信息(message)

Vim将默认记录近200次的信息显示。

查看信息

使用以下命令,可以查看上一个命令的输出信息:

g<

使用以下命令,在显示信息的同时,也会将其存储在信息历史(message-history)之中:

:echom "Hello World"

使用以下命令,可以查看所有信息:

:messages

而使用以下命令,则可以查看最近一条报错信息(error-messages):

:echo errmsg

E16: Invalid range

清除信息

7.4.1735版本开始,可以使用以下命令清除信息历史:

:messages clear

信息语言

使用以下命令,可以查看显示信息的语言:

:language message

通过以下变量,也可以查看显示信息的语言:

:echo LC_MESSAGES

在vimrc文件中使用以下命令,可以指定信息使用中文显示:

:language message zh_CN.UTF-8

建议使用英文显示信息,以便在互联网上进行查找相关资源:

:language message en_US.UTF-8

使用以下命令,可以查看更多帮助信息:

:help :messages

'shortmess'选项

'shortmess'选项,用于控制信息显示的种类和详细程度。其默认值为:

:set shormess=filnxtToOS

以下为主要标志位的含义(灰色行为默认值中的标志位):

标志位存在时的意义
f用 "(3 of 5)" 代替 "(file 3 of 5)"
i用 "[noeol]" 代替 "[Incomplete last line]"
l用 "999L, 888C" 代替 "999 lines, 888 characters"
m用 "[+]" 代替 "[Modified]"
n用 "[New]" 代替 "[New File]"
r用 "[RO]" 代替 "[readonly]"
w用 "[w]" 代替文件写入消息的 "written";
用 "[a]" 代替 ':w >> file' 命令的 "appended"
x用 "[dos]" 代替 "[dos format]";
用 "[unix]" 代替 "[unix format]";
还有用 "[mac]" 代替 "[mac format]"
a所有以上的缩写
t如果文件消息不能完整显示,则从开头截短该消息。最左列给出"<"。
T如果其它消息不能完整显示,则从中间截短该消息。中间给出"<"。
o后续文件的读入信息覆盖文件的写回消息 (:wn或打开autowrite时有用)
O文件的读入信息覆盖任何前面消息,包括快速修复消息 (比如,":cn")
s不显示 "search hit BOTTOM, continuing at TOP";
不显示 "search hit TOP, continuing at BOTTOM";
使用搜索计数时不在计数信息后显示 "W" (见下 S)
S搜索时不显示搜索计数,如 "[1/5]"

如果不希望使用信息缩写,那么可以使用以下命令:

:set shm=

如果希望使用缩写,但不截短信息,那么可以使用以下命令:

:set shm=a

如果希望使用缩写,并在必要时截短信息,那么可以使用以下命令:

:set shm=at

8.1.1270版本开始,在vimrc配置文件中增加以下设置,可以在屏幕底部,显示匹配搜索结果的总数,以及当前所处第几个匹配结果:

set shortmess-=S

使用以下命令,可以查看更多帮助信息:

:help 'shortmess'

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

星期四, 七月 09, 2020

VIM学习笔记 环绕字符编辑(surround)

surround 插件可以快速编辑围绕在内容两端的字符(pairs of things surrounding things),比如成对出现的括号、引号,甚至HTML/XML标签等。

安装配置

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

以下将利用实例来介绍surround插件的主要功能,请注意:

  • 在“原始文本”列中,高亮文字表示光标所在位置;
  • 在“命令”列中,为顺序执行的命令序列。
  • 在“更改效果”列中,为命令执行之后的结果。您可以实例文件并自行测试。

新增环绕字符

在常规模式、插入模式和可视化模式下,可以分别使用ysS命令来新增环绕字符:

模式目标
范围
新增
内容
原始文本命令更改效果
常规模式单词字符Hello Worldysiw*Hello *World*
单词标签Hello Worldysiwt<strong>Hello <strong>World</strong>
单词括号print var1, var2ys3w)print (var1, var2)
行尾括号print var1, var2ys$)print (var1, var2)
查找标签William Shakespeare said,
"Brevity is the soul of wit."
ysf"t<em>William Shakespeare said,
<em>"Brevity is the soul of wit."</em>
整行字符Hello Worldyss""Hello World"
整行标签Hello Worldysst<p><p>Hello World</p>
整行新行Hello WorldySS""
Hello World
"
插入模式引号<CTRL-g>s"""
标签<CTRL-g>S<html><html>

</html>
字符可视化模式选中的文本括号print var1, var2veeS)print (var1, var2)
行可视化模式选中的文本标签The passion to save humanity is a
cover for the desire to rule it.
VjS<p><p>The passion to save humanity is a
cover for the desire to rule it.</p>
块可视化模式选中的文本标签Item 1
Item 2
Item 3
<Ctrl-Q>$jjS<li><li>Item 1</li>
<li>Item 2</li>
<li>Item 3</li>

请注意:

  1. 插入模式下的操作:
    • 首先同时按下CTRL-g键;
    • 然后松开CTRL键;
    • 最后点击sS键,并输入环绕字符或标签。
  2. 可视化模式下的操作:
    • 首先使用快捷键进入不同类型的可视化模式。
      比如在Windows下,使用CTRL-Q键进入块视化模式;
    • 然后使用j等移动命令来选中文本;
    • 最后点击S键,并输入环绕字符或标签。

修改环绕字符

使用cs命令可以修改环绕字符:

目标范围替换内容原始文本命令更改效果
单词引号"Hello World"cs"''Hello World'
单词标签及新行'Hello World'cS'<p><p>
Hello World
</p>
单词标签<p>Hello World</p>cst<h1><h1>Hello World</h1>
单词引号Hello World!csw'Hello 'World'!
单词及标点引号Hello World!csW'Hello 'World!'
单词括号(1,2,3)cs)][1,2,3]
单词括号及空格(1,2,3)cs)[[ 1,2,3 ]

删除环绕字符

使用ds命令可以删除环绕字符:

目标范围新增内容原始文本命令更改效果
单词引号'Hello World'ds'Hello World
单词括号(123+4*56)/2ds(123+4*56/2
单词标签<div>Hello</div>dstHello

surround插件主要提供以下命令:

命令小结
ys添加环绕字符
yS添加环绕字符并拆分新行
yss为整行添加环绕字符
ySS为整行添加环绕字符并拆分新行
cs修改环绕字符
cS修改环绕字符并拆分新行
ds删除环绕字符

surround插件可以识别并处理以下目标实体:

  • ( )
  • { }
  • [ ]
  • < >
  • `
  • "
  • '
  • t(标签)
  • w(单词)

自定义快捷键

如果查看surround插件的源码,将会发现快捷键逐一定义在surround.vim文件中:

plugin_vim_searchindex

也就是说,我们可以直接在vimrc配置文件中,重置或取消插件预定义的快捷键:

" 不定义任何快捷键
let g:surround_no_mappings = 1
" 从plugin/surround.vim复制快捷键定义
” 并按需要进行修改
nmap ds <Plug>Dsurround
nmap cs <Plug>Csurround
nmap cS <Plug>CSurround
nmap ys <Plug>Ysurround
nmap yS <Plug>YSurround
nmap yss <Plug>Yssurround
nmap ySs <Plug>YSsurround
nmap ySS <Plug>YSsurround
" 取消不需要的快捷键
"xmap S   <Plug>VSurround
"xmap gS  <Plug>VgSurround
"imap   <C-S> <Plug>Isurround
imap    <C-G>s <Plug>Isurround
imap    <C-G>S <Plug>ISurround

假设需要输入以下包含多个环绕字符的文本:

{{ nginx_root }}

由于surround插件并不支持.重复命令,如果想要新增多个成对字符,那么需要安装额外的repeat.vim插件。而死板繁琐的替代方案是,自定义快捷键来重复执行命令:

nmap <C-J> ysiw}lysiw{

使用以下命令,可以查看插件的帮助文件:

:help surround

使用感受

一,舍本逐末。为了输入环绕字符的小需求,而发明碾压一切的大轮子。颇有些杀鸡用牛刀的意味。而且平白多出来的快捷键和命令,不但冗长而且别扭,操作起来总有种有苦难言的感觉。

二,盛名之下,其实难副。对于一个被不断被提及的知名插件,从功能和体验上都差强人意,着实让人失望。也许,这就是见面不如闻名吧。

以上,皆为一家之言,还请自行斟酌。

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