【利器】Vim配置成IDE方案以及使用

来源:互联网 发布:数据库管理系统产品 编辑:程序博客网 时间:2024/05/29 19:49

“工欲善其事必先利其器”。

在之前就一直打算把vim作为自己的编辑器来工作的,但是由于vim的配置比较复杂,自己也还不知道自己需要哪些功能,并且公司的办公机器是windows系统,linux开发机器则不方便装自己的软件,所以暂时用的是windows下的eclipse。

eclipse用了3个月,也大概知道自己在工作中需要哪些功能了。总的来说,eclipse的功能很全面,基本够我用了,但是个人比较喜欢vim的各种操作(比如删除一行用dd,上下快速移动n行等等),虽然装了eclipse的vim插件,但是用起来有很多bug,所以决定还是用回纯正的vim。

目前的打算是,在windows机器上装一个linux的虚拟机,虚拟机和宿主机通过共享文件夹来同步代码(双向),宿主机跟开发机则使用同步工具进行单向同步(不使用双向同步是因为开发机上的代码同时用于编译,不想把编译产生的文件给同步到宿主机上)。之后所有的代码开发在虚拟机上进行(最好能有双屏幕,一个屏幕给linux虚拟机,一个屏幕给windows宿主机)。

vim配置下载以及说明:

https://github.com/jiangeZh/vim-ide

下面是我常用的功能说明以及一些需要自己另外配置的内容:

1.Buffer浏览与操作——F8

这里列出了目前打开的文件,可通过这个页面来切换文件。

按d键可删除buffer。

这里写图片描述

2.文件浏览器——F2

由于文件浏览器不是经常需要用到,所以默认是隐藏的,打开文件后该栏目会消失,如果需要固定该栏目,只需删除家目录下 .vimrc中的let NERDTreeQuitOnOpen=1这行,之后在nerdtree里打开文件后nerdtree就不会消失了。

这里写图片描述

3.tag浏览器——F3

tag浏览器显示了当前文件下的函数,变量,typedefs等等。

可切换到右边窗口并快速跳转到指定的函数。

切换窗口命令如下:

“ctrl-h”: move cursor to left window in vim
“ctrl-j”: move cursor to down window in vim
“ctrl-k”: move cursor to up window in vim
“ctrl-l”: move cursor to right window in vim

这里写图片描述

4.头文件与实现文件切换——F4

通过F4可快速在头文件和实现文件之间切换,注意前提是两个文件都已经打开了。

5.更新索引——F5

F5快捷键会把ctags,cscope两个索引都更新了。

6.高亮文件中所有当前单词——F7

这个功能十分有用,比如你想看看这个变量在哪里使用了,可以之间高亮,不需要动用搜索功能:

这里写图片描述

7.是否将tab扩展为space——F9

tab的使用容易使得代码排版比较乱,因为有的tab是4个空格的长度,有的是8个空格的长度。将tab扩展位space,即可避免这个问题~我们的配置默认是扩展的。

8.改变tab与space的对应关系——F10

对一个tab对应4个space还是8个space进行配置。

9.单文件内查找与替换

查找

/love 从光标位置向前搜索关键词 love
?love 从光标位置向后搜索关键词 love

正常模式下使用 n 或 N 命令执行 向前查找 或 向后查找 下一个关键词

:set ic 忽略大小写命令,ic 为 ignore case 缩写
:set is 边输入边显示匹配结果,is 是 incsearch 命令的缩写
:set hls 高亮显示匹配结果,hls 为 highlight search 缩写

可将上述设置放入.vimrc 文件中,设为默认搜索设置

:set noic nois nohls 将取消上述设置

:noh 暂时取消高亮显示,不会影响下次高亮显示匹配结果

替换

单文件中使用 :s 命令进行替换操作

几个常用的标记 :

% 所有行 g 单行内所有匹配项 i 忽略大小写 c 确认是否替换

关键词 old 替换为 new

:s/old/new 将光标所在行第一个 old 替换为 new
:s/old/new/g 将光标所在行所有 old 替换为 new
:%s/old/new/gc 全文执行替换,询问是否替换
:3,10s/old/new/gic 将第3行到第10行内容替换,忽略大小写,且每个询问是否替换

g i c 可自由组合

10.多文件内查找

vim 多文件查找方法

正常模式下使用 :vim 或 :vimgrep 命令执行多文件搜索

搜索的时候涉及到选取文件问题,这里主要用到 * 作为通配符,
** 表示文件夹及子文件夹下的所有文件

搜索 love 关键词

