Chinaunix首页 | 论坛 | 博客
  • 博客访问: 809338
  • 博文数量: 265
  • 博客积分: 6010
  • 博客等级: 准将
  • 技术积分: 1985
  • 用 户 组: 普通用户
  • 注册时间: 2009-07-13 12:33
文章分类

全部博文(265)

文章存档

2011年(1)

2010年(66)

2009年(198)

我的朋友

分类: LINUX

2009-11-03 16:43:18

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


                                                    by David Rayner



本文所有内容摘自公司同事的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帮助) 

Online:

(cool)


4、vimcdoc 安装使用

• wget

• tar -zxvf vimcdoc-1.7.0.tar.gz

• cd vimcdoc-1.7.0/

• sudo ./vimcdoc.sh -i 

使用:    :help    进入

CTRL-] 或双击鼠标进入,CTRL-T、CTRL-O、g、或 可以用来跳回到你原来的地方。


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 

– 文件里的 代表的空格数。 

• shiftwidth 

– (自动) 缩进每一步使用的空白数目。 

• expandtab 

– 插入模式里: 插入 时使用合适数量的空格。如果 'autoindent' 打开, '>' 和 '<' 命令使用空格进行缩进。'expandtab' 打开时,要插入实际的制 表,可用 CTRL-V 

• smarttab 

– 如果打开,行首的 根据 'shiftwidth' 插入空白。'tabstop' 或 'softtabstop' 用在别的地方。 删除行首 'shiftwidth' 那么多的空白。 如果关闭, 总是根据 '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

– 如何切换

– 按两下 返回普通模式。

– 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}

– 列块添加

• A{string}

– 列块修改

• c xxxxx


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 :x!

• 可视模式下,cx删除注释//

– vmap cx :s/^\/\///g


37、vim插件

• 老家 

• 用约定方式编写的脚本能够被除作者外的很多人使用。这样的脚本叫做插件。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

• 下载

–

• 依赖于ctags 

– 下载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

• 下载


41、推荐安装的vim插件

   水木社区VIM版版友推荐插件列表(06年12月)

-------------------------------------------------------------

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

• ‘.

• % 匹配括号 

• /

• / 


43、彩蛋

• :h!

• :h 42

• :h holy-grail 


44、推荐资料

• Vim 键盘图

• Vim 帮助 

• Vim 学习笔记by watercloud 

• 网站: 水木vim版 



阅读(3009) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~