免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1177 | 回复: 0
打印 上一主题 下一主题

vim配置文件讲解[转] [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-07-19 19:08 |只看该作者 |倒序浏览

1 基本设置
set nocp
该命令指定让 VIM 工作在不兼容模式下。 在 VIM 之前, 出现过一个非常流行的编辑器叫
vi。 VIM 许多操作与 vi 很相似, 但也有许多操作与 vi 是不一样的。 如果使用“:set
cp”命令打开了兼容模式开关的话, VIM 将尽可能地模仿 vi 的操作模式。
例如:VIM 里允许在 Insert 模式下使用方向键移动光标, 而 vi 里在
Insert 模式下是不能移动光标的, 必须使用 ESC 退回到 Normal 模式下才行。
再举一个例子, vi 里使用 u 命令可以撤消一次先前的操作, 再次按下 u
时, 将撤消“撤消”这个动作本身, 也就是我们常说的“重复”(redo)。
而 VIM 里可以使用 u 命令撤消多步操作, “重复”使用的快捷键是 Ctrl
+ R。
使用兼容模式后, VIM 将放弃这些新的功能, 尽量模仿 vi 的各种操作方式。
只有在不兼容模式下, 才能更好地发挥 VIM 自身的特点。
set ru     该命令打开 VIM 的状态栏标尺。 默认情况下, VIM 的状态栏标尺在屏幕底部,
它能即时显示当前光标所在位置在文件中的行号、列号, 以及对应的整个文件的百分比。
打开标尺可以给文件的编辑工作带来一定方便。
   
set hls
搜索时高亮显示被找到的文本。
set is
搜索时在未完全输入完毕要检索的文本时就开始检索。
syntax on
打开关键字色。
set backspace=indent,eol,start
设想这样一个情况: 当前光标前面有若干字母, 按下 i 键进入了 Insert
模式, 然后输入了 3 个字母, 再按 5 下删除(Backspace)。 默认情况下,
VIM 仅能删除新输入的 3 个字母, 然后喇叭“嘟嘟”响两声。 如果“set
backspace=start”, 则可以在删除了新输入的 3 个字母之后, 继续向前删除原有的两个字符。
再 设想一个情况: 有若干行文字, 把光标移到中间某一行的行首, 按 i 键进入 Insert 模式, 然后按一下 Backspace。默认情况下, 喇叭会“嘟”一声,然后没有任何动静。 如果“set backspace=eol”,则可以删除前一行行末的回车,也就是说将两行拼接起来。
当设置了自动缩进后, 如果前一行缩进了一定距离, 按下回车后, 下一行也会保持相同的缩进。
默认情况下, 不能在 Insert 模式下直接按 Backspace 删除行首的缩进。
如果“set backspace=indent”, 则可以开启这一项功能。
上述三项功能, 可以选择其中一种或几种, 用逗号分隔各个选项。
set whichwrap=b,s,,[,]
默认情况下, 在 VIM 中当光标移到一行最左边的时候, 继续按左键,光标不能回到上一行的最右边。 同样地, 光标到了一行最右边的时候, 不能通过继续按右跳到下一行的最左边。
但 是, 通过设置 whichwrap 可以对一部分按键开启这项功能。如果想对某一个或几个按键开启到头后自动折向下一行的功能,可以把需要开启的键的代号写到 whichwrap 的参数列表中,各个键之间使用逗号分隔。以下是 whichwrap 支持的按键名称列表:
b
在 Normal 或 Visual 模式下按删除(Backspace)键。
s
在 Normal 或 Visual 模式下按空格键。
h
在 Normal 或 Visual 模式下按 h 键。
l
在 Normal 或 Visual 模式下按 l 键。
>
在 Normal 或 Visual 模式下按右方向键。
~
在 Normal 模式下按 ~ 键(翻转当前字母大小写)。
[
在 Insert 或 Replace 模式下按左方向键。
]
在 Insert 或 Replace 模式下按右方向键。

set encoding=cp936
设置当前字符编码为简体中文。 这里还有一段能够自动判断文件的 encoding,
自动选择合适的编码的 .vimrc 代码, 感兴趣的话可以放到自己的配置文件中使用:
" Encoding settings
if has("multi_byte")
    " Set fileencoding priority
    if getfsize(expand("%")) > 0
        set fileencodings=ucs-bom,utf-8,cp936,big5,euc-jp,euc-kr,latin1
    else
        set fileencodings=cp936,big5,euc-jp,euc-kr,latin1
    endif
    " CJK environment detection and corresponding setting
    if v:lang =~ "^zh_CN"
        " Use cp936 to support GBK, euc-cn == gb2312
        set encoding=cp936
        set termencoding=cp936
        set fileencoding=cp936
    elseif v:lang =~ "^zh_TW"
        " cp950, big5 or euc-tw
        " Are they equal to each other?
        set encoding=big5
        set termencoding=big5
        set fileencoding=big5
    elseif v:lang =~ "^ko"
        " Copied from someone's dotfile, untested
        set encoding=euc-kr
        set termencoding=euc-kr
        set fileencoding=euc-kr
    elseif v:lang =~ "^ja_JP"
        " Copied from someone's dotfile, unteste
        set encoding=euc-jp
        set termencoding=euc-jp
        set fileencoding=euc-jp
    endif
    " Detect UTF-8 locale, and replace CJK setting if needed
    if v:lang =~ "utf8$" || v:lang =~ "UTF-8$"
        set encoding=utf-8
        set termencoding=utf-8
        set fileencoding=utf-8
    endif
else
    echoerr "Sorry, this version of (g)vim was not compiled with multi_byte"
endif
                        
                        
2 文本编辑设置
set sw=4
自动缩进的时候, 缩进尺寸为 4 个空格。
set ts=4
Tab 宽度为 4 个字符。
set et
编辑时将所有 Tab 替换为空格。
该选项只在编辑时将 Tab 替换为空格, 如果打开一个已经存在的文件, 并不会将已有的
Tab 替换为空格。 如果希望进行这样的替换的话, 可以使用这条命令“:retab”。

3 断行设置
set lbr
不在单词中间断行。 设置了这个选项后, 如果一行文字非常长, 无法在一行内显示完的话,
它会在单词与单词间的空白处断开, 尽量不会把一个单词分成两截放在两个不同的行里。
set fo+=mB
打开断行模块对亚洲语言支持。 m 表示允许在两个汉字之间断行, 即使汉字之间没有出现空格。
B 表示将两行合并为一行的时候, 汉字与汉字之间不要补空格。 该命令支持的更多的选项请参看用户手册。

4 C/C++ 编码设置
set sm
显示括号配对情况。 打开这个选项后, 当输入后括号 (包括小括号、中括号、大括号)
的时候, 光标会跳回前括号片刻, 然后跳回来, 以此显示括号的配对情况。
set cin
打开 C/C++ 风格的自动缩进。 打开了自动缩进后, 在编码的时候可以使用“V”命令选中一段文本后,按“=”将这段文本重新调整缩进格式, 在一定程度上起到代码美化的作用。
另外, 打开了自动缩进后, 在使用 TERM 下的 vim 的时, 粘贴代码时常常会出现版式混乱的现象。那是因为 TERM 并不知道现在正在粘贴代码, 它直接“粘贴”动作向 vim
解释为键入, 因此 vim 便按照设置的自动缩进格式为的代码调整了缩进。
不幸的是, 粘贴进去的代码中本身已经包含了缩进, 因此便出现了版式混乱的情况。
在 gvim 中就不会出现这个问题, 因为它能够知道现在正在粘贴。
知道了这个症状的来由, 解决方案也就显而易见了: 在粘贴的时候把所有自动缩进都关闭,
粘贴完毕之后再打开。 一个个手工关闭自动缩进未免过于繁琐, vim 为提供了一个很好用的命令,只要输入“:set paste”, 就可以关闭所有自动缩进。 粘贴完毕后再输入“:set
nopaste”就可以重新打开原有的自动缩进设置了。
set cino=:0g0t0(sus
设定 C/C++ 风格自动缩进的选项, 这里简要介绍一下这段代码里用到的选项的含义,
cino 支持的选项还很多, 更多选项请看用户手册。
// :0
//
// switch 语句之下的 case 语句缩进 0 个空格,也就是说不缩进,与 switch 块平
// 齐,使用这样风格:
switch (x)
{
case 1:
    a = b;
    break;
default:
}
// g0
//
// class、struct 等之下的访问权限控制语句,如 public、protected、private 等,
// 相对 class、struct 等所在的块缩进 0 个空格,与 class 等块平齐,使用这样的
// 风格:
class foo
{
public:
    int a;
private:
    int b;
};
// t0
//
// 如果函数返回值与函数名不在同一行,则返回值缩进 0 个空格,也就是说不缩进,如
// 下所示:
// set cino=t4
    int
func1()
{
}
// set cino=t0
int
func()
{
}
// (sus
//
// 当一对括号跨越多行时,其后的行缩进前面 sw 指定的距离,效果如下:
int a = (1 + 2 + 3
    + 4 + 5 + 6
    + 7 + 8) * 9;
set ai
打开普通文件类型的自动缩进。 该自动缩进不如 cindent 智能, 但它可以为你编辑非
C/C++ 文件提供一定帮助。
5 其它设置
set selectmode=
不使用 selectmode。
set mousemodel=popup
当右键单击窗口的时候, 弹出快捷菜单。
set keymodel=
不使用“Shift + 方向键”选择文本, “Shift + 方向键”代表向指定方向跳一个单词。
如果你喜欢这项功能的话, 可以使用“set keymodel=startsel,stopsel”打开它。
set selection=inclusive
指定在选择文本时, 光标所在位置也属于被选中的范围。 如果指定 selection=exclusive
的话, 可能会出现某些文本无法被选中的情况。
colo torte
选择 torte 配色方案。 VIM 里内置了许多关键字上色的配色方案, 另外你还可以到网上下载更多配色方案,或是自己编写。 点击“编辑”→“调色板”, 就能列出所有支持的配色方案。
你可以把“调色板”子菜单剪下来, 然后慢慢选择, 挑出一个最喜欢的配色方案来。
6 图形界面设置
set nowrap
指定不折行。 如果一行太长, 超过屏幕宽度, 则向右边延伸到屏幕外面。
如果使用图形界面的话, 指定不折行视觉效果会好得多。
set guioptions+=b
添加水平滚动条。 如果你指定了不折行, 那为窗口添加一个水平滚动条就非常有必要了。
set guifont=Courier\ 9
设置图形界面下的字体。 你可以点“编辑”→“选择字体”, 然后在对话框中选出你喜欢的字体与字号,选择完毕后, 先按几下 ESC 确认处在 Normal 模式下, 然后输入这条命令:“:set
guifont?” 回车后 gvim 屏幕最下方会显示出你当前所用的字体的名称与字号。
将获得的结果写到配置文件里面就可以了, 需要注意一点, 如果字体名称里面含有空格的话,
在抄的时候需要在所有空格前面加一个斜杠。
7 条件选择
同一个配色方案, 在 gvim 下和字符界面的 vim 下效果大相径庭,
在 gvim 下使用 torte 配色方案, 在 vim 下使用 ron 配色方案。 因此我们有必要针对
gvim 和 vim 进行不同的设置。另外, 前面我们在 gvim 下不使用折行, 开启水平滚动条, 但在 vim 下,
是没有滚动条可用的, 因此还是有必要为 vim 保留自动折行。条件选择设置的格式如下:if (has("gui_running"))
" 图形界面下的设置
    set nowrap
    set guioptions+=b
    colo torte
else
" 字符界面下的设置
    set wrap
    colo ron
endif

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/53217/showart_2000623.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP