• VI 操作技巧


    1,如何在文档中插入另一个文档
    :r <filename>

    2,如何把编辑的文档转换成html
    :TOhtml

    3,如何调用外部程序,并把输出的结果定向到一个新的文档中
    :split +enew | r ! <command>

    4,如何在文档中用一个单词替换不同的单词(一次替换多个字符串)
    :%s/word1/|word2/|word3/newword/g      #全文替换
    :s/word1/|word2/|word3/newword/g       #光标所在行替换

    5,如何得到文件的16进制编码
    :%!xxd
    可以用
    :%!xxd 来还原

    6,显示不可见的字符
    :set list 
    :set nolist

    7,删除,复制,...到指定的位置
    先指定位置
    m<char-set>   #作上标记
    d<char-set>   #删从光标到指定的位置
    y<char-set>   #复制

    8,如果却掉用gvim打开事的~文件
    :set nobackup 
    当然也可以把这一句加到~/.vimrc文件中

    9,如何在插入模式下,进行命令模式下的操作
    :<Ctrl+o> 

    10,如何统一缩进的格式
    indent -kr -i8n <input-file>
    其中的8是要缩进的半字节数

    11,删除包含特定单词的行
    :g/word/d
    思考一下g命令的其他的用法

    12,如何按一个键注释一行,一段...
    map <F2> ^i/*<ESC>$a*/<ESC>    #这样按下<F2>就可以注释掉一行了
    发散开来,如何按一个(几个)键来删除/修改/匹配/补全...一行,一段等
    :h map

    13,如何注释掉多行(有多种方法)
    1) sed -e 'n,m s/^/#/g' <filename> > <outputfile>
    2) 


    14,如何删除{}等括号里的行
    :di{
    :diB

    15,关闭打开的多个缓冲区中的一个
    :[N] bw
    N是第几个缓冲区,更加详细的情况请见:
    :h bw

    16,不退出insert模式,而对文本进行操作
    :<C-O> dFa   #删除到字母a的文本

    17,向打开的文件列表中加入新文件
    :args <Ctrl+R>% file1 file2 <Enter>
    思考: 如何从列表中删除文件

    18,//回车后下一行的起始处自动添加 //
    /*回车后,下一行的起始处自动添加* 
    :set fo=r        #添加
    :set fo-=r       #取消


    19,如何去掉windows下留下的^M字符
    :%s/^M$//

    20,如何把光标移到函数的末尾
    ][

    21,在函数之间跳转的快捷方式
    [[  用来跳到光标前面的一个函数开始处。
        如果光标在函数体内的话,那就是所在函数的开始处。
    ][  用来跳到光标后面的一个函数结尾处。
        如果光标在函数体内的话,那就是所在函数的结尾处。
    ]]  用来跳到光标后面的一个函数开始处。
        如果光标在函数体内的话,那就是下一个函数的开始处。
    []  用来跳到光标前面的一个函数结尾处。
        如果光标在函数体内的话,那就是上一个函数的结尾处。


    ----------page 66----------

    22,自动缩进的选项
    set autoindent
    set cindent

    23,如何查看组合键的映射值
    :h function_key

    24,搜索高亮显示
    :h hlsearch
    :h nohlsearch

    25,一个供参考的.vimrc
    贴个vimrc供参考

    set tabstop=2
    set number
    set autoindent
    set tabstop=4
    set tabstop=4
    set shiftwidth=4
    set incsearch
    set encoding=gb2312
    set fileencodings=ucs-bom,utf-8,gb2312,big5,latin1
    set fileencoding=gb2312
    set termencoding=gb2312
    set background=dark


    26,自动补全括号
    :iab ( ()
    详细信息请阅读:h iab


    27,如何删除所有的偶数行
    <ESC>;ggqajddq10000@a
    假设你的文本有不到 20000 行,那么输入以上的命令就可以删除所有的偶数行。
    详解:h q ; h a; h @a

    28,如何隔两行插入一个空格
    ggqajo<ESC>;jq1000@a
    详解: :h q   :h a  :h @a

    29,
    如果文件格式:
    1-01......
    1-02.............
    1-03..
    2-01.....
    2-02....
    .
    .
    .
    在vim中如何实现:

    1-01......1-01
    1-02.............1-02
    1-03..1-03
    2-01.....2-01
    2-02....2-02
    .
    .
    .

    : %s//(/d/+-/d/+/)/(.*/)$//1/2/1/

    30,绕行设置wrap
    :h wrap

    31,匹配一个单词
    //<word/>

    32,文件编码的乱码问题
    :h encoding
    :h fileencoding=utf-8


    33,原帖由 "weismart" 发表:
    我是想在vi中对同一行不同位置的逗号做不同的替换
    行1、“kk,789,中国人,日本鬼,美国佬"
    行2、“test,鸡,鸭蛋,臭屁,7788“
    行3、等等
    对第一行这个串,我想把第一个“,”换成“‘,”,
    第二个逗号换成..........

    :%s//(.*/),/(.*/),/(.*/),//1/',/2/',/3/'/g

    34,自动缩进的空格数设定
    :h shiftwidth

    35,一次注释多行
    ctrl+v

    //
    <Esc>

    36,怎么才能让vi把.sqc的文件用c的语法高亮呢?当然在打开后可以用
    set filetype=c..........

    在.vimrc中加入
    au BufNewFile,BufRead *.sqc,*.sqf   setf c

    37,sbuffer



    38,
    简单总结一下modeline:

    1、适用场合
        当你想对某个文件进行特殊的设置而又不想影响其它文件,因此并不打算在
        .vimrc里面修改这些设置的时候。
       
    2、modeline有两种格式:
       (1)第一种格式:

    [Copy to clipboard] [ - ]
    CODE:
        [text]{white}{vi:|vim:|ex:}[white]{options}
       
        [text]          随便什么文本,或者空白。
        {white}         至少一个空格或tab。
        {vi:|vim:|ex:}  后面三个字符串之一,"vi:", "vim:" 或 "ex:"。
        [white]         可有也可无的空格。
        {options}       被set的选项列表,用冒号':'分隔。

    举例:
               vi:noai:sw=3 ts=6
               /* vim:tabstop=8:expandtabs:shiftwidth=8 */
               
        (2)第二种格式:

    [Copy to clipboard] [ - ]
    CODE:
        [text]{white}{vi:|vim:|ex:}[white]set {options}:[text]

        [text]          随便什么本文,或者空白。
        {white}         至少一个空格或tab。
        {vi:|vim:|ex:}  后面三个字符串之一,"vi:", "vim:" or "ex:"。
        [white]         可有也可无的空格。
        set             字符串"set " (注意set后面的那个空格不可少)。
        {options}       选项列表,用空格分开。
        :               一个冒号。
        [text]          随便什么文本,或者空白。

    举例:
            /* vim: set ai tw=75: */
            /* vim: set shiftwidth=4 autoindent : */
            
    3、注意:
       vi:或vim:或ex:前面的那个空格不可少,这可以最大限度地避免误判。但,
       vi:和vim:可以直接放在行首,而ex:不行。
       
    4、带版本的modeline:
       用法一目了然,所用数字为实际版本号乘以100。
            vim600:      版本大于等于6.0
            vim<600:     版本小于6.0
            vim=600:     版本等于6.0
            vim>;600:     版本大于6.0
            
    5、两种格式的区别:
       对于第一种格式,一旦识别,该行剩余部分都将被使用,因此,这样的写法
       /* vi:ts=4: */
       将因为后面的*/而出错。
       而采用第二种格式就没有这个问题了,因为它将显式地以一个冒号结束。
       /* vi:set ts=4: */
       
    6、modeline写在哪儿?
       vim只会在一个文件的前modelines行和后modelines行中寻找modeline命令
       模式,modelines的默认值是5。
       
    7、modeline的开关是什么?
       开:set modeline
       关:set nomodeline
       事实上,set modelines=0 的效果和set nomodeline是一样的。

    39,替换掉文件中的M控制字符

    :%s/^M/回车/g

    这里的^M是Ctrl + v 之后再Ctrl + m ;
    这里的回车是Ctrl + v 之后再回车。


    40,删除括号中的内容{},[],()
    di} 或 di]  只删除括号中间的内容
    da} 或 da]  连括号一起删除
    diB

    详解: man d

    41,vsp 分割窗口后调整窗口的大小

    详解: :h vsp

    42, 插入换行
    1,2,3,

    s/,/, /g

    43,如何进行快速粘贴

    yM
    yH
    yL


    *查看所有的影射的键值
    :h function_key


    *如何把文件反转
    :g/^/m0

    小结 : 
    (1)使用了g命令 
    (2)使用了m : move 命令 
    试想把现在的每一行都移动到文档的第一行,整个文件会怎么样。
    思考:我们可以用g命令来对某些特定的行做上表记,也可以反转这些行;我们可以利用可以利用m命令来移动任意的文本,和任意位置的文本,对于我们编辑文本来说十分的方便。

    *------------------------vim中寄存器的使用-------------------------
    :h q
    :h @

    在编辑文件时我们时常会有一些重复的操作,这时就可以使用寄存器。其用法如下:
    q{0-9a-z".=*}    #按下q再按下{}号中的数字或字母
    ......一系列操作
    q
    N@{0-9a-z".=*} #按下n一个数值键,用来表示你想要你以前的操作执行多少次。最后一个字符是你第一次按下的键。

    -----------------------------end----------------------------------

    *vim中的文档排版命令
    :[range]ce
    :[range]ri
    :[range]le

    *vim大小写的变化(以下均为按键)
    一个字符大小写: ~
    一个单词变大小写: g~w
    一行变大小写: g~g~
    高亮选择的范围:{visual}~ 
    高亮选中范围全变大写:{visual}U
    高亮选中范围全变小写:{visual}u
    当前行全变大写:gUU / gUgU
    当前行全变小写:guu / gugu

    *去掉$符号
    %s//n//g

    ---------------------------查找相关---------------------------------
    *在实用/匹配时忽略大小写
    //cab   #这里将匹配ab AB Ab aB 等

    *匹配多个模式
    //cthis /| that  #匹配this或that 忽略大小写

    -----------------------------end----------------------------------

    *删除文件中的空行?

    ::g/^[[:blank:]]*$/d

  • 相关阅读:
    简单了解winform
    SqL语句基础之增删改查
    数据库之表
    数据库基本概念与操作
    搞死人不偿命的 Bank系统
    for的循环题
    .net framework 版本汇总
    LinqToEntity模糊查询的方法选择
    日常工作中的点滴:C# 根据字节长度截包含中文的字符串
    64位系统 IIS中应用程序池设置导致 访问数据库错误
  • 原文地址:https://www.cnblogs.com/rockchip/p/3256253.html
Copyright © 2020-2023  润新知