:vim/love/*                     #当前文件夹下的所有文件  :vim/love/**                    #当前文件夹及子目录下的所有文件  :vim/love/**/*.php              #当前文件夹及子目录下的所有 php 文件  :vim/love/*.php aa/**/*.php     #当前文件夹下的 php 文件和 aa 目录及子目录下的 php 文件  

使用 * 和 可任意组合出想要搜索的文件

:cw 查看搜索结果
:ccl 关闭搜索结果
:cn 查找下一个
:cp 查找上一个

cscope 多文件查找方法

:cs find s word
在项目中查找变量或者函数名word

:cs find t word
在项目中查找文本word

11.快速对齐

“=”: 对齐所选的代码

这里写图片描述

这里写图片描述

12.快速注释与取消注释

需要先使用ctrl-v选择。

“,”: comment selected code
“.”: uncomment selected code

13.配置相对行号

在.vimrc中添加:

set relativenumber

即可显示相对行号,为什么要用相对的呢?因为在vim中往上或者往下移动n行的操作比较多,因此使用相对行号十分方便,不需要我们去计算!

而且页面右下角显示了绝对行号和列号,因此这样子我们可以同时看到绝对行号和相对行号,方便操作。

这里写图片描述

14.撤销与重做

u是撤销,ctrl-r是重做。

15.复制粘贴

先按v或shift-v,选中一些内容,按y复制,把光标移动到想要粘贴的位置,按p。

16.选中一个单词

viw:它的作用是选取一个单词(word),无论光标在这个单词的哪个位置都能选中整个单词。

17.临时退出vim

ctrl-z 临时退出vim到后台,退出时会得到一个任务编号:

这里写图片描述

通过 fg %任务编号 恢复到前台(fg是frontground的意思,同理有bg,background为后台运行)。

18.语法高亮

在你的 ~/.vimrc 文件中增加下面几句话:

syntax enable
syntax on

再重新启动vim。

如果你不喜欢这个配色方案你可以在”编辑->配色方案”(gvim)中选择一个你满意的配色方案,比如desert,然后在~/.vimrc文件中增加下面这句:

colorscheme desert

19.突出当前行

突出当前行设置:

set cursorline

以上设置之后当前行会有下划线。

如果想要更丰富的色彩,可以如下设置:

hi CursorLine cterm=NONE ctermbg=black ctermfg=green guibg=NONE guifg=NONE

ctermbg是整行的背景,ctermfg是整行的前景。
guibg和guifg则是下划线的背景和前景。

(我目前只有下划线,色彩方案没有配置成功TAT)

20.头文件,变量,函数定义跳转

头文件

光标在include的头文件上时,使用gf命令可跳转到该头文件内,返回使用命令 ctrl-o 。

需要注意的是,gf命令会到path这个变量下面查找,需要在.vimrc上设置。比如我们的项目在 /home/jiange/MyProj 下,则添加如下配置:

