zoukankan      html  css  js  c++  java
  • linux下vi命令大全

    进入vi的命令
    vi filename :打开或新建文件,并将光标置于第一行首
    vi +n filename :打开文件,并将光标置于第n行首
    vi + filename :打开文件,并将光标置于最后一行首
    vi +/pattern filename:打开文件,并将光标置于第一个与pattern匹配的串处
    vi -r filename :在上次正用vi编辑时发生系统崩溃,恢复filename
    vi filename....filename :打开多个文件,依次进行编辑

    移动光标类命令
    h :光标左移一个字符
    l :光标右移一个字符
    space:光标右移一个字符
    Backspace:光标左移一个字符
    k或Ctrl+p:光标上移一行
    j或Ctrl+n :光标下移一行
    Enter :光标下移一行
    w或W :光标右移一个字至字首
    b或B :光标左移一个字至字首
    e或E :光标右移一个字至字尾
    ) :光标移至句尾
    ( :光标移至句首
    }:光标移至段落开头
    {:光标移至段落结尾
    nG:光标移至第n行首
    n+:光标下移n行
    n-:光标上移n行
    n$:光标移至第n行尾
    H :光标移至屏幕顶行
    M :光标移至屏幕中间行
    L :光标移至屏幕最后行
    0:(注意是数字零)光标移至当前行首
    $:光标移至当前行尾

    屏幕翻滚类命令
    Ctrl+u:向文件首翻半屏
    Ctrl+d:向文件尾翻半屏
    Ctrl+f:向文件尾翻一屏
    Ctrl+b;向文件首翻一屏
    nz:将第n行滚至屏幕顶部,不指定n时将当前行滚至屏幕顶部。

    插入文本类命令
    i :在光标前
    I :在当前行首
    a:光标后
    A:在当前行尾
    o:在当前行之下新开一行
    O:在当前行之上新开一行
    r:替换当前字符
    R:替换当前字符及其后的字符,直至按ESC键
    s:从当前光标位置处开始,以输入的文本替代指定数目的字符
    S:删除指定数目的行,并以所输入文本代替之
    ncw或nCW:修改指定数目的字
    nCC:修改指定数目的行

    删除命令
    ndw或ndW:删除光标处开始及其后的n-1个字
    do:删至行首
    d$:删至行尾
    ndd:删除当前行及其后n-1行
    x或X:删除一个字符,x删除光标后的,而X删除光标前的
    Ctrl+u:删除输入方式下所输入的文本

    搜索及替换命令
    /pattern:从光标开始处向文件尾搜索pattern
    ?pattern:从光标开始处向文件首搜索pattern
    n:在同一方向重复上一次搜索命令
    N:在反方向上重复上一次搜索命令
    :s/p1/p2/g:将当前行中所有p1均用p2替代
    :n1,n2s/p1/p2/g:将第n1至n2行中所有p1均用p2替代
    :g/p1/s//p2/g:将文件中所有p1均用p2替换

    选项设置
    all:列出所有选项设置情况
    term:设置终端类型
    ignorance:在搜索中忽略大小写
    list:显示制表位(Ctrl+I)和行尾标志($)
    number:显示行号
    report:显示由面向行的命令修改过的数目
    terse:显示简短的警告信息
    warn:在转到别的文件时若没保存当前文件则显示NO write信息
    nomagic:允许在搜索模式中,使用前面不带“”的特殊字符
    nowrapscan:禁止vi在搜索到达文件两端时,又从另一端开始
    mesg:允许vi显示其他用户用write写到自己终端上的信息

    最后行方式命令
    :n1,n2 co n3:将n1行到n2行之间的内容拷贝到第n3行下
    :n1,n2 m n3:将n1行到n2行之间的内容移至到第n3行下
    :n1,n2 d :将n1行到n2行之间的内容删除
    :w :保存当前文件
    :e filename:打开文件filename进行编辑
    :x:保存当前文件并退出
    :q:退出vi
    :q!:不保存文件并退出vi
    :!command:执行shell命令command
    :n1,n2 w!command:将文件中n1行至n2行的内容作为command的输入并执行之,若不指定n1,n2,则表示将整个文件内容作为command的输入
    :r!command:将命令command的输出结果放到当前行

    寄存器操作
    "?nyy:将当前行及其下n行的内容保存到寄存器?中,其中?为一个字母,n为一个数字
    "?nyw:将当前行及其下n个字保存到寄存器?中,其中?为一个字母,n为一个数字
    "?nyl:将当前行及其下n个字符保存到寄存器?中,其中?为一个字母,n为一个数字
    "?p:取出寄存器?中的内容并将其放到光标位置处。这里?可以是一个字母,也可以是一个数字
    ndd:将当前行及其下共n行文本删除,并将所删内容放到1号删除寄存器中。

    VI的使用
    --------------------------------------------------------------------------------

    一、插入文本
    ┌──┬────────────┐
    │命令│描述          │
    ├──┼────────────┤
    │i  │在当前字符前插入文本  │
    ├──┼────────────┤
    │I  │在行首插入文本      │
    ├──┼────────────┤
    │a  │在当前字符后添加文本  │
    ├──┼────────────┤
    │A  │在行末添加文本     │
    ├──┼────────────┤
    │o  │在当前行后面插入一空行 │
    ├──┼────────────┤
    │O  │在当前行前面插入一空行 │
    ├──┼────────────┤
    │R  │以改写方式输入文本   │
    └──┴────────────┘
    二、移动光标
    ┌─────┬───────────┐
    │命令   │描述         │
    ├─────┼───────────┤
    │j或下箭头 │向下移动一行     │
    ├─────┼───────────┤
    │k或上箭头 │向上移动一行     │
    ├─────┼───────────┤
    │h或左箭头 │左移一个字符     │
    ├─────┼───────────┤
    │l或右箭头 │右移一个字符     │
    ├─────┼───────────┤
    │w     │右移一个词      │
    ├─────┼───────────┤
    │W     │右移一个以空格分隔的词│
    ├─────┼───────────┤
    │b     │左移一个词      │
    ├─────┼───────────┤
    │B     │左移一个以空格分隔的词│
    ├─────┼───────────┤
    │0     │移到行首       │
    │Ctrl-F  │向前翻页       │
    ├─────┼───────────┤
    │Ctrl-B  │向后翻页       │
    ├─────┼───────────┤
    │nG    │到第n行        │
    ├─────┼───────────┤
    │G     │到最后一行      │
    └─────┴───────────┘
    三、替换文本
    ┌─────┬──────┐
    │命令   │描述    │
    ├─────┼──────┤
    │$     │到行尾   │
    ├─────┼──────┤
    │(     │到句子的开头│
    ├─────┼──────┤
    │)     │到句子的末尾│
    ├─────┼──────┤
    │{     │到段落的开头│
    ├─────┼──────┤
    │}     │到段落的末尾│
    └─────┴──────┘

    四、删除文本
    ┌───┬───────────┐
    │命令 │描述          │
    ├───┼───────────┤
    │r   │替换一个字符      │
    ├───┼───────────┤
    │c   │修改文本直到按下Esc健 │
    ├───┼───────────┤
    │cw  │修改下一个词      │
    ├───┼───────────┤
    │cnw  │修改接下来的n个词   │
    └───┴───────────┘
    五、文本编辑
    ┌──┬──────────────────────┐
    │命寺│描述                    │
    ├──┼──────────────────────┤
    │yy │将一行文本移到缺省缓冲区中          │
    ├──┼──────────────────────┤
    │yn │将下一个词移到缺省缓冲区中          │
    ├──┼──────────────────────┤
    │ynw │将后面的n个词移到缺省缓冲区中        │
    ├──┼──────────────────────┤
    │p  │如果缺省缓冲区中包含一行文本,则在当前   │
    │  │行后面插入一个空行井将缺省缓冲区中的声   │
    │  │容粘贴到这一行中;如果缺省缓冲区中包含   │
    │  │多个词,把这些词粘贴到光标的右边.     │
    ├──┼──────────────────────┤
    │P  │如果缺省缓冲区中包含一行文本,则正当前    │
    │   │行前面插入一个空行井将缺省缓冲区中的内    │
    │  │容粘贴到这一行中;如果缺省缓冲区中包含    │
    │   │多个词,把这些词粘贴到光标的左边    

      │
    └──┴──────────────────────┘
    六、保存退出
    ┌───────────┬───────────────┐
    │命令         │描述             │
    ├───────────┼───────────────┤
    │zz          │保存并退出          │
    ├───────────┼───────────────┤
    │:w filename      │写入文件            │
    ├───────────┼───────────────┤
    │:W          │写入文件           │
    ├───────────┼───────────────┤
    │:x          │保存(如果当前文件修改过)并退出│
    ├───────────┼───────────────┤
    │:q!          │不保存文件,直接退出      │
    ├───────────┼───────────────┤
    │:q          │退出vi            │

    VI常用技巧

    VI命令可以说是Unix/Linux世界里最常用的编辑文件的命令了,但是因为它的命令集众多,很多人都不习惯使用它,其实您只需要掌握基本命令,然后加以灵活运用,就会发现它的优势,并会逐渐喜欢使用这种方法。本文旨在介绍VI的一些最常用命令和高级应用技巧。

    一、基本命令介绍

    ---- 1.光标命令

    k、j、h、l——上、下、左、右光标移动命令。虽然您可以在Linux中使用键盘右边的4个光标键,但是记住这4个命令还是非常有用的。这4个键正是右手在键盘上放置的基本位置。
    nG——跳转命令。n为行数,该命令立即使光标跳到指定行。
    Ctrl+G——光标所在位置的行数和列数报告。
    w、b——使光标向前或向后跳过一个单词。
    ---- 2.编辑命令
    i、a、r——在光标的前、后以及所在处插入字符命令(i=insert、a=append、r=replace)。
    cw、dw——改变(置换)/删除光标所在处的单词的命令 (c=change、d=delete)。
    x、d$、dd——删除一个字符、删除光标所在处到行尾的所有字符以及删除整行的命令。
    ---- 3.查找命令
    ---- /string、?string——从光标所在处向后或向前查找相应的字符串的命令。
    ---- 4.拷贝复制命令
    ---- yy、p——拷贝一行到剪贴板或取出剪贴板中内容的命令。

    二、常见问题及应用技巧

    ---- 1.在一个新文件中读/etc/passwd中的内容,取出用户名部分。
    ---- vi file
    ---- :r /etc/passwd 在打开的文件file中光标所在处读入/etc/passwd
    ---- :%s/:.*//g 删除/etc/passwd中用户名后面的从冒号开始直到行尾的所有部分。
    ---- 您也可以在指定的行号后读入文件内容,例如使用命令“:3r /etc/passwd”从新文件的第3行开始读入 /etc/passwd的所有内容。
    ---- 我们还可以使用以下方法删掉文件中所有的空行及以#开始的注释行。
    ---- #cat squid.conf.default | grep -v ^$ | grep -v ^#

    ---- 2.在打开一个文件编辑后才知道登录的用户对该文件没有写的权限,不能存盘,需要将所做修改存入临时文件。
    ---- vi file
    ---- :w /tmp/1 保存所做的所有修改,也可以将其中的某一部分修改保存到临时文件,例如仅仅把第20~59行之间的内容存盘成文件/tmp/1,我们可以键入如下命令。
    ---- vi file
    ---- :20,59w /tmp/1

    ---- 3.用VI编辑一个文件,但需要删除大段的内容。
    ---- 首先利用编辑命令“vi file”打开文件,然后将光标移到需要删除的行处按Ctrl+G显示行号,再到结尾处再按Ctrl+G,显示文件结尾的行号。
    ---- :23,1045d 假定2次得到的行号为23和1045,则把这期间的内容全删除,也可以在要删除的开始行和结束行中用ma、mb命令标记,然后利用“:a,bd”命令删除。

    ---- 4.在整个文件的各行或某几行的行首或行尾加一些字符串。
    ---- vi file
    ---- :3,$s/^/some string / 在文件的第一行至最后一行的行首插入“some string”。
    ---- :%s/$/some string/g 在整个文件每一行的行尾添加“some string”。
    ---- :%s/string1/string2/g 在整个文件中替换“string1”成“string2”。
    ---- :3,7s/string1/string2/ 仅替换文件中的第3行到第7行中的“string1”成“string2”。
    ---- 注意: 其中s为substitute,%表示所有行,g表示global。

    ---- 5.同时编辑2个文件,拷贝一个文件中的文本并粘贴到另一个文件中。
    ---- vi file1 file2
    ---- yy 在文件1的光标处拷贝所在行
    ---- :n 切换到文件2 (n=next)
    ---- p 在文件2的光标所在处粘贴所拷贝的行
    ---- :n 切换回文件1

    ---- 6.替换文件中的路径。
    ---- 使用命令“:%s#/usr/bin#/bin#g”可以把文件中所有路径/usr/bin换成/bin。也可以使用命令“:%s//usr/bin//bin/g”实现,其中“”是转义字符,表明其后的“/”字符是具有实际意义的字符,不是分隔符。





    V1. 默认字符编码为utf8,打开使用gb2312编码的文件,中文全为乱码,如何恢复正常显示?
    输入 edit ++enc=cp936

    V2. 如何在vim系统中执行命令?
    输入 !cmd

    V3. 使用vim直接打开并编辑.*gz文件,而无须解压,读取,编辑,再压缩.
    压缩文件的支持是通过plugin
    vim ls-lrR.txt.gz
    V4. 如何Vim支持语法加亮?
    一劳永逸的方法,在~/.vimrc中增加如下语句
    syntax on
    临时性的方法, 输入命令:syntax on
    V5. Vim如何在结构文档中快速切换,比如 C语言{ }块之间切换.
    输入在{}之间,输入%即可

    V6. 如何让Vim记下我的编辑状态,以便下次快速恢复工作?
    输入 :mksession file_name_your_session

    V7. 如何让Vim告诉你编辑文件的字节数,字数,当前位置信息?
    输入 g CTRL_G

    V8. 输入help,打开了帮助窗口,如何快速关闭?
    输入CTRL-W ,然后再输入CTRL-Q,
    或者输入CTRL-W q

    V9. 我要每天编辑日志,我不想去输入日期与时间,该怎么办?
    现要如这样的日期形式Mon Sep 19 23:19:03 CST 2005,简单,定义
    一个快捷键F2,在vim中做这样一个映射
    :map gg:read !date


    V10. 如何使用Vim改变文本文件的编码?
    比如,原有1个文档为utf-8编码的,现在要将它改为cp936编码,可用如下指令
    :set fileencoding=cp936
    然后再保存文件:w

    V11. 如何将vim记住我的配置选项(比如默认的编码方式,文件类型等)?
    请将你的配置命令写到~/.vimrc配置脚本文件中

    V12. 如何查看当前编辑的C/C++源文件所有include文件路径?
    输入:checkpath

    V13. 如何保存全局的配置选现(对所有用户都可用)?
    先输入:version, 查看系统vimrc配置文件的值
    再编辑系统vimrc配置文件,加入你想要vim执行的命令

    V14. 如何快速复制Buffer中的一行文字?
    输入yy先记录到缓冲区, 移动光标到想要粘贴处,按p

    V15. 如何利用宏命令,生成数字顺序列表?
    1. Create the first list entry, make sure it starts with a number.
    2. qa - start recording into buffer ‘a’
    3. Y - yank the entry
    4. p - put a copy of the entry below the first one
    5. CTRL-A - increment the number
    6. q - stop recording
    7. @a - repeat the yank, put and increment times


    V16. 如何实现文本的折叠(Fold)?
    自动Fold,假设你的文件是C源文件,输入
    :set foldmethod=indent
    :set foldenable
    手动Fold,选中你要折的行,在Normal模式下
    输入命令 zf
    当Fold创建后,移动光标到Fold所在行
    输入 zo, 打开相应的Fold
    zc, 关闭相应的Fold
    zM, 关闭文件中所有的Fold
    zR, 打开文件中所有的Fold
    za, 自动打开或关闭相应的Fold
    V17. 如何查看当前文件中的字,字符个数?
    输入g CTRL-G 即可,所有字节数按UTF-8的形式进行计数.

    V18. 如何在Visual模式下快速搜索当前选中的文字?
    为了不改变用户使用习惯,我们依然沿用*和#这两键
    vnoremap * y/“
    vnoremap # y?“
    注: 指令插入命名寄存器的内容


    V19. 如何在源代码中不同块/段落间来回跳跃?
    输入 { , 前进至上一段落
    输入 } , 前进至后一段落

    V20. 如何文本中的TAB转化为固定长度的空格?
    输入 :set expandtab
    输入 :set tabstop=4
    输入 :retab

    V21. vim中paste剪贴板中的数据如何让它不缩进,保持原格式?
    paste时,输入的文本大多会包含换行字符,还有一些特殊字符,vim会自动对文本缩进,并
    且自动换行等,为了避免这些智能选项的影响,可以把paste开关打开

    V22. 有趣的几个功能
    gg 到文件首
    gd 到变量声明
    gg=G 全篇自动缩进 , =G 单行缩进
    K(shift+k) man
    crl+] 函数原型处 crl+t 回 ( ctags )
    ctl+p 自动补全( 编辑状态 )
    :X 加密保存( 要输入密码 )
    使用说明:
    以下的例子中 xxx 表示在命令模式下输入 xxx 并回车
    以下的例子中 :xxx 表示在扩展模式下输入 xxx 并回车
    小括号中的命令表示相关命令.

    在编辑模式或可视模式下输入的命令会另外注明.

    1. 查找

    /xxx(?xxx) 表示在整篇文档中搜索匹配xxx的字符串, / 表示向下查找, ? 表示向上查找.其中xxx可以是正规表达式,关于正规式就不多说了.
    一般来说是区分大小写的, 要想不区分大小写, 那得先输入
    :set ignorecase
    查找到以后, 再输入 n 查找下一个匹配处, 输入 N 反方向查找.
    *(#) 当光标停留在某个单词上时, 输入这条命令表示查找与该单词匹配的
    下(上)一个单词. 同样, 再输入 n 查找下一个匹配处, 输入 N 反方
    向查找.
    g*(g#) 此命令与上条命令相似, 只不过它不完全匹配光标所在处的单词, 而
    是匹配包含该单词的所有字符串.
    gd 本命令查找与光标所在单词相匹配的单词, 并将光标停留在文档的非
    注释段中第一次出现这个单词的地方.
    % 本命令查找与光标所在处相匹配的反括号, 包括 () [] {}
    f(F)x 本命令表示在光标所在行进行查找, 查找光标右(左)方第一个x字符.
    找到后:
    输入 ; 表示继续往下找
    输入 , 表示反方向查找

    2. 快速移动光标
    在 vi 中, 移动光标和编辑是两件事, 正因为区分开来, 所以可以很方便的进行光标定
    位和编辑. 因此能更快一点移动光标是很有用的.
    w(e) 移动光标到下一个单词.
    b 移动光标到上一个单词.
    0 移动光标到本行最开头.
    ^ 移动光标到本行最开头的字符处.
    $ 移动光标到本行结尾处.
    H 移动光标到屏幕的首行.
    M 移动光标到屏幕的中间一行.
    L 移动光标到屏幕的尾行.
    gg 移动光标到文档首行.
    G 移动光标到文档尾行.
    c-f (即 ctrl 键与 f 键一同按下) 本命令即 page down.
    c-b (即 ctrl 键与 b 键一同按下, 后同) 本命令即 page up.
    ” 此命令相当有用, 它移动光标到上一个标记处, 比如用 gd, * 等查
    找到某个单词后, 再输入此命令则回到上次停留的位置.
    ‘. 此命令相当好使, 它移动光标到上一次的修改行.
    `. 此命令相当强大, 它移动光标到上一次的修改点.

    3. 拷贝, 删除与粘贴
    在 vi 中 y 表示拷贝, d 表示删除, p 表示粘贴. 其中拷贝与删除是与光标移动命令
    结合的, 看几个例子就能够明白了.
    yw 表示拷贝从当前光标到光标所在单词结尾的内容.
    dw 表示删除从当前光标到光标所在单词结尾的内容.
    y0 表示拷贝从当前光标到光标所在行首的内容.
    d0 表示删除从当前光标到光标所在行首的内容.
    y$ 表示拷贝从当前光标到光标所在行尾的内容.
    d$ 表示删除从当前光标到光标所在行尾的内容.
    yfa 表示拷贝从当前光标到光标后面的第一个a字符之间的内容.
    dfa 表示删除从当前光标到光标后面的第一个a字符之间的内容.
    特殊地:
    yy 表示拷贝光标所在行.
    dd 表示删除光标所在行.
    D 表示删除从当前光标到光标所在行尾的内容.
    关于拷贝, 删除和粘贴的复杂用法与寄存器有关, 可以自行查询.

    4. 数字与命令
    在 vi 中数字与命令结合往往表示重复进行此命令, 若在扩展模式的开头出现则表示行
    号定位. 如:
    5fx 表示查找光标后第 5 个 x 字符.
    5w(e) 移动光标到下五个单词.
    5yy 表示拷贝光标以下 5 行.
    5dd 表示删除光标以下 5 行.
    y2fa 表示拷贝从当前光标到光标后面的第二个a字符之间的内容.
    :12,24y 表示拷贝第12行到第24行之间的内容.
    :12,y 表示拷贝第12行到光标所在行之间的内容.
    :,24y 表示拷贝光标所在行到第24行之间的内容. 删除类似.

    5. 快速输入字符
    在 vi 中, 不要求你输入每一个字符, 可以有很多种方法快速输入一些字符.
    使用 linux/unix 的同学一定有一个经验, 在命令行下输入命令时敲入头几个字符再按
    TAB 系统就会自动将剩下的字符补齐, 假如有多个匹配则会打印出来. 这就是著名的命令
    补齐(其实windows中也有文件名补齐功能). vi 中有许多的字符串补齐命令, 非常方便.
    c-p(c-n) 在编辑模式中, 输入几个字符后再输入此命令则 vi 开始向上(下)搜
    索开头与其匹配的单词并补齐, 不断输入此命令则循环查找. 此命令
    会在所有在这个 vim 程序中打开的文件中进行匹配.
    c-x-l 在编辑模式中, 此命令快速补齐整行内容, 但是仅在本窗口中出现的
    文档中进行匹配.
    c-x-f 在编辑模式中, 这个命令表示补齐文件名. 如输入:
    /usr/local/tom 后再输入此命令则它会自动匹配出:
    /usr/local/tomcat/
    abbr 即缩写. 这是一个宏操作, 可以在编辑模式中用一个缩写代替另一个
    字符串. 比如编写Java文件的常常输入 System.out.println, 这很
    是麻烦, 所以应该用缩写来减少敲字. 可以这么做:
    :abbr sprt System.out.println
    以后在输入sprt后再输入其他非字母符号, 它就会自动扩展为System.
    out.println

    6. 替换
    替换是 vi 的强项, 因为可以用正规表达式来匹配字符串.以下提供几个例子.
    :s/aa/bb/g 将光标所在行出现的所有包含 aa 的字符串中的 aa 替换为 bb
    :s//bb/g 将光标所在行出现的所有 aa 替换为 bb, 仅替换 aa 这个单词
    :%s/aa/bb/g 将文档中出现的所有包含 aa 的字符串中的 aa 替换为 bb
    :12,23s/aa/bb/g 将从12行到23行中出现的所有包含 aa 的字符串中的 aa 替换为 bb
    :12,23s/^/#/ 将从12行到23行的行首加入 # 字符
    :%s= *$== 将所有行尾多余的空格删除
    :g/^s*$/d 将所有不包含字符(空格也不包含)的空行删除.


    7. 多文件编辑
    在一个 vim 程序中打开很多文件进行编辑是挺方便的.
    :sp(:vsp) 文件名 vim 将分割出一个横(纵)向窗口, 并在该窗口中打开新文件.
    从 vim6.0 开始, 文件名可以是一个目录的名称, 这样, vim 会
    把该目录打开并显示文件列表, 在文件名上按回车则在本窗口打
    开该文件, 若输入 O 则在新窗口中打开该文件, 输入 ? 可以看
    到帮助信息.
    :e 文件名 vim 将在原窗口中打开新的文件, 若旧文件编辑过, 会要求保存.
    c-w-w vim 分割了好几个窗口怎么办? 输入此命令可以将光标循环定位
    到各个窗口之中.
    :ls 此命令查看本 vim 程序已经打开了多少个文件, 在屏幕的最下方
    会显示出如下数据:
    1 %a “usevim.html” 行 162
    2 # “xxxxxx.html” 行 0
    其中:
    1 表示打开的文件序号, 这个序号很有用处.
    %a 表示文件代号, % 表示当前编辑的文件,
    # 表示上次编辑的文件
    “usevim.html” 表示文件名.
    行 162 表示光标位置.
    :b 序号(代号) 此命令将指定序号(代号)的文件在本窗口打开, 其中的序号(代号)
    就是用 :ls 命令看到的.
    :set diff 此命令用于比较两个文件, 可以用
    :vsp filename
    命令打开另一个文件, 然后在每个文件窗口中输入此命令,就能看
    到效果了.

    8. 宏替换
    vi 不仅可以用 abbr 来替换文字, 也可以进行命令的宏定义. 有些命令输起来很费劲,
    因此我把它们定义到 - 上, 这样就很方便了.这些配置可以预先写到 ~/.vimrc
    (windows 下为 $VIM/_vimrc) 中, 写进去的时候不用写前面的冒号.
    :nmap :nohls 取消被搜索字串的高亮
    :nmap w 命令模式下转移光标到不同窗口
    :imap 输入模式下运行
    :nmap :%s= *$== 删除所有行尾多余的空格.
    :imap 同上
    :java 中: (注, 这里为什么说 java 中, 因为以下定义对其他文件格式不起作用, 下文
    会说到如何实现这一点)
    :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 才行.
    :nmap :cl 此命令用于查看所有的编译错误.
    :imap
    :nmap :cc 此命令用于查看当前的编译错误.
    :imap
    :nmap :cn 此命令用于跳到下一个出错位置.
    :imap
    :nmap :cp 此命令用于跳到上一个出错位置.
    :imap
    :nmap :JavaBrowser
    此命令用于在窗口左部分割出一个新窗口, 里面的内容是 java 的资源树, 包括
    本文件中出现的类, 类的成员变量及成员方法, 就好像 JCreator 表现的那样.
    在这个窗口中输入 ? 会看到帮助. 嘿嘿, 很好用, 不过需要 ctags 支持.
    :imap

    9. TAB
    TAB 就是制表符, 单独拿出来做一节是因为这个东西确实很有用.
    << 输入此命令则光标所在行向左移动一个 tab.
    >> 输入此命令则光标所在行向右移动一个 tab.
    5>> 输入此命令则光标后 5 行向右移动一个 tab.
    :12,24> 此命令将12行到14行的数据都向右移动一个 tab.
    :12,24>> 此命令将12行到14行的数据都向右移动两个 tab.
    那么如何定义 tab 的大小呢? 有人愿意使用 8 个空格位, 有人用4个, 有的用2个.
    有的人希望 tab 完全用空格代替, 也有的人希望 tab 就是 tab. 没关系, vim 能
    帮助你.以下的设置一般也都先写入配置文件中, 免得老敲.
    :set shiftwidth=4 设置自动缩进 4 个空格, 当然要设自动缩进先.
    :set sts=4 即设置 softtabstop 为 4. 输入 tab 后就跳了 4 格.
    :set tabstop=4 实际的 tab 即为 4 个空格, 而不是缺省的 8 个.
    :set expandtab 在输入 tab 后, vim 用恰当的空格来填充这个 tab.

    10. autocmd
    这个命令十分的强大, 可以用这个命令实现对不同的文件格式应用不同的配置; 可以
    在新建文件时自动添加上版权声明等等. 这些命令一般定义在 ~/.vimrc 这样的配置文件
    里面. 由于他很强大, 所以我不能给出很具体的说明, 只能举几个例子, 详细的请看帮助.
    :autocmd! 删除所有之前的自动命令.
    autocmd FileType java source ~/.vim/files/java.vim
    autocmd FileType java source ~/.vim/files/jcommenter.vim
    以上两条命令让我在打开 java 文件时才应用后面提到的两个配置文件.
    autocmd BufNewFile *.java 0r ~/.vim/files/skeletons/java.skel
    以上这条命令让我在新建 java 文件时自动加入 java.skel 文件的内容.
    autocmd BufNewFile *.java normal gnp
    以上这条命令让我在新建 java 文件时自动运行 gnp 命令, 这个命令进行一些特殊化
    处理, 比如将新 java 文件中的 __date__ 替换成今天的日期什么的.

    11. 常用脚本
    在 vim.sf.net 你可以发现很多脚本(script), 这些脚本常常有让你意想不到的作用.
    我常用的有:
    jcommenter.vim 自动加入 javadoc 风格的注释.
    JBrowser.vim 类资源浏览. C, C++ 等可以用 Tlist
    还有许多有用的, 比如 checkstyle.vim 可以检验你的编程风格, jad.vim 可以直接
    反编译 .class 文件等等.

    12. 常用配置
    在~/.vimrc 配置文件中你常常需要一些个性化配置. 比如上面写的一些宏定义, 一些
    autocmd 定义等等. 比如:
    set suffixes=.bak,~,.o,.h,.info,.swp,.aux,.bbl,.blg,.dvi,.lof,.log,.lot,.ps,.toc
    这样在vim中打开文件时, 按 tab 键补齐文件名时它会忽略上述文件.
    set nu 显示行号
    set ai 设置自动缩进
    map Y y$ 让 Y 和 D 一样, 要不然 Y 的本意和 yy 一样.

    13. 其他
    还有许多有意思的命令, 记录在这里免得忘记.
    . 重复上次编辑命令.
    :g/^/exec “s/^/”.strpart(line(”.”).” “, 0, 4) 在行首插入行号
    :runtime! syntax/2html.vim 转换 txt 成 html, 会按照你的
    颜色配置来转
  • 相关阅读:
    《Machine Learning in Action》—— 白话贝叶斯,“恰瓜群众”应该恰好瓜还是恰坏瓜
    《Machine Learning in Action》—— 女同学问Taoye,KNN应该怎么玩才能通关
    《Machine Learning in Action》—— Taoye给你讲讲决策树到底是支什么“鬼”
    深度学习炼丹术 —— Taoye不讲码德,又水文了,居然写感知器这么简单的内容
    《Machine Learning in Action》—— 浅谈线性回归的那些事
    《Machine Learning in Action》—— 懂的都懂,不懂的也能懂。非线性支持向量机
    《Machine Learning in Action》—— hao朋友,快来玩啊,决策树呦
    《Machine Learning in Action》—— 剖析支持向量机,优化SMO
    《Machine Learning in Action》—— 剖析支持向量机,单手狂撕线性SVM
    JVM 字节码指令
  • 原文地址:https://www.cnblogs.com/baobeiqi-e/p/9884774.html
Copyright © 2011-2022 走看看