Vim编程

15 Years of Vi + 7 years of Vim and still learning

by David Rayner

http://www.rayninfo.co.uk/vimtips.html

本文所有内容摘自公司同事的ppt。

1、什么是vim
• Vim是从 vi 发展出来的一个文本编辑器。和Emacs并列成为类Unix系统用户最喜欢的编辑器。
• Vim的第一个版本由Bram Moolenaar在1991年发布。最初的简称是Vi IMitation ,随着功能的不断增加,正式名称改成了Vi IMproved。

2、版本与配置文件

• Linux
vim
ftp://ftp.vim.org/pub/vim/unix/vim-7.2.tar.bz2
/etc/.vimrc (全局) ~/.vimrc (用户)
• Windows
gvim
ftp://ftp.vim.org/pub/vim/pc/gvim72.exe
%installpath%\_vimrc

3、如何获得vim帮助
• man vim
• Vimcdoc (中文版vim帮助)
http://nchc.dl.sourceforge.net/project/vimcdoc/vimcdoc/1.7.0/vimcdoc-1.7.0.tar.gz
Online:
http://vimcdoc.sourceforge.net/doc/help.html (cool)

4、vimcdoc 安装使用
• wget http://nchc.dl.sourceforge.net/project/vimcdoc/vimcdoc/1.7.0/vimcdoc-1.7.0.tar.gz
• tar -zxvf vimcdoc-1.7.0.tar.gz
• cd vimcdoc-1.7.0/
• sudo ./vimcdoc.sh -i
使用: :help 进入
CTRL-] 或双击鼠标进入,CTRL-T、CTRL-O、g<RightMouse>、或 <C-RightMouse> 可以用来跳回到你原来的地方。

5、启动vim
• Vim [option | filename ..]
用法: vim [参数] [文件 ..] 编辑指定的文件
或: vim [参数] - 从标准输入(stdin)读取文本
或: vim [参数] -t tag 编辑 tag 定义处的文件
或: vim [参数] -q [errorfile] 编辑第一个出错处的文件

6、vim编码配置
• 三个参数相关
– encoding
• 设置 Vim 内部使用的字符编码。它应用于缓冲区、寄存器、表达式所用的字符 串、viminfo 保存的等等各种文本。
– fileencoding
• 设置此缓冲区所在文件的字符编码。
• 如果 fileencoding 不同于 encoding,读写文件时需要进行转换。
• 如果 fileencoding 为空,使用 encoding 相同的值
– fileencodings
• 这是一个字符编码的列表,开始编辑已存在的文件时,参考此选项。如果文件被读入,Vim 尝试使用本列表第一个字符编码。如果检测到错误,使用列表的下一 个。如果找到一个能用的编码,设置 fileencoding 为该值。如果全都失败, fileencoding 设为空字符串,这意味着使用 encoding 的值。
• 编辑.vimrc
• set encoding=utf-8
• set termencoding=utf-8
• set fileencodings=gb2312,utf-8
• GTK+ 2 上强烈建议设置 'encoding' 为 "utf-8"。

7、vim配置-语法加亮
• 编辑.vimrc
– syntax enable
– syntax on
• 无法加亮原因
– 你的终端不支持彩色。
– 你的终端其实支持颜色,可是 Vim 不知道。
确保你的 $TERM 设置正确。
TERM=xterm-color; export TERM
– 文件类型无法识别
:set filetype=fortran

8、Vim配置-缩进、备份
• 编辑.vimrc
set autoindent
• 编辑.vimrc
set backup
set nobackup

9、vim配置-对齐
• tabstop
– 文件里的 <Tab> 代表的空格数。
• shiftwidth
– (自动) 缩进每一步使用的空白数目。
• expandtab
– 插入模式里: 插入 <Tab> 时使用合适数量的空格。如果 'autoindent' 打开, '>' 和 '<' 命令使用空格进行缩进。'expandtab' 打开时,要插入实际的制 表,可用 CTRL-V<Tab>
• smarttab
– 如果打开,行首的 <Tab> 根据 'shiftwidth' 插入空白。'tabstop' 或 'softtabstop' 用在别的地方。<BS> 删除行首 'shiftwidth' 那么多的空白。 如果关闭,<Tab> 总是根据 'tabstop' 或 'softtabstop' 决定插入空白的数目。'shiftwidth' 只用于文本左移或右移。 插入空白的具体方式 (制表还是空格) 取决于 'expandtab' 选项。

10、vim对齐配置
编辑.vimrc
set tabstop=4
set shiftwidth=4
set expandtab “ 写python时很有用
set smarttab

11、vim配置-配色
• 深色调
:set background=dark
• 浅色调
:set background=light
• 推荐配色
• darkblue
:colorscheme darkblue
• desert
:colorscheme desert

12、Vim配置-鼠标支持
• 打开鼠标支持
:set mouse=a
• 关闭鼠标支持
:set mouse=
编辑.vimrc
set mouse=a

13、vim 使用基础
• 多模式编辑器
– 普通模式 无
– 插入模式 进入方式 i
– 可视模式 进入方式 v
– 命令模式 进入方式 :
– 选择模式 进入方式 :set selectmode=mouse gh, gH, gCTRL-H
– Ex 模式 进入方式$vim –e
– 如何切换
– 按两下 <Esc> 返回普通模式。
– Ex 模式使用:vi 返回普通模式

14、vim 基础-visual模式
• 对可视区域可以使用的操作符包括:
– ~ 切换大小写
– d 删除
– c 修改 (4)
– y 抽出
– > 右移 (4)
– < 左移 (4)
– ! 通过外部命令过滤 (1)
– = 通过 'equalprg' 选项的命令过滤 (1)
– gq 按照 'textwidth' 指定的宽度排版行 (1)

15、vim 基础-visual模式
• 其它可以使用的命令:
– r 修改
– s 修改
– C 修改
– S 修改
– R 修改
– x 删除
– D 删除
– X 删除
– Y 抽出
– p 放置
– J 连接
– U 变成大写
– u 变成小写
– ^] 查找标签
– I 列块插入
– A 列块添加

16、vim使用基础-光标移动
(up)

k
(left) h l (right)
j

(down)

17、Vim使用基础-分割窗口
• 水平分割
:split
+--------------------------------------------------------------+
|/* file one.c */ |
|~ |
|~ |
|one.c=============================|
|/* file one.c */ |
|~ |
|one.c=============================|
| |
+--------------------------------------------------------------+


• 垂直分割
:vsplit
+-------------------------------------------------------------------+
|/* file two.c */ |/* file one.c */ |
|~ |~ |
|~ |~ |
|~ |~ |
|two.c ===============================|
| |
+-------------------------------------------------------------------+

18、窗口跳转
• 窗口跳转
– CTRL-W h 跳转到左边的窗口
– CTRL-W j 跳转到下面的窗口
– CTRL-W k 跳转到上面的窗口
– CTRL-W l 跳转到右边的窗口
– CTRL-W t 跳转到最顶上的窗口
– CTRL-W b 跳转到最底下的窗口
– CTRL-W w 窗口间跳转
• 关闭窗口
– :close

19、Vim使用基础-编辑
光标之前插入 i
光标之后插入 a
在行首插入 I
在行尾插入 A
在下方插入一个空行 o
在上方插入一个空行 O

20、vim基础-删除
删除光标处字符 x
从光标处开始删除一个单词 dw
从光标删除到行尾 d$
从当前行删除到屏幕底部 dL
删除光标前一个字符 dh
从光标删除到行尾 D
删除当前行 dd
从当前行删除到文件结束 dG
从当前行删除到文件开始 d1G
删除第5行 5Gdd

21、vim基础-滚动
向后滚动一屏 CTRL-f
向前滚动一屏 CTRL-b
向上滚动半屏 CTRL-u
向下滚动半屏 CTRL-d

22、Vim基础-复制、粘贴
复制当前行 yy or Y
复制1个单词 yw
复制4个单词 y4w or 4yw
在光标后粘贴 p
在光标前粘贴 P
上下两行交换 ddp

23、Vim基础-查找
• 在普通模式下
– / 向下找
– ?向上找
• 快速查找单词
– 将光标定位到单词
– # 向上找单词
– * 向下找单词

• :set ignorecase smartcase
• /findstr/b(+-n)
• /findstr/e(+-n)
• /one\|two\|three 多选择一

24、vim基础-搜索与替换
>> Global search and replace --> :1,$ s/old/new/g
^ ^ ^ ^ ^
In english, this means: | | | | |
| | | | |
From 1 to $ (end of file) | | | |
| | | |
substitute -----------------/ | | |
| | |
occurrences of "old" ----------/ | |
| |
with occurrences of "new" --------/ |
|
globally (i.e., all istances of "old")

25、Vim基础-Undo、Redo
撤销最后一次修改 u
撤销给定行的所有改变 U
重复上次编辑命令 “.”
>> Ctrl-R
用 "u" 和 CTRL-R 命令你可以切换到任何你编辑过的状态。

