马兰花

导航

vim使用

转载自 http://tenanchris.javaeye.com/blog/625111

 


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

   

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

   

1、什么是vim

• Vim是从 vi 发展出来的一个文本编辑器。和Emacs并列成为类Unix系统用户最喜欢的编辑器。

• Vim的第一个版本由Bram Moolenaar1991年发布。最初的简称是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)

   

4vimcdoc 安装使用

• 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-TCTRL-Og<RightMouse>、或 <C-RightMouse> 可以用来跳回到你原来的地方。

   

5、启动vim

• Vim [option | filename ..]

用法: vim [参数] [文件 ..]       编辑指定的文件

  : vim [参数] -               从标准输入(stdin)读取文本

  : vim [参数] -t tag          编辑 tag 定义处的文件

  : vim [参数] -q [errorfile]  编辑第一个出错处的文件

   

6vim编码配置

• 三个参数相关

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

   

7vim配置-语法加亮

• 编辑.vimrc

– syntax enable

– syntax on

• 无法加亮原因

– 你的终端不支持彩色。

– 你的终端其实支持颜色,可是 Vim 不知道。

           确保你的 $TERM 设置正确。

          TERM=xterm-color; export TERM

– 文件类型无法识别

        :set filetype=fortran

   

8Vim配置-缩进、备份

• 编辑.vimrc

 set autoindent

• 编辑.vimrc

set backup

set nobackup

   

9vim配置-对齐

• tabstop

– 文件里的 <Tab> 代表的空格数。

• shiftwidth

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

• expandtab

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

• smarttab

– 如果打开,行首的 <Tab> 根据 'shiftwidth' 插入空白。'tabstop' 'softtabstop' 用在别的地方。<BS> 删除行首 'shiftwidth' 那么多的空白。 如果关闭,<Tab> 总是根据 'tabstop' 'softtabstop' 决定插入空白的数目。'shiftwidth' 只用于文本左移或右移。 插入空白的具体方式 (制表还是空格) 取决于 'expandtab' 选项。

   

10vim对齐配置

编辑.vimrc

set tabstop=4

set shiftwidth=4

set expandtab " python时很有用

set smarttab

   

11vim配置-配色

• 深色调

:set background=dark

• 浅色调

:set background=light

• 推荐配色

• darkblue

:colorscheme darkblue

• desert

:colorscheme desert

   

12Vim配置-鼠标支持

• 打开鼠标支持

:set mouse=a

• 关闭鼠标支持

:set mouse=

编辑.vimrc

set mouse=a

   

13vim 使用基础

• 多模式编辑器

– 普通模式         

– 插入模式          进入方式 i

– 可视模式          进入方式 v

– 命令模式          进入方式 :

– 选择模式          进入方式 :set selectmode=mouse  gh, gH, gCTRL-H

– Ex 模式            进入方式$vim –e

– 如何切换

– 按两下 <Esc> 返回普通模式。

– Ex 模式使用:vi 返回普通模式

   

14vim 基础-visual模式

• 对可视区域可以使用的操作符包括:

– ~ 切换大小写

– d 删除

– c 修改 (4)

– y 抽出

– > 右移 (4)

– < 左移 (4)

– ! 通过外部命令过滤 (1)

– = 通过 'equalprg' 选项的命令过滤 (1)

– gq 按照 'textwidth' 指定的宽度排版行 (1)

   

15vim 基础-visual模式

• 其它可以使用的命令:  

– r 修改

– s 修改

– C 修改

– S 修改

– R 修改

– x 删除

– D 删除

– X 删除

– Y 抽出

– p 放置

– J 连接

– U 变成大写

– u 变成小写

– ^] 查找标签

– I 列块插入

– A 列块添加

   

16vim使用基础-光标移动

                                 (up)   

      

                                 k        

               (left)     h         l    (right)

                                 j      

   

                             (down)

   

17Vim使用基础-分割窗口

• 水平分割

: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

   

19Vim使用基础-编辑

光标之前插入 i

光标之后插入 a

在行首插入    I

在行尾插入    A

在下方插入一个空行 o

在上方插入一个空行 O

   

20vim基础-删除

删除光标处字符 x

从光标处开始删除一个单词 dw

从光标删除到行尾           d$

从当前行删除到屏幕底部 dL

删除光标前一个字符       dh

从光标删除到行尾          D

删除当前行                    dd

从当前行删除到文件结束 dG

从当前行删除到文件开始 d1G

删除第5                      5Gdd

   

21vim基础-滚动

向后滚动一屏         CTRL-f

向前滚动一屏         CTRL-b       

向上滚动半屏         CTRL-u

向下滚动半屏         CTRL-d

   

22Vim基础-复制、粘贴

复制当前行   yy or Y

复制1个单词 yw

复制4个单词 y4w or 4yw

在光标后粘贴 p

在光标前粘贴 P

上下两行交换 ddp

   

23Vim基础-查找

• 在普通模式下

– /  向下找

– ?向上找

• 快速查找单词

– 将光标定位到单词

– # 向上找单词

– * 向下找单词

   

• :set ignorecase smartcase

• /findstr/b(+-n)

• /findstr/e(+-n)

• /one\|two\|three  多选择一

   

24vim基础-搜索与替换

>> 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")

   

25Vim基础-UndoRedo

撤销最后一次修改 u

撤销给定行的所有改变 U

重复上次编辑命令 "."

>> Ctrl-R

"u" CTRL-R 命令你可以切换到任何你编辑过的状态。

   

26vim使用基础-编辑中执行命令

• :!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 或其它命令继续

   

27Vim使用基础-退出

保存退出文件--> :wq  

                         :x

保存文件 --> :w

保存到新文件 --> :w filename

覆盖保存文件 --> :w! filename

退出 --> :q

退出而不保存改动 --> :q!

退出所有文件而不保存改动 -->:qa!

28vim基础-从崩溃中恢复

• vim -r help.txt

• vim -r .help.txt.swo 指定交换文件

   

29vim高级技巧-重复组合操作

• 普通模式下

– q{0-9a-zA-Z"} 开始记录

– q 记录完成

– @{0-9a-zA-Z"} 重复执行 

– 10@{0-9a-zA-Z"} 重复执行10

   

30vim技巧-代码折叠

• 什么是折叠

    +-----------------------------------+

        | 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 (关闭折叠)

   

31Vim技巧-mark(标记)

• ma     把当前位置存成标签a

`a     移到跳转到标记 a

:marks 取得所有的标记的列表

到有一些特殊的标记,包括:

'       跳转前的光标位置

"       最后编辑的光标位置

[       最后修改的开始位置

]       最后修改的结束位置

   

32vim技巧-列块操作

• ctrl-v 进入

– 列块插入

• I{string}<ESC>

– 列块添加

• A{string}<ESC>

– 列块修改

• c xxxxx<ESC>

   

33vim技巧-多标签页(tab)

• :tabnew

在当前标签页之后打开带空窗口的新标签页

• :tabc[lose][!]

关闭当前标签页

• :tabn[ext]

转到下一个标签页。最后一个标签页则回绕到第一个。

• :tabp[revious]

转到前一个标签页。首个标签页则回绕到最后一个。

• 配合 set mouse=a 使用

   

34vim技巧-自动补全

• Ctrl-n

 向后搜索

• Ctrl-p

 向前搜索

   

35Vim技巧-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

   

36vim技巧-键映射(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>

   

37vim插件

• 老家

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

38Vim插件-安装

• mkdir ~/.vim

• cd ~/.vim/

• mkdir autoload && mkdir plugin

• cp *.vim ~/.vim/plugin

   

39vim插件-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步,相当于按了NCtrl-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

   

40vim插件-autocomplpop.vim

• 自动补齐插件

• 支持7.0以上版本的vim

• 下载http://www.vim.org/scripts/script.php?script_id=1879

   

41、推荐安装的vim插件

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

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

   

 

posted on 2011-02-20 14:39  笨鸟快飞  阅读(617)  评论(0编辑  收藏  举报