Chinaunix首页 | 论坛 | 博客
  • 博客访问: 778956
  • 博文数量: 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版 



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