02.8 Finding Help
:help index
显示所有vim的命令
:help CRTL-A
:help i_CRTL-A
分别找normal / insert mode 中Crtl-A的帮助
:help <UP>
:help i_<UP>
分别找 向上箭头 在 normal / insert mode中的帮助
:help :command
:help command
找 Ex-command / normal 模式下的command命令的帮助
:help func() 查找的是一个函数func的帮助
:help 'number' 查找一个option的帮助
03. Moveing Around
同一行中移动到某字符
在一行中移动到某一个字符可以使用f或者t。
相应的大写字符表示反方向查找。
而";" "," 分号和逗号可以用来重复刚才查找的动作。
滚屏
Ctrl-U, Ctrl-D 向上向下滚屏
zz, zt, zb 分别把当前行放在屏幕正中,最上,最下
跳跃
一般来讲,当光标移动超出了本行,就称之为跳跃。
:jumps 可以列出跳跃的点。
vim中可以添加命名标记, :ma
然后可以用 'a 跳转到这个标记的地方
:marks 显示哪些地方做了标记
05 Set your settings
05.3 simple mapping
简单来说,就是把一组字符串映射到某个动作
:map \p i{<Esc>ea}<Esc>
用这个命令查看现有的map
:map
05.4 adding a plugin
plugin其实就是vim的脚本。只要將vim的脚本文件放到plugin的目录就算是添加了脚本。
有两种plugin
global plugin: 全局的
filetype plugin: 只使用某种文件类型
standard-plugin-list 可以显示现有的plugin列表。
添加plugin的步骤对这两种plugin是一样的
1. 找到格式的plugin脚本文件
2. 放到适当的位置
这差别就是在这个位置上, 全局的位置在~/.vim/plugin, 而filetype的是在~/.vim/ftplugin。
当然还要记得 :filetype plugin on
05.5 help 文档
help文档放在了 ~/.vim/doc下面
:helptags ~/.vim/doc 来生成帮助文档的tag
05.6 option window
:options 可以列出所有的option, 并按照主题分类
恢复默认设置, 在option名字后加上一个&
:set iskeyword&
06. 语法高亮
打开
:syntax enable
配色方案在$VIMRUNTIME/colors/目录下,自己也可以在~/.vim/color/目录下创建配色方案。
在$VIMRUNTIME/syntax/colortest.vim文件中有颜色的样式可以选择
07. 多文件编辑
有两个预订一的mark很有意思
`" 上一次离开文件时候的位置
`. 最后一次编辑时候的位置
07.5 多文件间的拷贝
使用“寄存器”
"fyas 保存一句话到f寄存器
"fp 把寄存器f中的内容复制到本地
10. 大改动
记录并重复命令
qa ... 开始记录之后的命令到a寄存器
q 结束记录
@a 在当前位置重复记录在a的命令
@@ 执行刚才运行记录的命令
编辑寄存器的命令
"ap 把寄存器a中的值输出
修改
"ay$ 把编辑后的命令保存到寄存器a
命令的范围
:1,5s/this/that/g 替代的范围是在1到5行
:.s/this/that/g 点表示只作用在当前行
:.,$s/this/that/g $表示文件的最后一行,表示作用范围是当前行到文件末尾
:%s/this/that/g %表示整个文件
:?^Chapter?,/^Chapter/s=grey=gary=g 范围是往前Chapter到往后Chapter
全局命令
:g+//+s/foobar/barfoo/g
匹配//所在的行,执行s替代命令。 將foorbar替代为barfoo.
10.9 使用外部程序
!5Gsort 先將光标移到文件开头,这个命令就可以把头5行排序
:.,.+4!sort This is the same as above
:read !ls 把当前目录文件明写到文件里
:write !wc 可以计算文件的字数,行数
So using external program could have two types.
The first one is a "filter", which like a pipe, will pass the content in the file to the program,
and then write back the output to file.
While the second type, the file content is not involved.
20.5 command line window
在normal 模式下, q: 可以打开一个窗口,显示了命令的历史。
可以在某一行命令中编辑,回车后就可以执行编辑后的命令。
21. session
这样可以记住你的工作环境,下次打开直接就恢复到上次的工作情况。
:mksession style.vim
:source style.vim
22. Finding the file
22.1 file browser
以前看到过这个东西,不过没想到还有些高级功能没有用到过。
打开
:edit .
打开后会显示当前目录下的文件信息, 下面列几个我觉得有意思的命令
i 调整显示的方式
s 调整排序方式
r 反转排序顺序
22.2 current directory
:pwd 显示当前目录
:cd change directory
22.3 find a file
在文件中写了 #include "header.h". 然后想要找到这个文件在哪里。
可以將光标停在这个文件名上,然后 gf 可以跳转到这个文件。
其实vim是在当前目录下找的,如果此文件不在当前目录下,就要设置path选项。
22.3 buffer
每打开一个文件就有一个相应的buffer。
:buffers 显示buffer
:ls 尽然也是同样的作用
这个里面会显示已经有的buffer,以及一些属性。
而且每个buffer有一个编号。
:b 2
就可以打开第二个buffer.
:bdelete 2
就从buffer list中删除第二个。
26 Repeating
26.3
多个文件同时修改
把这些文件都打开
:args *.c
同时操作
:argdo %s/abc/def/ge | update
也可以用 :windo :bufdo
26.4 using vim from a shell script
对每个.txt文件,做change.vim文件中的操作。
change.vim文件中是vim的命令脚本。
for file in *.txt; do
vim -e -s $file < change.vim
done
27 Searching commands and patterns
不匹配大小写
:set ignorecase
临时决定要不要匹配大小写
/\cword 不匹配大小写
/\CWord 匹配大小写
27.3 offset
光标停在搜索到字符串下面某行
/string/2 找到string, 然后光标停在之后的两行
找到单词,再往后走
/string/e+2 找到string, 然后走到 g 再往后两个字符
27.4 matching multiple times
* 匹配 0 或 多次
/a* 匹配a, 0 或 多次
/
ab
* 匹配ab, 0或多次
+ 匹配 1 或 多次
/ab\+ 匹配 ab, abb, abbb
= 匹配 0 或 1 次
/folders\= 匹配 folder 或者 folders
{} 设定匹配次数
/ab\{3,5} 匹配 abbb, abbbb, abbbbb
/ab\{3} 只匹配 abbb
27.5 Character ranges
item matches equivalent ~
\d digit [0-9]
\D non-digit [^0-9]
\x hex digit [0-9a-fA-F]
\X non-hex digit [^0-9a-fA-F]
\s white space [ ] (<Tab> and <Space>)
\S non-white characters [^ ] (not <Tab> and <Space>)
\l lowercase alpha [a-z]
\L non-lowercase alpha [^a-z]
\u uppercase alpha [A-Z]
\U non-uppercase alpha [^A-Z]
更多的range, 可以查help
40.2 自定义命令
定义一个命令删除一行. 注意,自定义的命令要以大写字母开头
:command DeleteFirst 1delete
查看都有哪些自定义的命令
:command
如果觉得命令定义不准确可以重新定义
:command! DeleteFirst ggd
这样就重新定义了DeleteFirst这个命令
如果想要删除某个自定义的命令
:delcommand DelteFirst
或者你突然不想要所有的自定义命令了
:comclear
40.3 Autocommand
就是在某些事件下,自动执行的机制
显示所有的自动命令
:autocmd
显示某个事件的自动命令
:autocmd BufNewFile
显示某个类型文件的自动命令
:autocmd * *.c
41 Vim脚本
第一个脚本
let i = 1
while i < 5
echo "count is" i
let i += 1
endwhile
41.2 变量
显示定义的变量
:let
定义变量
:let i = 1
定义局部变量, 不过这个范围也是本脚本的
:let s:count = 1
删除变量
:unlet s:count
神奇的事情是,一个脚本中的局部变量在这个脚本执行完之后不会自动释放。
下次再执行这个脚本的时候,还是可以读到。
41.6 使用函数
在这个section中,已经按照分类列出了常用的函数。
要更详细的解释可以
:help functions
41.7 自定义函数
函数名必须以大写字母开头。
41.11 编写插件