zoukankan      html  css  js  c++  java
  • vim 使用

    vim有三种模式:输入模式,命令模式,底行模式,使用esc进入命令模式,在命令模式下按英文的冒号,进入底行模式;命令行模式下按i进入输入模式。vim编辑文件是将文件内容复制到缓冲区显示在屏幕上。

    vim的启动

    输入vim命令后,便进入全屏幕编辑环境,此时的状态为命令模式。

    vim            进入vim的一个临时缓冲区,光标定位在该缓冲区第1行第1列的位置上
    vim file1        如果file1文件不存在,将建立此文件;如该文件存在,则将其拷贝到一个临时缓冲区。光标定位在该缓冲区第1行第1列的位置上
    vim + file1        (有+号)光标定位在文件最后1行第1列的位置上。如果file1文件不存在,将建立此文件;如该文件存在,则将其拷贝到一个临时缓冲区
    vim +N file1(N:为数字)        光标定位在文件第N行第1列的位置上。如果file1文件不存在,将建立此文件;如该文件存在,则将其拷贝到一个临时缓冲区
    vim +/string file1        如果file1文件不存在将建立此文件;如该文件存在则将其拷贝到一个临时缓冲区。光标定位在文件中第一次出现字符串string的行首位置
    vim file1 file2..    依次编辑文件
    vim -r file        上次使用vim时系统崩溃,则恢复文件
    vim -R file        以只读方式打开文件,但可以强制保存
    vim -M file        以只读的方式打开文件,不可以强制保存
    vimdiff file1 file2        比较编辑两个不同的文件
    vim -x file        编辑的文件加密,会提示输入密码
    vim -c cmd file    在打开文件前,先执行指定的命令
    vim dir/        使用 netrw 打开目录选择文件编辑
    vim -b file.bin    告诉 vim 编辑的是二进制文件,区别是不自动在文件尾加换行符(0x0a)
    vim a.tar.gz
    vim a.zip

    退出vim(底行模式(last line mode))

    建议在退出vim前,先按ESC键,以确保当前vim的状态为命令方式,然后再键入“:”(冒号),输入下列命令,退出vim

    :x            保存后退出
    ZZ            保存后退出
    ZQ            强制退出,不保存
    :saveas path_file    另存为 path_file
    :w            将缓冲区内容写入文件,即将编辑的内容写入原文件中
    :w filename        存入指定文件
    :q            将编辑缓冲区的内容写入文件,则新的内容就替代了原始文件。这时并没有退出vim,必须进一步输入下述命令才能退出vim
    :q!            强制退出;使被更新的内容不写回文件中。仅键入命令:q时,如vim发现文本内容已被更改,将提示用户使用“ :q ”命令退出
    :wq            先执行w,后执行q
    :qa            多屏时全部退出

    vimrc配置设置

    在启动vim时,当前用户根目录下的.vimrc文件会被自动读取,该文件可以包含一些设置和脚本,其注释是使用英文的双引号。所以,一般情况下把.vimrc文件创建在当前用户的根目录下比较方便,这个文件有些linux发行版中没有,需要自己创建,创建的命令为 $vim ~/.vimrc    ;or /etc/vimrc ;设置完后,进入底行模式,输入“ :x ”保存退出。所有的这些设置都可以在编辑时在底行模式中改变。查询系统是否安装了 vim-enhanced 包,没有安装软件这些配置将不起作用, $rpm –qa vim-enhanced。


    我的配置

    set nocompatible
    set nu
    set completeopt=longest,menu
    set nobackup
    set fileformat=unix
    set history=1000
    set background=dark
    set autoindent
    set smartindent
    set tabstop=4
    set shiftwidth=4
    set showmatch
    set guioptions-=T
    set vb t_vb=
    set ruler
    set nohls
    set incsearch
    set showcmd
    set statusline+=%f            "在状态栏显示文件名

    set fileencodings=utf-8,gb2312,gbk,gb18030
    set termencoding=utf-8
    set encoding=utf-8
    set fileencoding=utf-8

    colorscheme desert
    syntax on
    "set cindent
    "set encoding=prc
    "set mouse=a
    "set mouse=v
    "set selection=exclusive
    "set selectmode=mouse,key

    helptags ~/.vim/doc
    filetype plugin indent on

    "自动补全括号
    "iab ( ()
    "iab { {}

    :vmap <F5> :s#^#//#<CR>        "注释一行
    :vmap <F6> :s#^//##<CR>        "取消注释

    :map <F7> :set nu<CR>        "添加行号
    :map <F8> :set nonu<CR>

    :map <F9> :set paste<CR>        "粘贴模式
    :map <F10> :set nopaste<CR>

    nnoremap <leader>1 :set filetype=xhtml<CR>          "解决 html css 中缩进问题
    nnoremap <leader>2 :set filetype=css<CR>  
    nnoremap <leader>3 :set filetype=javascript<CR>  
    nnoremap <leader>4 :set filetype=php<CR>

    let g:html_indent_inctags = "body,head,tbody"         " 缩进body head
    let g:html_indent_script1 = "inc"        "缩进<script>标签
    let g:html_indent_style1 = "inc"        "缩进<style>标签
    au FileType html setlocal autoindent indentexpr=        "取消vim对html标记自动产生的缩进,但打开自动缩进选项

    :command! -nargs=1 Rename let tpname = expand('%:t') | saveas <args> | edit <args> | call delete(expand(tpname))        "重命名文件 Rename filename(自定义命令首字母要大写)

    正则表达式

    $                    匹配行尾
    ^                    匹配行首
    <                    匹配单词词首
    >                    匹配单词词尾
    
    |                    或操作符
    &                    与操作符
    
    .                    匹配任意一个字符
    *                    匹配0-任意个
    +                    匹配1-任意个
    ?                    匹配0-1个
    {n,m}                匹配n-m个
    {-n,m}                与{n,m}一样,尽可能少次数地重复
    {n}                    匹配n个
    {n,}                    匹配n-任意个
    {,m}                    匹配0-m个
    \_.                    匹配包含换行在内的所有字符
    {-}                    表示前一个字符可出现零次或多次,但在整个正则表达式可以匹配成功的前提下,匹配的字符数越少越好
    =                    匹配一个可有可无的项
    \_s                    匹配空格或断行
    \_[]
    
    *                    匹配 * 字符
    .                    匹配 . 字符
    /                    匹配 / 字符
    \                    匹配  字符
    [                    匹配 [ 字符
    
    
    [abc]                    匹配方括号中的任意一个字符。可以使用-表示字符范围,如[a-z0-9]匹配小写字母和阿拉伯数字
    [^abc]                    在方括号内开头使用^符号,表示匹配除方括号中字符之外的任意字符
    d                    匹配阿拉伯数字,等同于[0-9]
    D                    匹配阿拉伯数字之外的任意字符,等同于[^0-9]
    x                    匹配十六进制数字,等同于[0-9A-Fa-f]
    X                    匹配十六进制数字,等同于[^0-9A-Fa-f]
    w                    匹配单词字母,等同于[0-9A-Za-z_]
    W                    匹配单词字母之外的任意字符,等同于[^0-9A-Za-z_]
    *	                    匹配 <TAB> 字符
    s                    匹配空白字符,等同于[ 	]
    S                    匹配非空白字符,等同于[^ 	]
    a                    所有的字母字符. 等同于[a-zA-Z]
    l                    小写字母 [a-z]
    L                    非小写字母 [^a-z]
    u                    大写字母 [A-Z]
    U                    非大写字母 [^A-Z]
    
    替换变量:在正规表达式中使用 ( 和 ) 符号括起正规表达式,即可在后面使用1、2等变量来访问 ( 和 ) 中的内容。
    
    函数式
    :s/替换字符串/=函数式
    在函数式中可以使用 submatch(1)、submatch(2) 等来引用 12 等的内容,而submatch(0)可以引用匹配的整个内容。
    
    
    实例:
    :%s/s+$//                    去掉所有的行尾空格
    :%s/(s*
    )+/
    /            去掉所有的空白行
    :%s#s*//.*##                去掉所有的“//”注释,即去掉所有的//
    :%s#s*/*\_.{-}*/s*##g        去掉所有的“/* */”注释
    :g/^s*$/d                    删除只有空白的行
    :s/(w+)s+(w+)/2	1        将 data1 data2 修改为 data2 data1
    :%s/(w+), (w+)/2 1/        将 Doe, John 修改为 John Doe
    :%s/<id>/=line(".")            将各行的 id 字符串替换为行号
    :%s/(^<w+>)/=(line(".")-10) .".". submatch(1)       将每行开头的单词替换为(行号-10).单词的格式,如第11行的word替换成1. word
    :/OB/+1,$!sort                排序 
    :n,m sort                    排序 n,m 行
    :%s/<[^>;]*>;//g                去掉html的的标记
    
    
    转义字符                    似乎 vim 中的转义符与其它的工具有些差异
    
    
                             匹配 <CR> 键
    
                             匹配行末

    编辑模式

    编辑模式
    
    
    ctrl  p                    自动补全,向上搜索匹配词,在 vim 打开的所有文档中查找,不断输入命令会循环查找
    ctrl  x  f                    补全文件名
    ctrl  x  l                    自动补齐正行文本,仅在本窗口出现的文档中匹配

    命令模式

    h            向左移动一个字符
    l            向右移动一个字符
    j            向下移动一行
    k            向上移动一行
    w            将光标移到下一个单词的开头
    W            移到下一个字的开头,忽略标点符号
    b            光标回到上个 word 的第一个字母
    fa            移到下一个 a 字符处
    nfa
    Fa
    t,            移到逗号前的字符
    Ta        
    B            移到前一个字的开头,忽略标点符号 BACK
    e            将光标移到下一个单词的结尾
    E            移到下一个字的结尾,忽略标点符号 END
    J                合并光标所在行及下一行为一行(依然在命令模式)
    gg            光标回到文件首部
    ngg            跳到第n行
    GG            光标到文件最后一行首部
    gf            打开当前光标所在word的文件,没有这个文件则创建他。注意要先保存所作的更改
    0            到本行头
    $            到文行末
    n+            光标下移n行
    n-            光标上移n行
    H            光标移动到屏幕顶行
    M            光标移动到屏幕中间
    L            光标移动到屏幕最后一行
    zt            把当前行置于屏幕顶端
    z.            把当前行至于屏幕中间
    zb            把当前行至于屏幕底端
    ''                   移动光标到上一个标记处
    '.                移动光标到上一次的修改行
    `.              移动光标到上一次的修改点
    50%            光标置于文件中间
    ctrl  J        跳转到当前光标所在单词对应的主题
    ctrl  O        回到前一个光标的位置
    [[            光标移到文件开始位置
    ]]            光标移到文件结尾
    (            光标移动到句首,以一个空白行分隔判断段落
    )            光标移动到句尾
    {            光标移动到段落开头,以一个空白行判断段落
    }            光标移动到段落结尾
    
    
    gd            跳转到局部变量的定义处;
    gD            跳转到全局变量的定义处,从当前文件开头开始搜索;
    g;            上一个修改过的地方;
    g,            下一个修改过的地方;
    [[            跳转到上一个函数块开始,需要有单独一行的{。    
    ]]            跳转到下一个函数块开始,需要有单独一行的{。
    []            跳转到上一个函数块结束,需要有单独一行的}。
    ][            跳转到下一个函数块结束,需要有单独一行的}。
    [{            跳转到当前块开始处;
    ]}            跳转到当前块结束处;
    [/            跳转到当前注释块开始处;
    ]/            跳转到当前注释块结束处;
    %            不仅能移动到匹配的(),{}或[]上,而且能在#if,#else, #endif之间跳跃。
    
    
    %            括号匹配,移动到匹配的括号上,光标必须在括号上,匹配括号移动,包括 “ (, {, [ ”
    *            搜索匹配光标当前所在的单词,移动光标到下一个单词
    #            搜索匹配光标当前所在的单词,移动光标到上一个单词
    nfx            在当前行查找光标后第n个x(一般直接fx)
    
    模式转换
    a                在当前光标位置的右边添加文本
    A                在当前行的末尾位置添加文本
    i                在当前光标位置的左边添加文本
    I                在当前行的开始处添加文本(非空字符的行首)
    o                在当前行的下面新建一行
    O               在当前行的上面新建一行
    R                替换(覆盖)当前光标位置及后面的若干文本,相当于插入
    s            删除当前的字符后进入输入模式
    
    cw            删除当前word并进入输入模式
    ncw             删除当前word开始的n个word后进入输入模式
    cc            删除当前行后进入输入模式
    ncc            删除当前行开始的n行后进入输入模式
    
    
    复制 删除(剪切) 粘贴 恢复
    
    u                撤销
    ctrl  r          恢复,只对u有效
    U                撤销对光标所在那一行所做的修改
    x                删除光标所在的字符
    nx               删除从光标开始的n个字符
    X            删除光标之前(其左边)的一个字符
    r                修改光标所在的字符,按一下,再按想输入的字符
    J                合并两行
    
    d            删除可视区域的内容
    dd               删除当前行
    dfa            删除当前字符直到第一个a字符
    dt"            删除所有的内容,直到遇到双引号
    ndd              向下删除当前行在内的n行
    dw            删除一个词和它后面的空格,将光标放置到该词的开头
    ndw            删除光标及光标后的n个word
    d^            删除行中光标前面的字符
    d$            删除行中光标及其右边的字符
    d0            同d^
    D            同d$    
    dG            删除包含当前行到文件尾的内容
    ggdG            删除整个文件
    
    nyl            复制当前n个字符
    y2fa            复制当前字符直到第二个a字符
    y0            复制当前光标到行首的内容
    y$            复制当前光标到行末的内容
    yG            复制当前行到最后一行
    yy               当前行复制到缓存区,也可以用   ayy 复制,  a 为缓冲区,a也可以替换为a到z的任意字母,可以完成多个复制任务
    yw            复制当前光标处的单词
    nyy              将当前行向下n行复制到缓冲区,也可以用   anyy 复制,  a 缓冲区,a也可以替换为a到z的任意字母,可以完成多个复制任务
    yw               复制从光标开始到词尾的字符            
    nyw             复制从光标开始的n个单词
    y^               复制从光标到行首的内容
    y$               复制从光标到行尾的内容
    
    guw            光标下的单词变为小写
    gUw            光标下的单词变为大写
    ~            大小写转换
    
    xp            左右交换光标处两字符的位置
    p            粘贴到当前光标后面
    P            粘贴到当前光标前面
    
    ga            显示光标下的字符在当前使用的encoding下的内码
    
    宏
    .            重复上一个编辑动作
    qx            记录底行模式下输入的命令,并列表呈现出来
    q            停止录制
    @x            播放宏a
    @@            播放最近的宏
    
    zf            创建折叠的命令(需加方向键),可以在一个可视区域上使用该命令
    zd            删除当前行的折叠
    zD            删除当前行的折叠
    zfap            折叠光标所在的段
    zo            打开折叠的文本,空格也可以
    zc            收起折叠
    za            打开/关闭当前折叠
    zr            打开嵌套的折行
    zm            收起嵌套的折行
    zR(zO)        打开所有折行
    zM(zC)        收起所有折行
    zj            跳到下一个折叠处
    zk            跳到上一个折叠处
    zi            enable/disable fold
    
    =            使用v选定代码后,按'='会自动缩进代码
    >                       输入此命令则光标所在行向右移动一个tab
    >            使用v选定代码后,按'>'会将代码整体右移
    5>>                     输入此命令将光标在内的5行向右移动一个tab
    
    v            可视模式,单个字符
    V                可视模式,行,可以选择连续的多个行
    ctrl  v           可视模式,列
    
    ctrl  l            刷新屏幕
    
    自动补全
    ctrl   p            向上搜索匹配词    
    ctrl   n            向下
    
    移动
    ctrl  e            光标向下卷一行
    ctrl  y            光标向上卷一行
    
    翻页
    ctrl  u            光标向下卷半页
    ctrl  d            光标向上卷半页
    ctrl  f            光标向下卷一页
    ctrl  b            光标向上卷一页
    
    ctrl  q            挂起时使用
    ctrl  z        暂时挂到后台
    
    ctrl  ]        跳到函数定义的地方
    ctrl  g        显示文件名,当前光标所在行的行号,总的行数,以及当前行所在文件中的百分比和当前光标所在的列的信息,同':f'
    
    ctrl  w             窗口切换,连按两下,按方向键
    ctrl  w  s        上下分割当前打开的文件
    ctrl  w  v        左右分割当前打开的文件
    ctrl  w  c        关闭当前窗口
    ctrl  w  q        关闭当前窗口,如果只剩最后一个了,则退出Vim
    ctrl  w  h        把光标移到左边的屏
    ctrl  w  H        屏幕向左移动
    ctrl  w  j        把光标移到下边的屏
    ctrl  w  J        屏幕向下移动
    ctrl  w  k        把光标移到上边的屏
    ctrl  w  K        屏幕向上移动
    ctrl  w  l        把光标移到右边的屏
    ctrl  w  L        屏幕向右移动
    ctrl  w  =        让所有的屏都有一样的高度
    ctrl  W  +        要扩大窗口
    ctrl  W  -        要缩小窗口

    底行模式

    向前操作时不包括当前光标处的字符或word,向后操作时则包含当前

    /word                向下搜索word,n和N表示在同一方向重复上次的搜索命令
    ?word                向上搜索word

    底行的正则
    ^                表示头(可用'0'代替)
    $                 表示尾

    跳到某一行
    :行号

    :e                重新载入,类似刷新,edit
    :e!                放弃此次修改,重新载入该文件
    :e other_file           编辑filename为other_filename的文件
    :e ++enc=utf8 file    让vim用utf-8的编码打开这个文件
    :w ++enc=gbk        不管当前文件什么编码,把它转存成gbk编码
    :e ++ff=dos filename        让vim用dos格式打开这个文件。
    :w ++ff=mac filename        以mac格式存储这个文件。


    替换 删除 复制            vim删除时会将删掉的内容复制到剪切板,使用下面语句时建议不使用'/'而使用'#'
    :% s/old/new           用new替换每一行中首次出现的old
    :% s/old/new/g        用new替换行中所有的old
    :% s/old/new/gc        全文替换并让用户确认
    :% s/s+$//        去掉所有的行尾空格,'s'表示空白字符,'+'表示匹配一次或多次,'$'表示匹配到行尾
    :%s/s∗ +/ /        去掉所有的空白行
    :%s!s*//.*!!        去掉所有的“//”注释
    :%s!s*/*\_.{-}*/s*!!g        去掉所有的“/* */”注释
    :%s+/<love/>+&+g        完全匹配"love"的单词有多少,用自己替换自己计算出出现的次数,用'+'代替'/'
    :%s= *$==            将所有行尾多余的空格删除
    :g/^s*$/d            将所有不包含字符(空格也不包含)的空行删除
    :#,# s/old/new/gc        //这条命令作用不确定
    :n,m s/old/new/gc        用new替换从n到m行里所有的old,每替换一次进行提醒
    :n,m copy 10            拷贝n到m行到第10行下面。co
    :n,m d                删除n到m行,包含第n行和第m行
    :,24y                复制当前光标所在行到24行
    :d 12                删除包含光标所在行在内的12行
    :n,m move 10            移动n到m行到10行下面。m    
    :s/string/^M/        ^M由 ctrl  V 和 ctrl  M 获得,将字符替换成换行符
    :s/string/ /g        将 string 换为换行符


    :!cmd                执行终端命令
    :r !command            将终端命令输出添加到当前行
    :% !command            用终端命令输出替换当前文件内容

    :%!xxd                 将文件转换为十六进制, -b 选项转换为二进制,不可以多次转换
    :%!xxd -r             将十六进制文件转换为文本

    :w !sudo tee %        以普通用户身份打开的vim,修改后以root身份保存
    :f                显示文件名,当前光标所在行的行号,总的行数,以及当前行所在文件中的百分比和当前光标所在的列的信息
    :f file            生成一个内容为当前缓冲区的新的file文件,如果之前打开过文档,则对其不做任何改动。
    :X                加密文件


    :cat -n filename
    :awk ‘{print $1}’ a.txt > b.txt
    :bd                移出buffer,会使得当前编辑的文件移出内存,编辑新的为命令的文件,这样做意义不大

    :sh                   执行shell命令
    :exit
    :abbr sprt System.out.println        缩写命令,相当于定义宏
    :ab

    :r filename            复制指定文件的内容当光标所在处
    :vim filename -r        恢复文件
    :w! newfilename        另存为

    : 12,24>                      此命令将12行到14行的数据都向右移动一个tab
    : 12,24>>                 此命令将12行到14行的数据都向右移动两个tab


    :args                显示编辑名单中的各个文件名列表
    :edit ++enc=gbk        强制使用gbk编码打开文件,当vim打开文件编码错误时可以使用
    :map                列出当前已定义的映射
    :Sex                水平分割一个窗口,浏览文件系统,用enter键选择文件
    :Vex                垂直分割一个窗口,浏览文件系统
    :jumps            列出关于你曾经跳转过的位置的列表,你最近一个跳转的位置被特别以一个”>”号标记
    :mark a            设置标记a,使用d'a删除光标到标记的内容,y'a将其复制到剪切版
    :marks            列出自定义的标记,包含VIM内部自定义的标识
    :only                    只留下当前编辑的窗口,关闭其他的编辑窗口
    :iab ( ()            自动补全括号
    :%!nl                要对包含空行的所有行进行编号(所有行之前插入行号^I)
    :version            显示VIM版本信息,包含特性、编译方式及配置文件目录
    :n1,n2 w! command        将文件中n1行至n2行的内容作为command的输入并执行之,若不指定n1,n2,则表示将整个文件内容作为command的输入(注意空格)例如  :1,4 w! grep tom
    :options            打开一个新窗口, 在该窗口的最开头的注释下面是一个选项列表
    :autocmd!            删除之前的自动命令
    :runtime! syntax/2html.vim        转换成 html, 会按照你的颜色配置来转
    :g/^/exec "s/^/".strpart(line(".")." ", 0, 4)        在行首插入行号
    :filetype on        侦察文件类型
    :filetype plugin on    载入文件类型插件
    :filetype indent on    为特定文件类型载入相关缩进文件


    :set all            显示所有的设置项
    :set ai                      设置自动缩进
    :set ic                忽略大小写
    :set ignorecase            搜索中忽略大小写
    :set noic            
    :set selection=exclusive
    :set selectmode=mouse,key    可以使用鼠标定位
    :set mouse=v            可视模式下启用鼠标
    :set mouse=a            完全启用鼠标
    :set mouse=                关闭鼠标
    :set nocompatible              不兼容 vi ,默认兼容
    :set nowrapscan                禁止在搜索到文件两端时重新搜索
    :set hlsearch                  搜索时高亮显示被找到的文本
    :set nohls                取消搜索高亮
    :nohl                取消高亮
    :set incsearch            即时搜索
    :colorscheme desert          颜色设置,vim的配色方案在/usr/share/vim/vim74/colors 中
    :set gdefault            行内替换
    :set guifont=Courier_new:h14:b:cDEFAULT        设置字体和大小
    :set lines=35 columns=118    设置默认窗口大小(图形)
    :set vb t_vb=              置空命令错误时的铃声的终端代码
    :set wildmenu            增强模式中的命令行自动完成操作
    :set tabstop=4               实际的tab即为4个空格, 而不是缺省的8个
    :set softtabstop=4             使得按退格键时可以退回缩进的长度,使用 expandtab 时特别有效
    :set smarttab            在行和段开始处使用制表符
    :set expandtab               在输入tab后,vim用恰当的空格来填充这个tab
    :set noexpandtab            不要用空格代替制表符
    :set sts=4                   设置softtabstop为4
    :set shiftwidth=4            设置自动缩进 4 个空格, 当然要设自动缩进先
    :set autoindent            第一行,vim使用自动对起,也就是把当前行的对起格式应用到下一行
    :set smartindent              第二行,依据上面的对起格式,智能的选择对起方式,对于类似C语言编写上很有用
    :set cindent            按照 c 语言的语法缩进
    :set backspace=2
    :set textwidth=79
    :set ambiwidth=double
    :set autowrite            设置自动存盘
    :set showcmd            在Vim窗口的右下角显示一个完整的命令已经完成的部分
    :set key=                取消文件加密
    :set ai                设置文件起始位置(以光标当前位置为起始)set noai
    :set readonly            设置文件只读
    :set wrap                将超出屏幕行分多行显示 :set nowrap 关闭换行
    :set cursorline            突出显示当前行
    :set nobackup                  覆盖文件时不备份
    :set noswapfile
    :set backupcopy=yes            设置备份时的行为为覆盖
    :set tags=tags
    :set autochdir                 自动切换当前目录为当前文件所在的目录
    :set report=0            在使用了底行命令后自动告诉我们文件的哪一http://facebook.com/行被改变过
    :filetype plugin indent on     开启插件,文件类型检测,自动缩进
    :set noerrorbells              关闭错误信息响铃
    :set novisualbell              关闭使用可视响铃代替呼叫
    :set matchtime=2               短暂跳转到匹配括号的时间
    :set magic                     设置魔术
    :set hidden                    允许在有未保存的修改时切换缓冲区,此时的修改由 vim 负责保存
    :set guioptions-=T             隐藏GUI版本的工具栏
    :set guioptions-=m             隐藏菜单栏
    :set backspace=indent,eol,start                         不设定在插入状态无法用退格键和 Delete 键删除回车符
    :set cmdheight=1               设定命令行的行数为 1
    :set laststatus=2              显示状态栏 (默认值为 1, 无法显示状态栏)
    :set encoding=utf-8        相当于set enc
    :set fileencoding=utf-8        相当于set fenc
    :set fileencodings=utf-8        相当于set fencs
    :set termencoding=utf-8
    :set nobomb            去除utf-8的bom
    :set bomb
    :set bomb?            查看文件是否右bom标记
    :set foldenable                开始折叠
    :set foldmethod=syntax         设置语法折叠
    :set foldcolumn=0              设置折叠区域的宽度
    :setlocal foldlevel=1          设置折叠层数为1
    :set foldclose=all             设置为自动关闭折叠
    :set ff                显示当前文件的格式
    :set ruler            光标位置打状态行
    set ambiwidth=double        防止特殊符号无法正常显示
    :set fileformats=unix,dos,mac        添加在配置文件中让vim自动识别文件格式
    :set suffixes=.bak,~,.o,.h,.info,.swp,.aux,.bbl,.blg,.dvi,.lof,.log,.lot,.ps,.toc            这样在vim中打开文件时, 按 tab 键补齐文件名时它会忽略上述文件
    :set statusline= %<%F[%1*%M%*%n%R%H]%= %y %0(%{&fileformat} %{&encoding} %c:%l/%L%)                       设置在状态行显示的信息  
    :syntax on/off            色彩支持

    Python 文件的一般设置,比如不要 tab 等
    autocmd FileType python set tabstop=4 shiftwidth=4 expandtab
    autocmd FileType python map <F12> :!python %<CR>

    设置字典 ~/.vim/dict/文件的路径
    autocmd filetype javascript set dictionary=$VIMFILES/dict/javascript.dict
    autocmd filetype css set dictionary=$VIMFILES/dict/css.dict
    autocmd filetype php set dictionary=$VIMFILES/dict/php.dict

    let b:javascript_fold=1                打开javascript折叠
    let javascript_enable_domhtmlcss=1        打开javascript对dom、html和css的支持
    let helptags=$VIMFILES.'/doc'            设定doc文档目录

    多文件多窗口的操作

    vim -On file1 file2 ...    使用大写的O参数来垂直分屏,n是数字,表示分成几个屏
    vim -on file1 file2 ...    使用小写的o参数来垂直分屏
    
    :sp filename        上下分割,并打开一个新的文件
    :vsp filename        左右分割,并打开一个新的文件
    :rew                     多个文件时回到首个文件
    :n                切换到下一个文件
    :N                切换到上一个文件
    :bn                
    :bp                同时打开很多文件,使用这两个命令来切换下一个或上一个文件
    :split    filename        分割窗口,将会复制文件内容
    :vsplit    filename        分割窗口
    :new    filename    
    :vnew    filename   
    :close                关闭当前窗口
    :only                    只留下当前编辑的窗口,关闭其他的编辑窗口
    :qa                    全部退出,同qall
    :wa                    全部写入,同wall
    :wqa                同wqall
    :args                显示编辑名单中的各个文件名列表
    :files buffers ls        列出目前 buffer 中的所有文件
    
    ctrl  w             窗口切换,连按两下,按方向键
    ctrl  w  s        上下分割当前打开的文件
    ctrl  w  v        左右分割当前打开的文件
    ctrl  w  c        关闭当前窗口
    ctrl  w  q        关闭当前窗口,如果只剩最后一个了,则退出Vim
    ctrl  w  h        把光标移到左边的屏
    ctrl  w  H        屏幕向左移动
    ctrl  w  j        把光标移到下边的屏
    ctrl  w  J        屏幕向下移动
    ctrl  w  k        把光标移到上边的屏
    ctrl  w  K        屏幕向上移动
    ctrl  w  l        把光标移到右边的屏
    ctrl  w  L        屏幕向右移动
    ctrl  w  =        让所有的屏都有一样的高度
    ctrl  W  +        要扩大窗口
    ctrl  W  -        要缩小窗口
    
    窗口分割时,进行切换的按键热键需要连接两次,比如从下方窗口移动光标到上方窗口,需要<c-w><c-w>k,非常麻烦,现在重映射为<c-k>,切换的时候会变得非常方便
    nnoremap <C-h> <C-w>h
    nnoremap <C-j> <C-w>j
    nnoremap <C-k> <C-w>k
    nnoremap <C-l> <C-w>l

    文档的折叠,缩进

    :set foldenable                 开始折叠
    :set foldmethod=syntax          设置语法折叠
    :set foldcolumn=0               设置折叠区域的宽度
    :setlocal foldlevel=1           设置折叠层数为1
    :set foldclose=all              设置为自动关闭折叠 
    
    zf            折叠行(需加方向键)
    zo            展开折叠,空格也可以
    zc            关闭折叠
    
    用空格键来开关折叠(默认)
    nnoremap <space> @=((foldclosed(line('.')) < 0) ? 'zc' : 'zo')<CR>      
    
    使用v选定代码后,按'='会自动缩进代码。
    使用v选定代码后,按'>'会将代码整体右移。

    文件格式

    有三种文件格式:unix, dos, mac. 三种格式的区别主要在于回车键的编码:dos 下是回车加换行,unix 下只有 换行符,mac 下只有回车符。
    
    :e ++ff=dos filename            让vim用dos格式打开这个文件
    :w ++ff=mac filename            以mac格式存储这个文件
    :set fileformats=unix,dos,mac        添加在配置文件中让vim自动识别文件格式
    :set ff    

    标记

    使用标记可以快速移动。到达标记后,可以用Ctrl+o返回原来的位置。 Ctrl+o和Ctrl+i 很像浏览器上的 后退 和 前进 。
    
    m{a-z}                标记光标所在位置,局部标记,只用于当前文件。
    m{A-Z}                标记光标所在位置,全局标记。标记之后,退出Vim, 重新启动,标记仍然有效。
    `{a-z}                移动到标记位置。
    '{a-z}                移动到标记行的行首。
    `{0-9}                    回到上[2-10]次关闭vim时最后离开的位置。
    ``                    移动到上次编辑的位置。''也可以,不过``精确到列,而''精确到行 。如果想跳转到更老的位置,可以按C-o,跳转到更新的位置用C-i。
    `"                    移动到上次离开的地方。
    `.                    移动到最后改动的地方。
    :marks                显示所有标记。
    :delmarks a b            删除标记a和b。
    :delmarks a-c            删除标记a、b和c。
    :delmarks a c-f            删除标记a、c、d、e、f。
    :delmarks!                删除当前缓冲区的所有标记。
    :help mark-motions        查看更多关于mark的知识

    注释

    方法一 块选择模式
    Ctrl  v 进入块选择模式,然后移动光标选中你要注释的行,再按大写的I进入行首插入模式输入注释符号如// 或 #,输入完毕之后,按两下esc键,Vim会自动将你选中的所有行首都加上注释
    Ctrl  v 进入块选择模式,选中你要删除的行首的注释符号,注意// 要选中两个,选好之后按d即可删除注释
    
    
    方法二 替换命令
    
    使用下面命令在指定的行首添加和撤销注释:
    
    :起始行号,结束行号s/^/注释符/g        4,9 s/^////g,可以将格式中的/替换为#
    :起始行号,结束行号s/^注释符//g        4,9 s/^////g
    
    
    :vmap <F5> :s/^////<CR>        选中内容,按 F5注释
    :vmap <F6> :s/^////<CR>        选中内容,按F6取消注释
    
    每当输入#号时,#号都会跑到行首。
    在.vimrc中加入如下几行,即可解决这个问题。
    复制代码 代码如下:
    if has("autocmd")
        filetype plugin indent on
    else
        set autoindent
    endif "has("autocmd")

    统计字数

    在visual(可视)模式下,选中需要统计的文本,按g,再按Ctr+g就会显示选择的行数,字符数。
    
    :% s/./&/g            显示当前文本的字符数,行数,原理是用字符自己替换自己,看替换了多少次

    复制粘贴

    无论是vim内部抑或外部的复制([y]ank)、删除([d]elete)、粘贴([p]ut),在vim中都是借助registers(寄存器)实现的,vim共有9类寄存器:
    无名(unnamed)寄存器:""                缓存最后一次操作内容;
    数字(numbered)寄存器:"0 - "9            缓存最近操作内容,复制与删除有别;
    行内删除(small delete)寄存器:"-            缓存行内删除内容;
    具名(named)寄存器:"a - "z或"A - "Z        指定时可用;
    只读(read-only)寄存器:":, "., "%, "#        分别缓存最近命令、最近插入文本、当前文件名、当前交替文件名;
    表达式(expression)寄存器:"=            只读,用于执行表达式命令;
    选择及拖拽(selection and drop)寄存器:"*, "+, "~        存取GUI选择文本,可用于与外部应用交互,使用前提为系统剪切板(clipboard)可用;
    黑洞(black hole)寄存器:"_            不缓存操作内容(干净删除);
    模式寄存器(last search pattern):"/        缓存最近的搜索模式。
    
    粘贴剪切板内容
    在命令模式下依次输入“"0p”粘贴0寄存器的内容。
    
    对于非GUI版本的vim,系统剪切板是不可用的,须安装gvim。
    
    设置了set mouse=a 后,按住 shift 键,可以将鼠标的处理交给 X 环境,方便复制粘贴。
    
    :map <F7> :set nu<CR>
    :map <F8> :set nonu<CR>
    :map <F9> :set paste<CR>        
    :map <F10> :set nopaste<CR>

    map

    :map            输出已定义的所有映射
    
    map,nmap(命令模式),imap(输入模式),vmap(选中模式) 
    
    进行命令的宏定义。置可以预先写到 ~/.vimrc,写进配置文件时不用写前面的冒号。
    :nmap  :nohls                   取消被搜索字串的高亮
    :nmap  w                       命令模式下转移光标到不同窗口
    :imap                          输入模式下运行
    :nmap  :%s= *$==               删除所有行尾多余的空格
    :nmap  :cl                      此命令用于查看所有的编译错误
    :nmap  :cc                      此命令用于查看当前的编译错误
    :nmap  :cn                      此命令用于跳到下一个出错位置
    :nmap  :cp                      此命令用于跳到上一个出错位置
    :imap                        同上java 中: (注, 这里为什么说 java 中, 因为以下定义对其他文件格式不起作用, 下文会说到如何实现这一点)
    :nmap  :JavaBrowser            此命令用于在窗口左部分割出一个新窗口, 里面的内容是 java 的资源树, 包括本文件中出现的类, 类的成员变量及成员方法, 就好像 JCreator 
                      表现的那样。在这个窗口中输入
    ? 会看到帮助。 嘿嘿, 很好用, 不过需要 ctags 支持. :nmap :comp javac:mak -d . % 此命令用 javac 编译 java 文件, 它会自动将光标定位到出错点. 不过这需要定义一个 javac.vim 文件在 $VIM/compiler 下,
                    在 javac.vim 里面只有两行字:setlocal makeprg=javac, setlocal errorformat=%A%f:%l: %m,%-Z%p^,%-C%.%# :nmap :comp ant:mak 此命令用 ant 编译 java 文件, 它会自动将光标定位到出错点. 一般来说, 安装vim 后已经有了compiler/ant.vim文件, 因此这个命令可以
                  直接使用。但是需要在当前目录下有 build.xml 文件, 当然还必须安装 ant 才行 Buffers操作快捷方式 nnoremap
    <C-RETURN> :bnext<CR> nnoremap <C-S-RETURN> :bprevious<CR> Tab操作快捷方式 nnoremap <C-TAB> :tabnext<CR> nnoremap <C-S-TAB> :tabprev<CR> 关于tab的快捷键 map tn :tabnext<cr> map tp :tabprevious<cr> map td :tabnew .<cr> map te :tabedit map tc :tabclose<cr> 一些不错的映射转换语法(如果在一个文件中混合了不同语言时有用) nnoremap <leader>1 :set filetype=xhtml<CR> nnoremap <leader>2 :set filetype=css<CR> nnoremap <leader>3 :set filetype=javascript<CR> nnoremap <leader>4 :set filetype=php<CR> nmap <leader>fd :se fileformat=dos<CR> nmap <leader>fu :se fileformat=unix<CR> 使用Ctrl+[l|n|p|cc] 来 list|next|previous|jump to count the result map <C-x>l <ESC>:cl<CR> map <C-x>n <ESC>:cn<CR> map <C-x>p <ESC>:cp<CR> map <C-x>c <ESC>:cc<CR> 选中状态下 Ctrl c 复制 vmap <C-c> y

    autocmd

    :set autocmd!
    Python 文件的一般设置,比如不要 tab 等 autocmd FileType python set tabstop
    =4 shiftwidth=4 expandtab autocmd FileType python map <F12> :!python %<CR> 设置字典 ~/.vim/dict/文件的路径 autocmd filetype javascript set dictionary=$VIMFILES/dict/javascript.dict autocmd filetype css set dictionary=$VIMFILES/dict/css.dict autocmd filetype php set dictionary=$VIMFILES/dict/php.dict

    vim的插件

    http://www.ibm.com/developerworks/cn/linux/l-tip-vim2/index.html
    
    gzip(压缩文件支持)
    
    netrw(网络文件支持)
    
    engspchk(英文拼写检查)
    
    calendar(日历显示)cal
    
    project(文件的“项目”管理):Project
    
    taglist(源代码结构浏览):Tlist
    :let Tlist_Inc_Winwidth=0
    
    cvsmenu(CVS集成)
    
    doxygen(文档注释语法加亮)
    
    matrix(一个好玩的脚本):Matrix
    
    syntax/2html.vim            让 Tohtml 产生有 CSS 语法的 html   
    let html_use_css=1
    
    ZenCoding.vim             很酷的插件,HTML代码生成
    插件最新版:http://github.com/mattn/zencoding-vim
    常用命令可看:http://nootn.com/blog/Tool/23/
    
    checksyntax.vim            JavaScript常见语法错误检查
    默认快捷方式为 F5
    let g:checksyntax_auto = 0        不自动检查
    
    NeoComplCache.vim            自动补全插件
    let g:AutoComplPop_NotEnableAtStartup = 1
    let g:NeoComplCache_EnableAtStartup = 1
    let g:NeoComplCache_SmartCase = 1
    let g:NeoComplCache_TagsAutoUpdate = 1
    let g:NeoComplCache_EnableInfo = 1
    let g:NeoComplCache_EnableCamelCaseCompletion = 1
    let g:NeoComplCache_MinSyntaxLength = 3
    let g:NeoComplCache_EnableSkipCompletion = 1
    let g:NeoComplCache_SkipInputTime = '0.5'
    let g:NeoComplCache_SnippetsDir = $VIMFILES.'/snippets'
    <TAB> completion.
    inoremap <expr><TAB> pumvisible() ?   <C-n>   :   <TAB>  
    snippets expand key
    imap <silent> <C-e> <Plug>(neocomplcache_snippets_expand)
    smap <silent> <C-e> <Plug>(neocomplcache_snippets_expand)
    
    bufexplorer.vim             Buffers切换
    e                     全屏方式查看全部打开的文件列表
    v                     左右方式查看   s 上下方式查看
    
    taglist.vim              查看函数列表,需要ctags程序
    F4 打开隐藏taglist窗口
    if MySys() ==   windows                     设定windows系统中ctags程序的位置
        let Tlist_Ctags_Cmd = '  '.$VIMRUNTIME.'/ctags.exe  '
    elseif MySys() ==   linux                   设定windows系统中ctags程序的位置
        let Tlist_Ctags_Cmd = '/usr/bin/ctags'
    endif
    nnoremap <silent><F4> :TlistToggle<CR>
    let Tlist_Show_One_File = 1                   不同时显示多个文件的tag,只显示当前文件的
    let Tlist_Exit_OnlyWindow = 1                 如果taglist窗口是最后一个窗口,则退出vim
    let Tlist_Use_Right_Window = 1                在右侧窗口中显示taglist窗口
    let Tlist_File_Fold_Auto_Close=1              自动折叠当前非编辑文件的方法列表
    let Tlist_Auto_Open = 0
    let Tlist_Auto_Update = 1
    let Tlist_Hightlight_Tag_On_BufEnter = 1
    let Tlist_Enable_Fold_Column = 0
    let Tlist_Process_File_Always = 1
    let Tlist_Display_Prototype = 0
    let Tlist_Compact_Format = 1
    
    mark.vim                 给各种tags标记不同的颜色,便于观看调式的插件。
    m                      mark or unmark the word under (or before) the cursor
    
                          manually input a regular expression. 用于搜索.
    
                          clear this mark (i.e. the mark under the cursor), or clear all highlighted marks .
    *                      当前MarkWord的下一个     
    #                      当前MarkWord的上一个
    /                      所有MarkWords的下一个    
    ?                      所有MarkWords的上一个
    
    NERD_tree.vim             以树状方式浏览系统中的文件和目录
    :ERDtree 打开NERD_tree         :NERDtreeClose    关闭NERD_tree
    o                     打开关闭文件或者目录         
    t                     在标签页中打开
    T                     在后台标签页中打开           
    !                     执行此文件
    p                     到上层目录                   
    P                     到根目录
    K                     到第一个节点                 
    J                     到最后一个节点
    u                     打开上层目录                 
    m                     显示文件系统菜单(添加、删除、移动操作)
    r                     递归刷新当前目录             
    R                     递归刷新当前根目录
    F3                     NERDTree 切换
    map <F3> :NERDTreeToggle<CR>
    imap <F3> <ESC>:NERDTreeToggle<CR>
    
    NERD_commenter.vim           注释代码用的,
    [count],cc                 光标以下count行逐行添加注释(7,cc)
    [count],cu                 光标以下count行逐行取消注释(7,cu)
    [count],cm                 光标以下count行尝试添加块注释(7,cm)
    ,cA                     在行尾插入 /* */,并且进入插入模式。 这个命令方便写注释。
    注:count参数可选,无则默认为选中行或当前行
    let NERDSpaceDelims=1          让注释符与语句之间留一个空格
    let NERDCompactSexyComs=1      多行注释时样子更好看
    
    DoxygenToolkit.vim          由注释生成文档,并且能够快速生成函数标准注释
    let g:DoxygenToolkit_authorName=  Asins - asinsimple AT gmail DOT com  
    let g:DoxygenToolkit_briefTag_funcName=  yes  
    map <leader>da :DoxAuthor<CR>
    map <leader>df :Dox<CR>
    map <leader>db :DoxBlock<CR>
    map <leader>dc a /*  */<LEFT><LEFT><LEFT>
    
    matchit.vim               对%命令进行扩展使得能在嵌套标签和语句之间跳转
    % 正向匹配      
    g% 反向匹配
    [% 定位块首    
     ]% 定位块尾
    
    plugin - vcscommand.vim       对%命令进行扩展使得能在嵌套标签和语句之间跳转
    SVN/git管理工具
    
    a.vim

    搭建vim开发环境

    http://blog.csdn.net/tao_627/article/details/9320363

    项目管理

    http://blog.csdn.net/ithomer/article/details/7090318
    http://blog.csdn.net/paul08colin/article/details/9232409

    参考

    http://www.vim.org/
    http://wiki.dzsc.com/info/7313.html
    http://www.cnblogs.com/zourrou/archive/2011/04/16/2018493.html
    http://blog.csdn.net/wuyeyixi/article/details/7466327
    http://blog.csdn.net/tao_627/article/details/9320363
    http://blog.csdn.net/ithomer/article/details/7090318
    http://blog.csdn.net/paul08colin/article/details/9232409
    http://blog.163.com/zhang_sheng_cun/blog/static/46288667200792604435190/
    http://linux.chinaunix.net/techdoc/desktop/2009/07/06/1122020.shtml
    http://be-evil.org/vim-how-to-comment-multi-line-code.html
    http://www.ibm.com/developerworks/cn/linux/l-tip-vim2/index.html
    http://vimcdoc.sourceforge.net/        下载vim的pdf完全翻译版,里面很详细的介绍了vim
    http://www.vi-improved.org/vimrc.php        带有英文注释的.vimrc配置文件

    unix/linux的哲学之一是使用独立的小工具完成复杂的工作。

  • 相关阅读:
    DS博客作业06--图
    DS博客作业05--树
    DS博客作业03--栈和队列
    DS博客作业02--线性表
    DS博客作业03--栈和队列
    DS博客作业02--线性表
    DS博客作业01--日期抽象数据类型设计与实现
    C语言博客作业06--结构体&文件
    C语言博客05--指针
    C语言博客作业04--数组
  • 原文地址:https://www.cnblogs.com/little-snake/p/4604097.html
Copyright © 2011-2022 走看看