26、vim使用基础-编辑中执行命令
• :!command
• :!ls
...
Scared Of The Moon-迈克尔 杰克逊(Michael Jackson).mp3
Take Me Away-艾薇儿 拉维妮(Avril Lavigne).mp3
Thing I'll Never Say-艾薇儿 拉维妮(Avril Lavigne).mp3
Tomorrow You Didn't-艾薇儿 拉维妮(Avril Lavigne).mp3
Tomorrow-艾薇儿 拉维妮(Avril Lavigne).mp3
When You're Gone-艾薇儿 拉维妮(Avril Lavigne).mp3
When Your're Gone-艾薇儿 拉维妮(Avril Lavigne).mp3
Why-艾薇儿 拉维妮(Avril Lavigne).mp3
Will You Be There-迈克尔 杰克逊(Michael Jackson).mp3
请按 ENTER 或其它命令继续

27、Vim使用基础-退出
保存退出文件--> :wq
:x
保存文件 --> :w
保存到新文件 --> :w filename
覆盖保存文件 --> :w! filename
退出 --> :q
退出而不保存改动 --> :q!
退出所有文件而不保存改动 -->:qa!
28、vim基础-从崩溃中恢复
• vim -r help.txt
• vim -r .help.txt.swo 指定交换文件

29、vim高级技巧-重复组合操作
• 普通模式下
– q{0-9a-zA-Z"} 开始记录
– q 记录完成
– @{0-9a-zA-Z"} 重复执行
– 10@{0-9a-zA-Z"} 重复执行10次

30、vim技巧-代码折叠
• 什么是折叠
+-----------------------------------+
| 行 1 |
| 行 2 |
| 行 3 |
|_______________________ |
\ \
\________________________\
/ 被折叠的行 /
/________________________/
| 行 12 |
| 行 13 |
| 行 14 |
+-----------------------------------+

'foldmethod' 'fdm' 字符串 (缺省: "manual")
局部于窗口
{Vi 无此功能}
{仅当编译时加入 |+folding| 特性才有效}
当前窗口使用的折叠方式。可能的值是:
|fold-manual| manual 手动建立折叠。
|fold-indent| indent 相同缩进距离的行构成折叠。
|fold-expr| expr 'foldexpr' 给出每行的折叠级别。
|fold-marker| marker 标志用于指定折叠。
|fold-syntax| syntax 语法高亮项目指定折叠。
|fold-diff| diff 没有改变的文本构成折叠。

• :set fdm=indent
• :set fdm=syntax
• :set foldcolumn=4
• :set fdm=manual
– zf F-old creation (创建折叠)
– zo O-pen a fold (打开折叠)
– zc C-lose a fold (关闭折叠)

31、Vim技巧-mark(标记)
• ma 把当前位置存成标签a
`a 移到跳转到标记 a处
:marks 取得所有的标记的列表
到有一些特殊的标记,包括:
‘ 跳转前的光标位置
" 最后编辑的光标位置
[ 最后修改的开始位置
] 最后修改的结束位置

32、vim技巧-列块操作
• ctrl-v 进入
– 列块插入
• I{string}<ESC>
– 列块添加
• A{string}<ESC>
– 列块修改
• c xxxxx<ESC>

33、vim技巧-多标签页(tab)
• :tabnew
在当前标签页之后打开带空窗口的新标签页
• :tabc[lose][!]
关闭当前标签页
• :tabn[ext]
转到下一个标签页。最后一个标签页则回绕到第一个。
• :tabp[revious]
转到前一个标签页。首个标签页则回绕到最后一个。
• 配合 set mouse=a 使用

34、vim技巧-自动补全
• Ctrl-n
向后搜索
• Ctrl-p
向前搜索

35、Vim技巧-tags
• “tag”是一种能够转跳的标记
• “tags”由ctags 生成
• 转跳
– :tag 命令移动光标到tag上
– Ctrl-] 跳到标签
– Ctrl-t 跳回去

• 最明显的应用就是浏览程序的调用图。考虑下面的调用图:
• main ---> FuncA ---> FuncC
• ---> FuncB
• (解释: main 调用 FuncA 和 FuncB;
• FuncA 调用FuncC)。
• 从 main 到 FuncA,你可以在调用 FuncA 的行上用 CTRL-]。然后再用 CTRL-] 跳到FuncC。如果你现在想跳回到 main,你只需要按 CTRL-T 两次。然后你可以用 CTRL-] 到FuncB。

36、vim技巧-键映射(Key mapping)
• 键映射用于改变输入键的含义。最常见的用途是把功能键定义为一系列的命令。
– :map {lhs} {rhs} ,把键系列 {lhs} 映射为 {rhs}
– {rhs} 也被进行映射扫描

关于每个映射命令对应的工作模式的概况:
命令: 模式:
普通 可视+选择 操作符等待
:map :noremap :unmap :mapclear 是 是 是
:nmap :nnoremap :nunmap :nmapclear 是 - -
:vmap :vnoremap :vunmap :vmapclear - 是 -
:omap :onoremap :ounmap :omapclear - - 是

• 定义功能键F3,保存退出
– map <F3> :x!<CR>
• 可视模式下,cx删除注释//
– vmap cx :s/^\/\///g<CR>

37、vim插件
• 老家
http://www.vim.org/scripts/index.php
• 用约定方式编写的脚本能够被除作者外的很多人使用。这样的脚本叫做插件。Vim 用户只 要把你写的脚本放在 plugin 目录下就可以立即使用了。
• 实际上有两种插件:
– 全局插件: 适用于所有类型的文件。
– 文件类型插件: 仅适用于某种类型的文件。

• 查看插件路径
– :set runtimepath?
– output
runtimepath=~/.vim,/var/lib/vim/addons,/usr/share/vim/vimfiles,/usr/share/vim/vim72,/usr/share/vim/vimfiles/after,/var/lib/vim/addons/after,~/.vim/after
38、Vim插件-安装
• mkdir ~/.vim
• cd ~/.vim/
• mkdir autoload && mkdir plugin
• cp *.vim ~/.vim/plugin

39、vim插件-taglist
• 下载
– http://www.vim.org/scripts/download_script.php?src_id=7701
• 依赖于ctags
– 下载ctags源码ctags-5.6.tar.gz
http://prdownloads.sourceforge.net/ctags/ctags-5.6.tar.gz
– (2)解压并安装
tar zxvf ctags-5.6.tar.gz
cd ctags-5.6
./configure && make && make install
– (3)使用 [/home/brimmer/src]$ ctags -R
• 打开taglist插件
– :Tlist
• 帮助
– :help taglist.txt
– :help tag
• Ctrl-] 跳转到当前光标所在的标签;
• Ctrl-O 返回到跳转前的位置;
• Ctrl-T 沿着经过的标签列表向回跳转,也可以在其前面输入一个数字,如N-Ctrl-T会向回跳转N步,相当于按了N下Ctrl-T;
• :tags 显示所有经过的标签列表;

vim插件-taglist窗口帮助
F1: 打开帮助
回车键:跳到光标所在的标记的定义处(如将光标移到main函数,按回车键)
o: 新建一个窗口,跳到标记定义处
p: 预览标记定义(仍然在taglist窗口)
空格:显示标记的原型(如函数原型)
u: 更新标记列表(比如源文件新增了一个函数,并在保存后,可在taglist窗口按u)
s: 选择排序字段(暂时我也不知道什么意思)
d: 删除光标所在的taglist文件(如用vi打开了两个文件f1.c,f2.c可以删除f1.c的标记)
x: 放大/缩小taglist窗口
+: 展开(指标记)
-: 折叠
*: 全部展开
=: 全部折叠
[[: 将光标移到前一个文件的起点
]]: 将光标移到后一个文件的起点
q: 退出taglist窗口
F1: 关闭帮助

vim插件-taglist配置
• let Tlist_Auto_Open=1
• let Tlist_Show_One_File = 1
• let Tlist_Exit_OnlyWindow = 1
• let Tlist_Ctags_Cmd = "/usr/bin/ctags"
• set nocp
• filetype plugin on

40、vim插件-autocomplpop.vim
• 自动补齐插件
• 支持7.0以上版本的vim
• 下载http://www.vim.org/scripts/script.php?script_id=1879

41、推荐安装的vim插件
水木社区VIM版版友推荐插件列表(06年12月)
http://www.newsmth.net/bbscon.php?bid=731&id=24898&ftype=11
-------------------------------------------------------------
BufExplorer Taglist latexsuite word_complete Sketch
DrawIt Mark SearchComplete vcscommand switchtags
ccal.rb viki NERD_tree fencview matrix
taglis Tetris BlockComment
-------------------------------------------------------------

42、小技巧
• gg=G 格式化文本
• K man info
• ‘.
• % 匹配括号
• /<C-R><C-W>
• /<C-R><C-A>

43、彩蛋
• :h!
• :h 42
• :h holy-grail

44、推荐资料
• Vim 键盘图
• Vim 帮助
• Vim 学习笔记by watercloud
• 网站: 水木vim版
http://www.newsmth.net/bbsdoc.php?board=VIM
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值