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的哲学之一是使用独立的小工具完成复杂的工作。

  • 相关阅读:
    627. Swap Salary
    176. Second Highest Salary
    596. Classes More Than 5 Students
    183. Customers Who Never Order
    181. Employees Earning More Than Their Managers
    182. Duplicate Emails
    175. Combine Two Tables
    620. Not Boring Movies
    595. Big Countries
    HDU 6034 Balala Power! (贪心+坑题)
  • 原文地址:https://www.cnblogs.com/little-snake/p/4604097.html
Copyright © 2011-2022 走看看