set path=/home/jiange/MyProj/**,    #我们的项目set path+=/usr/include/**       #库头文件

变量与函数

光标选中要跳转的单词,ctrl-] 即可显示出现该tag的位置,输入相应数字可跳转过去。

这里写图片描述

如果想跳转回来,则使用 ctrl-t 。

如果跳转失败,尝试按F5来更新下索引,再重试。

21.去除多余的^M

windows和unix的换行符号不一样,需要转换:

$ dos2unix filename

22.提示函数原型

echofunc可以在命令行中提示当前输入函数的原型。

echofunc下载地址:http://www.vim.org/scripts/script.php?script_id=1735

下载完成后,把echofunc.vim文件放到 ~/.vim/plugin文件夹中。

当你在vim插入(insert)模式下紧接着函数名后输入一个”(“的时候, 这个函数的声明就会自动显示在命令行中。如果这个函数有多个声明, 则可以通过按键”Alt+-“和”Alt+=”向前和向后翻页, 这个两个键可以通过设置g:EchoFuncKeyNext和g:EchoFuncKeyPrev参数来修改。

这个插件需要tags文件的支持, 并且在创建tags文件的时候要加选项”–fields=+lS”(OmniCppComplete创建的tag文件也能用), 整个创建tags文件的命令如下:

$ ctags -R --fields=+lS

以上在我们的配置文件中是F5按键的配置处。

其他插件说明详见echofunc.vim

如果你在编译vim时加上了”+balloon_eval”特性,那么当你把鼠标放在函数名上的时候会有一个tip窗口弹出, 该窗口中也会有函数的声明。

23.代码折叠

折叠fold用于把缓冲区内某一范围内的文本行显示为屏幕上的一行。
那些文本仍然在缓冲区内而没有改变。受到折叠影响的只是文本行显示的方式。

折叠的好处是,通过把多行的一节折叠成带有折叠提示的一行,会使你更好地了解文本的宏观结构。

折叠方式foldmethod

vim提供以下6种方法来选定折叠方式:

manual 手工定义折叠
indent 更多的缩进表示更高级别的折叠
expr 用表达式来定义折叠
syntax 用语法高亮来定义折叠
diff 对没有更改的文本进行折叠
marker 对文中的标志折叠

折叠级别foldlevel

‘foldlevel’ 是个数值选项:数字越大则打开的折叠更多。
当 ‘foldlevel’ 为 0 时,所有的折叠关闭。
当 ‘foldlevel’ 为正数时,一些折叠关闭。
当 ‘foldlevel’ 很大时,所有的折叠打开。

折叠栏foldcolumn

‘foldcolumn’ 是个数字,它设定了在窗口的边上表示折叠的栏的宽度。当为0时,没有折叠栏。最大是12。

一个打开的折叠由一栏来表示,顶端是 ‘-‘,其下方是 ‘|’。这栏在折叠结束的地方结束。当折叠嵌套时,嵌套的折叠出现在被包含的折叠右方一个字符位置。

一个关闭的折叠由 ‘+’ 表示。

当折叠栏太窄而不能显示所有折叠时,显示一数字来表示嵌套的级别。

在折叠栏点击鼠标,可以打开和关闭折叠:
- 点击 ‘+’ 打开在这行的关闭折叠
- 在任何其他非空字符上点击,关闭这行上的打开折叠

在vim配置文件.vimrc中加入如下的配置:

    "--fold setting--    set foldmethod=syntax " 用语法高亮来定义折叠    set foldlevel=100 " 启动vim时不要自动折叠代码    set foldcolumn=5 " 设置折叠栏宽度

常用命令
za 打开/关闭在光标下的折叠
zA 循环地打开/关闭光标下的折叠
zo 打开 (open) 在光标下的折叠
zO 循环打开 (Open) 光标下的折叠
zc 关闭 (close) 在光标下的折叠
zC 循环关闭 (Close) 在光标下的所有折叠
zM 关闭所有折叠
zR 打开所有的折叠

帮助文档
:help usr_28.txt
:help fold.txt

24.文件编码检测与转换

虽然小组的代码明确规范使用utf-8,但是有一些老代码或者同事用的编辑器使用的是gbk编码,一时没法转过来,所以常常会出现乱码问题。使用eclipse的时候,装了一个插件,可以推测当前文件编码,以及便捷地进行编码格式的转换,如果vim也有类似的功能,那么编码问题就迎刃而解了!

Vim插件FencView-自动识别编码

下载地址:
http://www.vim.org/scripts/script.php?script_id=1735

把插件放到plugin目录,然后自动生效,命令模式输入:

FencAutoDetect :自动识别文件编码
FencView:打开一个编码列表窗口,用户选择编码reload文件

在vim中:F然后直接tab按键就可以选了,不用全部输入。

首先输入:FencAutoDectect自动检测,然后就可以:FencView查看自动检测到的字符集是什么了。

重复输入:FencView 视窗在’关闭/打开’之间切换。

高亮显示的字符集就是当前文件使用的字符集了。

非常有用的选项:

let g:fencview_autodetect = 1   #打开文件时自动识别编码let g:fencview_checklines = 10 #检查前后10行来判断编码

还可以指定识别编码的工具–$FENCVIEW_TELLENC。

如果mount的iso文件夹里面出现了乱码,判断iso的编码:

$ ls /mnt/iso > ~/gliethtp$ vim ~/gliethttp

然后

:F输入tab按键:FencAutoDectect:FencView

就可以看到iso的编码方案了。

对于vim打开文件时如何自动识别,可以有如下2个方法:

1.在.vimrc中加入如下一行

set fileencodings=utf-8,gb2312,ucs-bom,euc-cn,euc-tw,gb18030,gbk,cp936

2.在.vimrc中加入上面安装的fencview插件指令

let g:fencview_autodetect=1let g:fencview_auto_patterns='*'

对于方法2因为每次打开都将执行检测运算,所以效率比较低,使用方法1效率最高的(推荐)。

当方法1不能识别时,可以使用:FencAutoDectect自动检测,然后追加encoding到方法1中。

到此,我们的vim的功能基本够用了~接下来可以美美地敲代码了,纯键盘操作,不再需要像eclipse那样一会键盘一会鼠标!

0 0