《Vim实用技巧》笔记

时间:2014-09-03 02:40:27   收藏:0   阅读:382

Vim实用技巧

Table of Contents

1 Vim决问题的方式

2 普通模式

3 插入模式

4 可视模式

5 命令行模式

5.1 操作文本的Ex命令

命令用途
:[range]delete [register]删除指定范围的行到register中
:[range]yank [register]赋值指定范围的行到register中
:[line]put [register]在指定行后粘贴register的内容
:[range]copy {address}将指定范围的行拷贝到{address}所指定的行之下
:[range]move {address}将指定范围的行移动到{address}所指定的行之下
:[range]join连接指定范围的行
:[range]normal {commands}对指定范围的每一行执行普通命令
:[range]substitute/{pattern}/{string}/{flag}正则替换
:[range]global/{pattern}/{cmd}对给定范围内匹配的行,在上面执行Ex命令
:[range]vglobal/{pattern}/{cmd}global的取反
:[range]global!/{pattern}/{cmd}global的取反
:grep /vimgrep搜索关键字

5.2 range服务说明

符号地址
N文件的第N行
$文件的最后一行
0虚拟行,位于文件第一行的上方
.光标所在行
‘m包含位置标记m的行
‘<高亮选区的起始行
‘>高亮选区的结束行
%整个文件(:1,$的简写形式)


5.3 补全

5.4 命令行窗口–使用vim的编辑能力编辑Ex命令

命令动作
q/打开查找命令历史的命令行窗口
q:打开Ex命令历史的命令行窗口
C-f从命令行模式切换到命令行窗口
:help cmdwin查看命令行帮助

5.5 执行外部命令

命令用途
:shell启动shell
:!{cmd}在shell中执行cmd
:read !{cmd}在shell中执行cmd,并把标准输出插入到光标下方
[range]write !{cmd}在shell中执行{cmd},以[range]作为其标准输入
[range]!{fiter}使用外部命令{filter}过滤指定的[range]

6 管理多个文件

6.1 缓冲区列表管理

命令用途
:ls列出缓冲区列表
:bnext上一个缓冲区
:bprev下一个缓冲区
:bfirst列表开头的buffer
:blast列表结尾的buffer
:buffer N第N号buffer
:buffer {bufname}匹配bufname的buffer
:bdelete N1 N2…删除buffer
:N,M bdelete删除buffer
:bufdo在:ls列出的所有缓冲区执行Ex命令


6.2 参数列表

参数列表记录了在启动时作为参数传递給Vim的文件列表. 通过设置参数列表,可以通过:nexthe :prev来打开下一个/上一个文件

  1. *符号用于匹配0到多个字符,但范围仅限于指定的目录

  2. ** 也匹配0到多个字符,范围递归进入目录的子目录

:args `shell命令` 以shell命令的输出作为参数列表的值:argdo命令在列表中的每个缓冲区上执行同一条命令在使用:argdo/:bufdo前,最好启用‘hidden‘设置.启用hidden选项后,如果活动的缓冲区的内容发生了变化,Vim会在离开该缓冲区时自动将其隐藏. 否则Vim会阻止离开该缓冲区. 这样我们就无法用:argdo或:bufdo命令来修改一组缓冲区.

6.3 窗口操作

操作用途
C-w s水平分割当前窗口
C-w v垂直分割当前窗口
:split {file}水平分割当前窗口,并在新窗口载入file
:vsplit {file}垂直分割当前窗口,并在新窗口载入file
C-w w在窗口间循环切换
C-w c或:close关闭活动窗口
C-w o或:only只保留活动窗口,关闭其他所有窗口
C-w =使所有窗口等宽,等高
C-w _最大化活动窗口的高度
[N]C-w _将活动窗口的高度设为N行
C-w 竖线类似C-w _,但设置窗口的宽

6.4 标签页操作

Vim的标签页是可以容纳一系列窗口的容器,它类似于Linux中的虚拟桌面的概念

