星期三, 十月 30, 2019

VIM学习笔记 工具箱-Windows命令行环境(Toolkit-CLI-Win)

通过命令行环境(Command-Line Interface, CLI),可以更快速地执行操作,并且能够自动化一系列繁琐的任务。比如在多个文件中,批量替换指定的字符串等。下文将介绍在Windows下,搭建运行Linux命令的虚拟终端,并将Vim配置至此Shell环境。

本文并不会详细介绍每个工具的安装步骤和使用细节,而是聚焦于各个工具与Vim相互配合。文中推荐的工具,完全基于个人主观的偏好,您可以在AlternativeTo网站中寻找功能类似的软件。

Cygwin

Cygwin,是 Windows下的Linux命令行环境。它包括一个提供GNU功能性基本子集的DLL以及在这之上的一组工具。

在安装过程中,您可以选择需要的软件包,比如grep、sed、curl等等。你也可以搜索“vim”关键字,找到vim以及相关的工具。

Tools_Cygwin_SelectPackages_vim

请选择安装“zsh”。之后您可以随时再次运行Cygwin安装程序,以安装和更新软件包。

ConEmu

ConEmu,是一个美观易用的虚拟终端,可以在多个标签中,同时打开Windows命令提示符(Command Prompt),powershell,Cygwin和Git bash等等。

Tools_ConEmu_CLI

在“Settings...”窗口中,选择“Startup > Tasks”,然后在“Predefined Tasks”列表中新建打开Zsh的任务

Tools_ConEmu_Cygwin_Zsh

请在以上屏幕截图的黄色高亮区域内,输入以下命令:

set CHERE_INVOKING=1 & set "PATH=D:\cygwin64\bin;%PATH%" & %ConEmuBaseDirShort%\conemu-cyg-64.exe -new_console:p D:\cygwin64\bin\zsh.exe --login -i -new_console:C:"D:\cygwin64\Cygwin.ico"

请注意,本文假设Cygwin安装在“D:\cygwin64”目录;请根据您的实际安装位置,相应调整命令。

使用“Create new console”按钮,可以打开{Zsh::CygWin zsh}:

Tools_ConEmu_NewConsole

在终端中使用uname -a命令,可以查看当前Cygwin的版本:

uname

使用cygcheck --check-setup命令,可以列示当前已安装的软件包:

使用echo $SHELL命令,可以查看当前使用的shell:

Tools_Cygwin_echo_shell

通过/cygdrive路径,可以访问本地磁盘:

Tools_Cygwin_cygdrive

Oh My Zsh

Oh My Zsh,是由Robby Russell开发的zsh管理框架,使用其预配置的选项,可以大大提高使用zsh的便捷性。

使用以下命令,安装Oh My Zsh:

git clone git://github.com/robbyrussell/oh-my-zsh.git C:\Users\username\.oh-my-zsh

使用以下命令,生成默认的配置文件:

cp ~/.oh-my-zsh/templates/zshrc.zsh-template ~/.zshrc

配置Vim使用Cygwin Shell

Vim在Windows下,默认使用命令提示符 "Command Prompt":

:set shell=$COMSPEC

shell=C:\WINDOWS\system32\cmd.exe

vimrc配置文件中增加以下命令,将配置Vim使用Cygwin的Shell环境:

" 在当前目录打开bashlet $CHERE_INVOKING=1" 使用Cygwin bashset shell=D:\cygwin64\bin\bash.exe" 缺少--login参数将无法挂载/usr/bin/等目录set shellcmdflag=--login\ -c" 缺省值为(, 需要为bash设置成"set shellxquote=\"" 在路径中使用/以替代\set shellslash" 在PATH变量中增加cygwin目录let $PATH .= ';D:\cygwin64\bin'

在Vim中使用:terminal命令,即可打开Cygwin bash终端窗口:

Tools_Cygwin_vim_terminal

你也可以使用:!:shell命令,来执行bash命令

配置Vim打开Windows命令行

vimrc配置文件中增加以下命令,将配置leader快捷键以打开Windows命令提示符:

nnoremap <leader>cc :!start cmd /k cd %:p:h:8<cr>

One more thing...

我为ConEmu制作了一个暗黑系的DarkSide主题。关于安装和使用说明,请参考自述文件

Tools_ConEmu_DarkSide

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

星期四, 十月 24, 2019

VIM学习笔记 打印到PDF (Print to PDF)

在Linux下打印PDF

在Linux和Mac下,Vim会产生一个PostScript文件。该文件能够直接发送到PostScript打印机上,或者通过类似ghostscript的程序进行处理。

为了使用PostScript功能,请使用:version命令,确认Vim已经包含“+postscript”特性:

version-postscript.png

首先使用以下命令,将文件打印至postscript文件:

:hardcopy > test.ps

此打印方式所生成的postscript文件,无法正常显示包括中文在内的UTF-8编码格式。推荐使用paps,来生成包含中文的文件:

:!paps < % > test.ps

然后调用ps2pdf命令,将postscript文件转换为PDF文件:

:!ps2pdf test.ps test.pdf

通过在vimrc配置文件中增加以下自定义命令,可以组合paps和ps2pdf命令,来直接生成PDF文件:

command Paps !paps % | ps2pdf - %:r.pdf

之后在Vim中执行以下命令,即可生成以当前文件名命名的PDF文件:

:Paps

我们也可以利用CUPS PDF打印机,来生成PDF文件。首先使用包管理命令(以Fedora为例),安装cups-pdf

$ dnf install cups-pdf

使用以下网址,可以查看打印机是否安装成功,并将其设置为默认打印机:

http://localhost:631/printers/

Cups-PDF-Set Default

vimrc配置文件中,增加以下键盘映射

nmap PpP :%w !lpr -o lpi=8 -o cpi=14<CR><CR>

此后使用PpP快捷键,即可生成PDF文件(默认保存在桌面)。你可以通过修改 /etc/cups/cups-pdf.conf 配置文件,来指定文件输出位置。

在Mac下打印PDF

MacVim中,使用:set printexpr?命令,可以发现Mac使用预览程序来生成PDF文件,同样也无法正常显示中文:

system('open -a Preview '.v:fname_in) + v:shell_error

通过在vimrc配置文件中增加以下自定义命令,可以使用cupsfilter命令,来直接生成PDF文件:

command Print2PDF !cupsfilter % > %:r.pdf 2> /dev/null

在Windows下打印PDF

在Windows下的GVim中,使用:hardcopy命令将打开打印对话框;在其中选择PDF虚拟打印机(例如Foxit PDF Printer, PDFCreator等),即可生成PDF文件:

hardcopy_printer_win_pdf

请使用:help printing命令,查看关于打印的帮助信息。

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

星期一, 十月 21, 2019

VIM学习笔记 命令相关选项 (Options-CMD)

路径分隔符选项

在Windows下,文件路径中使用反斜杠(Backslash):

C:\Temp

在Linux和Mac下,文件路径中使用正斜杠(Forward slash):

/etc/hosts

'shellslash'选项,仅适用于Windows操作系统,并且默认是关闭的。为了保证与Unix风格的兼容性,建议在vimrc配置文件中,使用以下命令启用此选项:

:set shellslash

使用'shellslash'选项,可以在扩展文件名时使用正斜杠。即使你在输入文件名时使用反斜杠,Vim也会自动将其转换为正斜杠。

报错响铃选项

当Vim捕获一个错误时,将会显示错误信息。如果希望同时发出报错响铃 (鸣叫或屏幕闪烁),那么可以启用'errorbells'选项:

:set errorbells

使用以下命令,则可以关闭'errorbells'选项:

:set noerrorbells

'visualbell'选项,用于设置响铃的行为:鸣叫、屏幕闪烁或什么都不做。默认情况下,'visualbell'选项是关闭的。通过以下命令启用visualbell选项,将使用可视响铃代替鸣叫。当输入错误时,屏幕就会闪动然后回到正常状态:

:set visualbell

通过以下命令,则可以关闭visualbell选项(而使用鸣叫):

:set novisualbell

如果既不想要鸣叫也不想要屏幕闪烁,那么可以使用以下设置:

:set vb t_vb=

信息显示选项

启用'showmode'选项,将在屏幕底部显示当前所处的模式:

:set showmode

启用'showcmd'选项,将会在输入命令时,在屏幕底部显示出部分命令:

:set showcmd

例如希望输入fx命令来查找字符“x”时,当我们输入f时就会在底部显示“f”,这在输入复杂命令时将很有帮助。

可视化模式下,将显示选择区域的大小:

  • 在行内选择若干字符时,显示字符数;
  • 选择多于一行时,显示行数;
  • 选择可视化列块时,显示行乘以列数(比如“2x10”)。

set_showmode_showcmd

默认情况下,如果屏幕底部显示的消息长度超出一行时,将会显示类似于“按回车继续”的提示信息。通过设置'cmdheight'选项来增加消息的行数,可以显示更多的信息以避免不必要的提示。例如使用以下命令,设置命令行高度为3行:

:set cmdheight=3

默认情况下,'more'选项是启用的。当命令的输出超出一屏时(例如:version命令的输出),就会显示“-- More --”提示信息,并等待用户响应以继续显示屏更多信息:

set_more

使用以下命令关闭more选项,将会持续翻滚屏幕以显示信息,而不会暂停并显示提示信息:

:set nomore

当删除或修改多行文本时,如果被影响的行数超出了'report'选项所指定的行数(默认值为2行),那么Vim将会在屏幕底部显示所改变的行数。如果希望始终显示反馈信息,那么可以将report选项设置为0:

:set report=0

此时即使只是删除了一行文本,Vim也将显示反馈信息:

1 line less

相反地,如果不希望显示变更信息,那么可以将report选项设置为较大的值。

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

星期三, 十月 16, 2019

VIM学习笔记 wildmenu

使用'wildmenu'选项,将启用增强模式的命令行补全。在命令行中输入命令时,按下'wildchar'键(默认为Tab)将自动补全命令和参数:此时将在命令行的上方显示可能的匹配项;继续按下'wildchar'键,可以遍历所有的匹配项;也可以使用方向键或者CTRL-P/CTRL-N键,在匹配列表中进行移动;最后点击回车键,选择需要的匹配项。

wildmenu

使用以下命令,可以启用wildmenu:

:set wildmenu

例如在命令行中输入“:spe”,然后点击Tab键,将列出以spe开头的命令列表;再次点击Tab键,将可以在wildmenu中遍历匹配的命令:

/wildmenu_spell.png

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

:help wildmenu

wildmode

在命令行中输入命令时,文件名也是可以自动补全的。例如希望编辑当前目录下的某个文件,在输入:e命令和空格之后,点击Tab键,将自动补全文件名。而补全的方式,则是通过以下'wildmode'选项来控制:

使用""选项,将仅仅使用第一个匹配结果;即使再次按下wildchar键,也不会继续查找其它匹配项:

:set wildmode=

使用"full"选项,将在wildmenu中显示匹配的文件;点击wildchar键,可以遍历匹配的文件:

:set wildmode=full

wildmode_full

使用"longest"选项,将用最长的公共子串补全:

:set wildmode=longest

wildmode_longest

使用"longest:full"选项,将用最长的公共子串补全,并显示在wildmenu中:

:set wildmode=longest:full

wildmode_longest_full

使用"list"选项,将显示可能匹配的文件列表:

:set wildmode=list

wildmode_list

使用"list:full"选项,将显示可能匹配的文件列表,并使用第一个匹配项进行补全:

:set wildmode=list:full

wildmode_list_full

使用"list:longest"选项,将显示可能匹配的文件列表,并使用最长的子串进行补全:

:set wildmode=list:longest

wildmode_list_longest

推荐使用"list:longest,full"选项,点击Tab键,将显示可能匹配的文件列表,并使用最长的子串进行补全;再次点击Tab键,可以在wildmenu中遍历匹配的文件列表:

set wildmode=list:longest,full

wildmode_list_longest_full

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

:help wildmode

wildignore

通过'wildignore'选项,可以在匹配列表中忽略指定类型的文件:

:set wildignore=*.dll,*.exe,*.jpg,*.gif,*.png

在'suffixes'选项中,会列出一系列文件名的前缀。当有多个文件符合匹配条件时,包含指定前缀的文件则会获得较低的优先级。也即是说,这些文件将会显示在匹配列表的最后。以下为suffixes选项的默认值:

:set suffixes=.bak,~,.o,.h,.info,.swp,.obj

wildchar

通过'wildchar'选项,可以设置命令行自动补全的触发键。默认为Tab键。例如以下命令,将其设置为F12键:

:set wildchar=<F12>

wildmenu应用

在命令行中输入:color以及空格,然后点击Tab键,将列出所有可用的配色方案(Color Scheme),继续点击Tab键可以选用需要的配色方案。

:color

wildmenu_colorscheme

使用以下命令,可以查看所有外部(例如PATH)和内部(例如MYVIMRC)变量:

:echo $

wildmenu_echo_var

命令小结
:set wildmenu启用wildmenu
:set wildmode设置wildmode
:set wildignore设置忽略文件类型
:set suffixes设置低优先级文件
:set wildchar设置命令行自动补全触发键

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

星期二, 十月 01, 2019

VIM学习笔记 会话(Session)

会话信息,将保存所有编辑窗口和全局设置。通过恢复会话,可以快速切换回之前工作环境。可以认为,会话是viminfo的扩展补充,viminfo文件中保存了会话所需要使用的具体设置信息。

如下图所示,我在编辑本文档的同时,打开了帮助文件和命令终端。首先,将当前编辑状态保存到会话文件;稍后,只需要恢复会话,就可以继续使用之前的窗口布局进行编辑了,而省去了手动打开多个窗口的繁琐。

Session

保存会话

使用以下命令,将保存会话信息至当前目录下,以“Session.vim”命名的文件:

:mksession

如果已经存在同名的会话文件,那么需要在命令中使用“!”参数,进行强制覆盖:

:mks!

也可以在命令中,指定会话信息文件的位置:

:mksession ~/mysession.vim

恢复会话

启动Vim时,通过指定“-S”参数,可以恢复之前保存的编辑会话:

$ vim -S Session.vim

在Vim中使用以下命令,也可以恢复会话信息:

:source Session.vim

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

:help session

会话选项

会话选项sessionoptions,用于指定保存会话的内容,默认值如下:

:set sessionoptions=blank,buffers,curdir,folds, help,options,tabpages,winsize,terminal

sessionoptions选项是一组使用逗号分隔的字符串,包含以下参数:

  • blank
    恢复编辑无名缓冲区的窗口

  • buffers
    恢复所有缓冲区(包括隐藏和未载入的缓冲区);

  • curdir
    恢复当前目录;

  • folds
    恢复折叠

  • globals
    恢复以大写字母开始并至少包含一个小写字母的全局变量;

  • help
    恢复帮助窗口;

  • localoptions
    恢复(限定于缓冲区内)本地选项;

  • options
    恢复全局映射和选项;

  • resize
    恢复以行列指定的窗口大小;

  • sesdir
    设置当前目录为会话文件所在的位置;

  • salsh
    在文件名中使用salsh(/),来代替backslah(\);

  • tabpages
    恢复所有标签页

  • terminal
    恢复终端窗口;

  • unix
    使用Unix模式的行尾标志(<NL>);

  • winpos
    恢复 GUI Vim 的窗口位置;

  • winsize
    恢复窗口尺寸(相对于屏幕大小);

使用以下命令,可以查看关于会话选项的帮助信息:

:help 'sessionoptions'

命令小结
:mksession保存会话
:source Session.vim恢复会话
:set sessionoptions设置会话选项

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