命令用途
:tabedit {filename}在新标签页打开{filename}
C-w T把当前窗口移到一个新标签页
:tabclose关闭当前标签页
:tabonly只保留当前标签页,关闭其他标签页
:tabnext{n}或{N}gt切换到编号为{N}的标签页
:tabnext或gt切换到下一个标签页
:tabprevious或gT切换到上一个标签页
:tabmove [N]将当前标签页移动到第N个位置,默认为最后一个位置

7 打开及保存文件

7.1 打开文件

7.2 使用find查找文件

:find命令运行我们通过文件名打开一个文件,而无需输入该文件的完整路径.

在使用该功能前先需要配置path选项

  1. :set path+=app/**

  2. :find recvfrommb<tab>

7.3 使用netrw管理文件系统

8 寄存器

9 

10 模式匹配

10.1 调整大小写敏感

10.2 调整正则表达式的匹配模式

10.3 特殊匹配符

10.4 统计当前模式的匹配个数

使用:%s///gn就可以统计当前模式的匹配个数

标志位n会抑制正常的替换动作. 该命令不会对每次匹配进行替换,而是简单地统计匹配的次数

11 查找功能

12 替换功能

12.1 标志位总结

标志位功能
g修改一行内的所有匹配
c让我们有机会可以确认或拒绝每一处修改
n不真正作替换,而只报告本次substitute命令匹配的个数
e屏蔽错误提示
&指示Vim重用上一次substitute命令所用过的标志位

12.2 替换域中的特殊字符

具体可用过:h sub-replace-special来查询完整的列表

符号描述
\r插入一个换行符
\t插入一个制表符
\\插入一个反斜杠
\{数字}插入第N个子匹配
\0插入匹配模式的所有内容
&插入匹配模式的所有内容
~使用上一次调用substitute时的替换域
\={Vim Script}插入{Vim Script}表达式的结果

12.3 使用寄存器内容

在命令模式下也能通过C-r{register}的方式来将寄存器内容插入命令行.

因此在输入查询域时可以用C-r\来代替

12.4 重复上一次substitute命令

13 Quckfix列表与位置列表

对于每一条用于填充quickfix列表的命令都有一条对应的命令,把结果保存到位置列表.

:make,:grep以及:vimgrep会实用quickfix列表,而:lmake,:lgrep,:lvimgrep实用位置列表.

这两者的区别在于在任一特定的时刻,只能有一个quickfix列表,而位置列表却可以有多个.

命令用途
:cnext跳转到下一项
:cprev跳转到上一项
:cfirst跳转到第一项
:clast跳转到最后一项
:cnfile跳转到下一个文件的第一项
:cpfile跳转到上一个文件的最后一项
:cc N跳转到第N项
:copen打开quickfix窗口
:cclose关闭quickfix窗口
:colderquickfix的前一个版本
:cnewquickfix的后一个版本

位置窗口的操作,只需要把quickfix的命令起始字符改为l即可

14 与外部程序的交互

15 Vim中的补全功能

16 拼写检查

16.1 Vim拼写检查器的基本命令

命令用途
:set spell开启检查
[s 或 ]s在拼写错误间响应地进行反向及正向的跳转
z=来获取Vim提供的更正建议列表,也可以使用N z=来跳过提示,直接采纳第N个更正建议
zg把当前单词添加到拼写文件
zw将当前单词从拼写文件中删除
zug撤销对当前单词的zg或zw命令

16.2 使用其他拼写字典

Vim默认以英文字典作为拼写字典,通过配置spelllang选项可以让我们更改 本地缓冲区 的缺省设置.

如果我们试着加载某个尚未支持的拼写文件,Vim会自动为我们提供下载和安装的方法

通过配置spellfile选项,我们可以指定一个文件路径,用于保存由zg和zw命令所添加,删除的单词

spellfile可以设置多个文件,在zg前加上数字标号能指定添加到那个文件中

16.3 在插入模式下更正拼写错误

在插入模式下按C-x s 或C-x C-s会触发一个特殊的自动补全(参见compl-spelling).

Vim会从光标位置开始进行反向扫描,直到发现一处拼写错误为止;然后提供更正建议.


原文:http://darksun.blog.51cto.com/3874064/1548082

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!