LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1266|回复: 4

帮忙看看这些资料-vim

[复制链接]
发表于 2003-7-26 21:47:53 | 显示全部楼层 |阅读模式
花了三天时间看完了中文在线文档,copy出来的。
想打印出来,怕有什么错误或者遗漏,
所以请大家先看看,找找错误。谢谢了!

我把它分为了两个部分,这是第一部分。

vi 常用用法
说明,所有命令都不包括“”,如果是“"”(半角双引号),则是一个命令字符,请注意区分。

插入:
“i”从光标所在位置前开始
“I”光标移到当前行的行首,然后在其前插入文本
“a”光标当前所在位置之后追加新文本
“A”命令将把光标挪到所在行的行尾
“o”在当前行的下面插入新行
“O”在当前行的上面插入新行

一.移动
(1). 按字移动光标的命令
   在Vi中,"字"有两种含义:一种是广义的字,它可以是两个空格之间的任何内容。
   如:{int k;它只有2个字,一个是{int ,另一个是k;
   另一种字是狭义上的字,在此种意义之下,英文单词、标点符号和非字母字符(如$、%、^、&、*、(、)、-、+、{、}、[、]、~、|、\、<、>、/等)均被当成是
   一个字。上面那一行中就包括{、int、k、;这4个字。
   Vi中使用大写命令一般就是指将字作为广义来对待,使用小写命令就是作为狭义对待。
   1. w和W命令:将光标右移至下一个字的字首,它们的区别是:w命令,把光标移到下一个字(狭义)的字首,W命令,将把光标移到下一个字(广义)的字首。
   2. e和E命令:如果光标起始位置处于字内(即非字尾处),则该命令将把光标移到本字字尾;如果光标起始位置处于字尾,则该命令将把光标移动到下一个字的字尾。
   3. b和B命令:如果光标处于所在字内(即非字首),则该命令将把光标移至本字字首;如果光标处于所在字字首,则该命令将把光标移到上一个字的字首。

(2). 按句移动光标的命令
  在Vi中,句子被定义为以逗号(,)、句号(.)、问号(?)和感叹号(!)结尾,且其后面跟着至少两个以上(含两个)空格(外国人使用打字机留下的习惯)或一个换行符的字符序列。这个定义和习惯的用法有很大出入,注意使用。
   1.( 命令:将光标移至上一个句子的开头;
   2. )命令:将光标移至下一个句子的开头。

(3). 按段移动光标的命令
   在Vi中,一个段被定义为是以一个空白行开始和结束的片段。
   1. { 命令:将光标向前移至上一个段的开头;
   2. } 命令:将光标向后移至下一个段的开头。

(4). 滚屏命令
   CTRL+U 将屏幕向前(文件头方向)翻滚半屏;提示:u表示 up;
   CTRL+D 将屏幕向后(文件尾方向)翻滚半屏。提示:d表示 down;
      可以在这两个命令之前加上一个数字n,则屏幕向前或向后翻滚n行。并且这个值被系统记住,以后再用CTRL+U 和CTRL+D 命令滚屏时,还滚相应的行数。
   CTRL+F 将屏幕向文件尾方向翻滚一整屏(即一页);提示:f表示 forward;
   CTRL+B 将屏幕向文件首方向翻滚一整屏(即一页)。提示:b表示 backward;
      同样也可以在这两个命令之前加上一个数字n,则屏幕向前或向后移动n页;
   CTRL+E 将屏幕向上滚动一行;
   CTRL+Y 将屏幕向下滚动一行。

(6). 移动到行首或行尾
  “$”命令把光标移动到当前行行尾。如果你的键盘上有<End>键,也可以完成相同的功能。
  “^”命令把光标移动到当前行的第一个非空字符,
  “0”命令则移到一行的第一个位置, <Home>键也可以完成相同的功能。
  “$”命令接受个数前缀。1$表示:移动到当前行的行尾;2$表示:移动到下一行的行尾;如此类推。
   "0”和“^”不接受个数前缀。

(7). 移动到一个特定的字符
   “fx”命令向前查找本行中的单字符x,并把光标移动到字符x上。提示:“f”表示“Find”。
   “Fx”命令用于向左查找,“fx”命令的反向版本。
   “tx”命令把光标移动到目标字符的前一个字符上。提示:“t”表示“To”。
   “Tx”"tx"命令的反向版本,移动到字符的后面。
    可以在这四个命令前面加数字前缀。
    "fF"命令可以通过“;”命令重复,“,”命令则用于反向重复。用于“tT"命令会出现正确而愚蠢的问题。
(8). 括号匹配
   “%”是一个非常方便的命令,它能匹配一对括号(即“( )”,“[ ]”,“{ }”)。
    如果光标在“(”上,它移动到对应的“)”上,反之,如果它在“)”上,它移动到“(”上。
    当光标不在一个有用的字符上,“%”会先向前找到一个,然后会移动到它的匹配处。
(9). 移动到特定的行
    “G” 命令把光标移动到文末;
    “gg”命令把光标移动到文首;
    “nG”命令把光标移动到第n行的第一个空白字符上,可用“:set number<Enter>”来显示行号,用“:set nonumber<Enter>”来关闭显示;
    “n%" 命令以百分数来移动光标;
    “H” 命令把光标移动到屏幕的第一行;
    “M” 命令把光标移动到屏幕的中间行;
    “L” 命令把光标移动到屏幕的最后一行;
            提示:“H”表示“Home”,“M”表示“Middle”而“L”表示“Last”。
(10). 使用记号(mark)
     当用“G”命令跳到另一个地方,Vim会记住你从什么地方跳过去的,这个位置成为一个记号(mark)。可以成为记号的还有查找命令:“/”和“?”,而"ftwehjkl"命令不是。
     要回到原来的地方,使用如下命令: `` (两个反引号,<Tab>的上方);
     如果再次执行这个命令你会跳回去原来的地方;
     CTRL-O命令跳到一个“较老”的地方(提示:O表示older);
     CTRL-I命令跳到一个“较新”的地方(提示:I在键盘上仅靠着O);
    “mx”命令可以标记当前的光标位置,x可以是任意一个小写字母(a-z);
    “`x”命令跳到你定义的标记处,x是你用mx命令定义的标记;
    “'x”(单引号加上一个标记)跳到标记所在行的行首,注意和上一个命令区别开。

    复制,删除,移动

(一). 删除功能
    “dd” --删除一行;
    “D”  --删除到行尾,即“d$”;
    “x”  --删除光标所在字符,即“dl”;
    “X”  --删除光标左边的字符,即“dh”;
    “dw” --从当前位置删除到下一个单词开头;
    “daw”--删除光标上的单词(包括空白字符);
    “dG” --删除到文末;
    “dgg”--删除到文首;
   
(二). 修改文本
    “c”命令表示修改,即change。它的作用与“d”操作符相似,只是完成后会切换到插入模式;
    “cw”--修改一个单词;
    “C” --修改到行尾,即“c$”;
    “s” --修改一个字符,即“cl”;
    “S” --修改一整行,即“cc”;
   
(三). 重复一个修改
    “.”是Vim中一个非常简单而有用的命令。
    它重复最后一个除“u”(undo),CTRL-R(redo)和冒号命令外的修改操作。
   

(四). 可视模式
     用“v”命令启动可视模式:移动光标到需要的地方,选中的文本会被高亮显示。最后执行“操作符”命令,如删除命令“d”,复制命令“y”。
     用“V”命令,对整行做选中操作,这时“h”,“l”会不起作用。
     用“CTRL+V”命令处理一个矩形块内的文本。在使用块可视模式的时候,会有四个角,“o”命令把光标移动到对角上;而“O”则能移到同一侧的角上。
     技巧:“~”来改变选中文本的大小写;
               “u”全部变为小写;                
               “U”全部变为大写。
           “J”合并选中的行。

(五). 复制文本
     剪切:先用“d”,“x”或者其他命令删除文本的时候,这些文字会被保存起来。然后用“p”命令把文字重新粘贴出来(提示:p表示put)。
     复制,粘贴:先用“y”命令,然后用“p”命令粘贴出来。提示:“y”即Yank。
          “yy” --复制一行;
          “Y”  --也时复制一整行;
          “y$” --复制到行尾;
          “yw” --复制一个词。这几个都可以加上数字前缀;
     技巧:用可视模式来选择文本,简单直观。
     提示:“y”“p”可以是不同文件。

     使用寄存器复制文件
     寄存器是Vim用来保存文本的地方。用一个小写字母表示来表示寄存器。
     比如:“"fyas”,复制一个句子到寄存器f 中。
     “"fp”,使用寄存器f。
     
     编辑多个文件

(一). 编辑另一个文件
     “:edit xxx”  :关闭当前文件,打开另一个;
     “:edit! xxx” :不保存当前文件,打开另一个;
     “:hide edit xxx”:编辑另一个文件,但是不马上保存当前文件,只是隐藏它;
(二). 同时打开多个文件
     “vi xxx1 xxx2 xxx3”,打开三个文件;
     “:next”“:next!”“:wnext”,编辑下一个文件;
     “:previous”“:previous!”“:wprevious”,编辑前一个文件;
             提示:可以加数字前缀。
(三). 在文件中快速跳转
     <CTRL+^>(在英美式键盘中,^ 在6的上面):跳到上一个的文件,再用这个命令就会跳回来;
     “`"”:跳转到上次离开这个文件时的位置;
     “`.”:跳转到最后一次修改文件的位置;
      使用文件标记:“mX”和“`X”命令,以及用CTRL+I 和 CTRL+O 来跳转;
              注意:这里的 X 必须是大写字母,表示全局。

        分割窗口

(一).
1.  分割窗口
     水平分割                   垂直分割
     :split                     :vsplit
     :split xxx                 :vsplit xxx
     :new                       :vnew   
   
2.  关闭窗口
    方法1,“:quit”和ZZ;
    方法2,“:close”命令,它可以避免剩下最后一个时退出vim;
    方法3,“nly”命令,关闭其他所有窗口;
   
3.  改变窗口大小
    要扩大窗口:“<CTRL+W> +”;
    要缩小窗口:“<CTRL+W> -”;
   
4.  窗口之间跳转
        CTRL-W w        用于在窗口间跳动
        CTRL-W h        跳转到左边的窗口
        CTRL-W j        跳转到下面的窗口
        CTRL-W k        跳转到上面的窗口
        CTRL-W l        跳转到右边的窗口

5.  用 vimdiff 显示区别
    方法1:从shell启动,比如:vimdiff main.c~ main.c
    方法2: 从vi中启动diff模式:“:vertical diffsplit xxx”,如果没用“vertical”,就会水平分割屏幕。
    方法3: 如果有patch或者diff文件:先编辑这个文件,然后告诉 Vim patch 文件的名称。例如:
        :edit main.c
        :vertical diffpatch main.c diff
作大修改

介绍如何做要重复多次的修改和如何改动大量的文字

1.  记录与回放命令
    方法1.使用“.”命令重复前一个修改操作,但它不能完成复杂功能;
    方法2.使用记录命令,步骤如下:
          1. “q{register}”命令启动一次击键记录,结果保存到{register}指定的寄存器中。寄存器名可以在a到z中任取一个字母表示。
          2. 输入你的命令;
          3. 键入“q”(后面不用跟任何字符)命令结束记录;
          4. 用“@{register}”命令执行这个宏;
             提示:“@@”命令,重复执行上一次的宏。

2.  使用,修改寄存器
    用来记录操作的寄存器与你用来拷贝文本的寄存器是相同的。
    使用方法:
        G                       移到行尾(注:这里其实使用new命令开窗口更方便些)
        o<Esc>                  建立一个空行
        "np                     拷贝n寄存器中的文本,你的命令将被拷到整个文件的结尾
        {edits}                 象修改普通文本一样修改这些命令
        0                       回到行首
        "ny$                    把正确的命令拷贝回n寄存器
        dd                      删除临时行

3.  扩展一个寄存器
        记录到一个大写寄存器表示扩展命令到对应的小写寄存器。
替换

  “:substitute”命令(可以简写为“:s”)使你可以在连续的行中执行字符串替换。
   格式:“:[range]s/old/new/[flags]”  
   说明如下:
        1.用“n,m”表示从第n行到第m行;如果不指定行范围,“:s”命令只作用在当前行上。
        2.“.”表示当前行,“$”表示最后一行;“%”表示命令作用于全部行,即“1,$”。
        3.可以用“+ -”号,比如“n+x,m-y”,nm可以是“.”和“$”。
        4.使用可视模式来设定范围;注意:命令是作用于行范围的,而不是选中的范围的。
        5.默认情况下,命令只对一行中的第一个匹配点起作用,要让对行中所有匹配点起作用,需要加一个“g(global,全局)”标记;
          其他标记:“p”(print,打印),用于在命令执行的时候打印出所有被修改的行;
                   “c”(confirm,确认),在每次替换前向你询问是否需要替换。

插入文件
        “:read {filename}”命令读入文件,插入当前行的下面;
        “:nread {filename}”命令用“n”指点插入行的行号,其中数字“0”表示文件开头,“$”表示文件尾;

保存部分行
        要把一部分行写入到文件,可以使用“:write”命令;
        在没有指定范围的时候它写入全文,而指定范围的时候它只写入范围指定的行;
        如果这个文件已经存在,而你一定要写入,就加一个叹号;
        小心:“!”必须紧跟着“:write”,中间不能留有空格,否则这将变成一个过滤器命令;
        “:write >>{filename}”用于往文件中追加内容;
       
使用外部程序
        命令“{motion}{program}”用一个外部程序对一个文本块进行过滤。
        换句话说,它执行一个由{program}指定的外部命令,并用一个文本块作为输入,
        然后用该程序的输出代替选中的文本块。
       
从崩溃中恢复

方法1. 知道文件名,可以用“-r”选项启动Vim:“vim -r xxx”;
方法2. 不知道文件名,进入原来的文件夹执行:“vim -r ""”;
方法3. 用“vim -r”列出所有它能找到的交换文件,然后用方法1;

折叠


折叠命令:
        zf        F-old creation (创建折叠)
        zo        O-pen a fold   (打开折叠)
        zc        C-lose a fold  (关闭折叠)
        zr          打开嵌套折叠(“zR”用于全部打开)
        zm        关闭嵌套折叠(“zM”用于全部关闭)


在代码间移动

使用标记
        1:创建标记文件:“ctags {filename}”,或者“ctags -R”;
        2:把光标移到要查看的单词的标记处,然后用<CTRL+]>命令;
        3:用<CTRL+T>返回;
        技巧:“CTRL-W ]”用新开窗口查看;
       

在代码间移动
        “[]” 向上跳转到一个函数的结尾,“][”向下移动到一个函数的结尾;
        “[[” 向上跳转到函数的开始,“]]”向下跳到结尾处;
        注意:这四个命令要求“{”“}”符号在第一列;
        “[{” 跳转到当前代码块{}的开始处,“[}”跳转到当前代码块{}的结尾处;
        “]{”“]}”“[(”“[)”“](”“])”“[/”“]/”也有类似功能,只是匹配的是“()”“/*”
       
        “[I” 命令查找光标下的标识符,不仅在当前文件内查找,还会在所有的包含文件中查找;
        “[<Tab>”  跳到第一项,<Tab> 可以是<CTRL+I>;
        “n[<Tab>” 跳到第n项;
        “]I”      只列出光标下面的项目
       
        “[D”      只查找 "#define" 定义的宏,
        “]D”      只列出光标下面的项目       
        “gD”      只在当前文件中查找,并跳转到被首次使用的地方;
        “gd”      只在当前函数内查找,注意,函数的开始符号“{”要求在第一列;
 楼主| 发表于 2003-7-26 21:49:26 | 显示全部楼层
技巧1:关于帮助的帮助
    查找帮助:  键入 ":help word", 接着键入 CTRL-D 可以看到匹配"word" 的帮助主题.
    类别                         前缀           例子       
    普通模式命令         (无)       :help x
    Visual 模式命令              v_           :help v_u
    插入模式命令                  i_           :help i_<Esc>
    命令行模式命令         :           :help :quit
    命令行编辑                    c_           :help c_<Del>
    Vim 命令参数           -           :help -r
    选项                   '           :help 'textwidth'
   

技巧2:vi初学者30分钟教程
    键入:vimtutor [语言]
    语言参数可以是:fr it等,rh9有繁体的教程,暂时没有简体中文教程。

技巧3:确定你的位置
    方法1:使用<Ctrl+G> 命令。此命令显示vi状态信息,包括正在编辑的文件名、是否修改过、当前行号、文件的行数以及光标之前的行占整个文件的百分比。有时你会看到一个“裂开”的列号,是由于使用了Tab字符。
    方法2:设置'number'选项。
        在每行的前面加上一个行号:“:set number<Enter>”;
            要重新关闭这个选项:“:set nonumber”。
    方法3:设置'ruler'选项。这会在Vim窗口的右下角显示当前光标的位置:
        :set ruler

技巧4: 中止命令
    比如:输入”f“后发现应该是“F”,就可以用<Esc>来中止f命令。

技巧5: 让最后一行处于屏幕的中间
    当到达了最后一行的时候,光标会行处于屏幕的底部。
    “zz”命令能让最后一行显示在屏幕中间;
    “zt”把光标所在行移动到屏幕的顶部;
    “zb”则移动到屏幕的底部。
   
技巧6: 显示标记
    你可以用如下命令取得所有的标记的列表:“ :marks”
    用这个命令后,你会发现有一下特殊的标记,包括:
        '       跳转前的位置
        "       最后编辑的位置
        [       最后修改的位置的开头
        ]       最后修改的位置的结尾

技巧7:  操作符与动作
    你可以使用“dw”命令来删除一个单词,它是命令“d”+动作“w”。还可以加上数字,如“d4w”或者“4dw”来删除4个单词。
    类似的常用命令有:
        x  表示  dl  (删除当前光标下的字符)
        X  表示  dh  (删除光标左边的字符)
        D  表示  d$  (删除到行尾)
        C  表示  c$  (修改到行尾)
        s  表示  cl  (修改一个字符)
        S  表示  cc  (修改一整行)
       
技巧8:  替换单个字符
    “rx”命令,使用x替换当前字符,x可以是任意字符,<Enter>键也可以;
    “nrx”命令,可以用一个字符替换多个字符,如"4ra";
   
技巧9:  重复命令“.”的使用
     例如,假设你在编辑一个HTML文件,你想删除所有的<B>标记。你把光标移到第一个“<”上,然后用df>”命令删除<B>,然后你就可以移到</B>的<上面用“.”命令删除它。“.”命令
执行最后一个修改命令(在本例中,就是“df>”)。要删除下一个<B>标记,移动到下一个<的位置,再执行“.”命令即可。

技巧10:  关于put的更多知识
     “P”命令象“p”一样也是插入字符,但位置在光标前面。当你用“dd”删除一行,“P”会把它查回到光标所在行的前一行。而当你用“dw”删除一个单词,“P”会把它插回到光标前面。
      你还可以执行这个命令多次,每次会插入相同的文本。
     “p”和“P”命令接受个数前缀,被插入的文本就会被插入指定的次数。所以“dd”后加一个“3p”会把删除行的三个拷贝插入到文本中。

技巧11:  交换两个字符
     当输入“teh”时,可以用“xp”命令左右交换光标处两字符的位置来得到“the”。
     ddp 上下交换光标处两行的位置。
     
技巧12:  “daw”和“dw”,“daw”和“diw”的区别
      当光标在一个词的中间时,用“dw”来删除整个单词,需要先把光标移动到单词到开头;而“daw”可以直接完成这个操做。
      “daw”包括单词后面的空白字符而“iw”不包括。
      这里的“aw”“iw”是两个文本对象,即 “a word”“Inner Sentence”。
      文本对象还有:“as”,“is”,即“A Sentence”“ Inner Sentence”。
     

技巧1. 我在那个文件?
     使用“:args”就行了。
     显示类似: one.c [two.c] three.c,[  ]表示当前文件。
     要移动到最后一个文件:“:last”
     要移动到第一个文件:  “:first”]
     
技巧2. 编辑另一个文件列表
     我想编辑另一个文件列表而不想退出 Vim 。
     用如下命令编辑另三个文件:
        :args five.c six.c seven.h

技巧3. “mx”和“mX”的区别      
    “mx”命令(x表示小写字母):此标记只在此一个文件中有效。每个文件都有一个自己的标记集,这些标记都由这个文件专用。
    “mX”命令(X表示大写字母):这种标记是全局的,他们可以在任何文件中使用。
   
技巧4.  另存为.....
     “:saveas xxx” xxx是你要保存的文件名。
     
技巧5.  对全部窗口进行操作
     “:qall”和“:qall!”用于退出全部窗口;
     “:wall”全部保存;
     “:wqall”全部保存后退出vim;

技巧6.
     很多编辑另一个文件的命令都有一个分割窗口的变量。
     对于命令模式,这通过前置一个“s”实现。例如“:tag”跳到一个标记,“stag”分割出一个新窗口并跳到那个标记。
     对于普通模式,前置一个 CTRL-W 可以完成这个功能。例如,CTRL-^ 跳到备选文件,而 CTRL-W CTRL-^ 打开一个新窗口并编辑备选文件。
     
技巧7.  使用记录命令
    现在看看你可以怎么用这些命令。假设你有如下文件名列表:
        stdio.h
        fcntl.h
        unistd.h
        stdlib.h
    而你想它变成这样:
        #include "stdio.h"
        #include "fcntl.h"
        #include "unistd.h"
        #include "stdlib.h"
    先移动到第一行,接着执行如下命令:
        qa                      启动记录,并使用寄存器a
        ^                       移到行首
        i#include "<Esc>        在行首输入“#include "”
        $                       移到行末
        a"<Esc>                 在行末加上双引号“"”
        j                       移到下一行
        q                       结束记录
    现在,你已经完成一个修改了,你可以通过重复三次“@a”完成余下的修改。

技巧8.  寄存器的扩展技巧
        记录到一个大写寄存器表示扩展命令到对应的小写寄存器。
        假设已经记录了一个修改一个单词的命令到寄存器c中。它可以正常工作,现在你需要加一个搜索命令以便找到下一个单词来修改。这可以通过如下命令来完成:
        qC/word<Enter>q
        这种方法在宏记录,拷贝和删除命令中都有效。例如,你需要把选择一些行到一个寄存器中,可以先这样拷贝第一行:
          "aY
        然后移到下一个要拷贝的地方,执行:
          "AY
        如此类推。这样在寄存器a中就会包括所有你要拷贝的行。


技巧1.替换命令中的范围的确定
    方法1. 使用行号:
              例如,“n,m”    --从第n行到第m行;
             “n”      --第n行
             “-3,$+5” --从上面第三行到文末倒数第五行的范围;
    方法2. 使用匹配模式:
        例如,“:?^Chapter?,/^Chapter/s=grey=gray=g”,为了避免斜杠使用的混淆,在这种情况下,“=”字符用于代替斜杠。使用斜杠或使用其他字符也是可以的。
    方法3. 使用标记:
            例如,先用“mt”标记开头,再用“mb”标记结尾。然后就可以用标记表示一个范围(包括标记的那一行):
           :'t,'b
    方法4. 使用可视模式:
            先用V选定范围,再输入“:”会出现“:'<,'>”,现在,只需要输入剩下的命令;
        注意:
        如果使用可视模式选中行的一部分,或者用 CTRL-V 选中一个文本块,然后
        执行冒号命令,命令仍作用于行范围,而不是选中的范围。这可能会在以后
        的版本中修正。

技巧2. 使用全局命令
    它允许你找到一个匹配点并且在上面执行一个命令。它的一般形式是:
       “:[range]global/{pattern}/{command}”
       例如:把“foobar”修改为“barfoo”,但只需要修改C++风格的注释中的内容。这种注释以“//”开头。所以可以使用如下命令:
       “:g+//+s/foobar/barfoo/g”
       注意:global中只能使用冒号命令。普通命令不能在这里使用,如果需要,可以使用normal命令。

技巧3.  改变大小写
    “gu”--改为小写;“gugu”“guu”是把一行变为小写;
    “gU”--改为大写;“gUgU”“gUU”是把一行变为大写;
    “g~”--改变大小写;“g~g~”“g~~”是改变一行。
    这三个命令都可以作用于“动作”命令,文本对象和可视模式。
   
技巧4.  使用外部命令的例子
     例子1:对1到5行进行排序。
             先把光标定位在第一行,然后执行下面的命令:        “!5G”
        现在光标移到了屏幕的底部,并显示一个“!”作提示符。
        现在你可以输入过滤程序的名字,在本例中就是“sort”了。因此,你整个命令将是:        !5Gsort<Enter>
     例子2:“!!date<Enter>”
        用“date”的输出代替当前行。这在为文件加入时间戳的时候非常有用。
       
技巧5.  读入一个命令的输出
        要把当前目录的内容读进来,可以用如下命令:“:read !ls”;
        加上一个“!”让Vim知道后面是一个命令。这些命令还可以带参数。
        而且前面还可以带一个范围用于告诉Vim把这行放在什么地方:“:0read !date -u”

技巧6.  把文本输出到一个命令
        要统计当前文件有多少行,可以这样:
        “:write !wc”
        注意不要错写成:        :write! wc
        这会强制把当前文件存到当前目录的“wc”中。在这里空白字符的位置是非常重要的。
       
技巧7.  单词统计
        如果你需要计算的是整个文件的字数,先移到文件第一行开头,然后用这个命令:
        “g”“CTRL-G”
        可以使用可视模式,选中要计算字数的文本,然后输入“g CTRL-G”;
       
技巧8.  查阅man信息
        把光标移到对应的单词上然后输入:“K”
        如果需要在新窗口中打开Man手册,则需要使用加载man文件类型的外挂:
        “:source $VIMRUNTIME/ftplugin/man.vim”
        然后用“:Man”命令打开一个显示man手册的窗口。如“Man feof”“Man 3 echo”;
        现在,还可以用“\K”开个新窗口显示Man手册了。

        快速键入命令行命令

技巧0.  更快速的键入命令
Vim 具备若干基本功能,以简化键入命令的工作。 你可以缩写,编辑和重复分号命令,
而补全功能几乎可以用于所有的场合。

当你用分号(命令或者用 / 或 ? 搜索一个字符串时, Vim 就会把光标置于屏幕下方,
你在那儿键入命令或者搜索模式, 此处即称为命令行, 也是用来输入搜索命令的地方。

技巧1.  移动

命令行上移动光标时最常用的键:

        <Left>                        左移一个字符
        <Right>                        右移一个字符
        <S-Left> 或 <C-Left>        左移一个单词
        <S-Right> 或 <C-Right>        右移一个单词
        CTRL-B 或 <Home>        命令行首位
        CTRL-E 或 <End>                命令行末位

        注意:
        并非在所有键盘上都有效。其它 Shift 和 Control组合键也有这个问题。

技巧2  删除
        除了删除键<Backspace>,<Del>外,还可以用;
        CTRL-W 删除光标前整个单词用 ;
        CTRL-U 删除命令行上全部文字, 从而让你从头开始;
       
技巧3.  取消
        方法1:用<BackSpace>键删除全部字符;
        方法2: 用<Esc>取消;
        方法3: 用CTRL+C取消;
       
技巧4.  命令行缩写
        有些 ":" 分号命令确实很长。幸运的是所有 ":" 分号命令都可以被缩写。
        比如可以把置换命令 “:substitute”缩写成":s"。
        “:s”是“:substitute”的缩写,而不是“:set”的缩写,它的缩写是“:se”。
        “:substitute”最简形式是 ":s",不可能更简单,但可以更复杂,即 ":su" 和 ":sub" 都有效。
        最短的有效缩写形式可以在帮助文件里找到。
       
技巧5.  命令行补全
        命令和文件都能用<Tab>补全,并且能针对上下文做智能判断。
        比如:键入“:e<Tab>”,会出现“:edit”,再按一次<Tab>,成了“:echo”,这和shell中的不一样;
        假设要编辑的文件是:“foo.txt”,则键入“:edit f<Tab>”,就会显示出以“f”开头的文件。
        再最后一个匹配文件名上按<Tab>,会出现最初键入的内容,vim会在匹配表内周而复始地循环。
        <CTRL+P>:依相反方向循环匹配列表;
        <CTRL+D>:显示全部匹配;
        <CTRL+L>:把词补全为最长无歧义字符串;
       
技巧6.  命令行历史
         <Up>   :用在命令行上已经键入的文本去跟历史记录里的命令作比较, 只有匹配的命令才被显示出来;
         <Down> :回到较晚的命令,<CTRL+U>命令能帮你消除光标前的字符以便重新输入;
        “:history”  :显示":" 分号命令的历史记录;
        “:history /”:显示搜索命令的历史记录;
        “q:”:打开命令行窗口;
       
离开和回来

技巧1.  挂起和继续
        方法1:用 CTRL-Z 挂起vim程序,进入shell,最后用 "fg" 命令回到 Vim ;
        方法2:当 CTRL-Z 不起作用时,可以用“:suspend”;
        注意:别忘了把 Vim 引导回前台,否则你会失去所有的修改!
       
技巧2.  执行shell命令
        方法1:使用CTRL+Z 挂起Vim;
        方法2:“:shell”命令重开一个终端,“exit”退出后就返回;
        方法2:":!{command}",比如:“:!ls”;
             常用的“!”命令有:               
             :!{program}                        执行 {program}
             :r !{program}                执行 {program} 并读取其输出
             :w !{program}                执行 {program} 传送文本至其输入
             :[range]!{program}                经由 {program} 过滤文本

技巧3.  在编辑模式下执行命令
        方法1:用<Esc>退出编辑模式,进入命令模式;
        方法2:用<CTRL+O>进入命令模式,执行完命令后返回编辑模式;
       
文件浏览器

技巧1.  文件浏览器怎么用?
        “:edit .”:“.”表示当前路径,用其他路径也行;
        编辑文件:移动到一个文件名上并按下<Enter> 键;
        进入该目录:移动到目录上并按下<Enter> 键;
        常用键:
                "-" 键                  进入父目录“..”
                o                开启一个新窗口
                O                利用最近访问过的窗口
                p                利用预览窗口, 并把光标撤回浏览器窗口
               
技巧2.  排序
        i                显示文件大小和日期. 再执行一次 i 命令将隐藏这些信息
        s                根据光标所在的字段排序, 先以 i 命令显示文件大小和日期,
                        然后把光标移到任一文件的一个字段上, 并按 s 键
        r                逆转排列顺序 (大小或日期二者择一)

技巧3.  常用操作       
        c                把当前目录改成显示在窗口中的那个目录
        :cd                 改变当前目录
        :pwd                发现哪个目录是当前目录
        R                为光标下文件改名
        D                删除光标下文件
       
技巧4.  查找文件
        假设有一个 C 程序, 该程序有这样一行:
        #include "inits.h"
        想要查看文件 "inits.h" 里有些什么。
        把光标移到该文件名上, 并键入:        “gf”
        Vim 就会找到并打开这个文件。
               
技巧5.  加密
        方法1: "-x" 参数,比如“vim -x foo.txt”,读加密文件是不要加上“-x”参数;                       
        方法2:“:set key=xxx”命令。“key”“key=”“key="xxx"”都是去掉密码的意思;
                技巧:“"”“\”等有特殊意义的符号,写成“\"”“\\”;       
        方法3:“:X”命令,好处在于不会以明文显示密码,同时也不用输入多余的“\”符号;
       
技巧6.  加密的麻烦
        麻烦1:Vim 采用的加密算法有弱点的,防止偷窥者是绰绰有余了, 但不足以防止一个手上有大量时间的密码专家
        麻烦2:交换文件是不加密的; 所以当你在编辑文件时, 拥有超级用户权限的人是能够读取未经加密的来自这个文件的交换文件文本的,
                可以使用“vim -x -n file.txt”或者“:setlocal noswapfile”来防止产生交换文件;
        麻烦3:打开一个加密文件,然后输入错误密码,再对文件进行“:X”操作,这样,谁都没法看文件了。
       
二进制文件的一些技巧

技巧1.   打开二进制文件
        打开二进制文件,要使用“-b”的参数,
        这是为了不让vim对文件做任何改动,
        vim是个聪明的程序,但不能用在这里;

技巧2.  用 Hex 格式来阅读字符
        方法1:“:set display=uhex”命令;
        方法2:“ga”命令显示光标下的字符值;
       
技巧3.  显示当前字节位置,和移到
        “g CTRL-G”;
        要移到文件中某个指定的字节,用“go”命令,

技巧4.  使用xxd外部程序
        首先以二进制方式编辑这个文件:“vim -b datafile”
        然后用 xxd把文件转换成十六进制:“:%!xxd”
        显示效果:
        0000000: 1f8b 0808 39d7 173b 0203 7474 002b 4e49  ....9..;..tt.+NI
        0000010: 4b2c 8660 eb9c ecac c462 eb94 345e 2e30  K,.`.....b..4^.0
        Vim 把这些信息当作普通文本来对待,
            注意,修改了十六进制部分并不导致可打印字符部分的改变, 反之亦然(能理解吗?);
        最后, 记得把它转换回来:“:%!xxd -r”;
            注意,只有十六进制部分的修改才会被采用,右边可打印文本部分的修改忽略不计。
       
技巧5.  可视模式下的重复
        "gv" 命令再次选择上次选过的文本;
       
技巧6.  查找时忽略大小写
        默认情况下, Vim 的查找是大小写敏感的;
        方法1:
          “:set ignorecase”关闭大小写敏感;
          “:set noignorecase”重新开启;
          “:set ignorecase smartcase”:
          如果键入的字符串全是小写,说明忽略大小写;如果出现了大写字母,则说明是大小写敏感的;
        方法2:
          在模式前附加 "\c" 字符串表示忽略一个特定的模式里的大小写;
          附加 "\C" 将使该模式的匹配大小写敏感;
       
技巧7.  折叠命令“zi”实用的操作方法:
        - 创建折叠, 以获取文件的全貌
        - 移动到要操作的地方
        - 执行“zi”以便一边看着文本, 一边编辑
        - 再执行“zi”以便移动到另一处

技巧8.  复制, 删除和粘贴折叠
        可以把折叠看成一个单行来对其进行操作,比如这个实用操作:
        - 把光标置于被移文本的首行
        - 用“V”键开始可视模式
        - 把光标置于被移文本的末行
        - 用“d”键删除被选中的行
        - 把光标移到新位置, 用“p” 键把文本粘贴在那儿

技巧9.  “%”使用技巧
        假设有这样一段代码:
          #ifdef USE_POPEN
            fd = popen("ls", "r")
          #else
            fd = fopen("tmp", "w")
          #endif
        在“#ifdef” 处按“ %”,Vim 会跳转到“#else”;继续按“%”会跳转到“#endif”;再次按下“%”又回到“#ifdef”;
        注意,使用“%”需要光标在“#”所在行;如果光标在代码内部,可以用“[#”“]#”命令向前向后跳转;
       

技巧10.  键入任意编码
        编码       键入                        范围
        8-bit           CTRL-V 123                decimal 0-255
        8-bit           CTRL-V x a1                hexadecimal 00-ff
        16-bit     CTRL-V u 013b                hexadecimal 0000-ffff
        31-bit           CTRL-V U 001303a4        hexadecimal 00000000-7fffffff
       
技巧11.  在类内部用“[m” 找到前一个方法的开始;“]m” 找到下一个方法的开始。

技巧1.  “.”的使用例子
        假设要把“four”修改成“five”,有好几个地方要作这种修改。
        操作步骤:
        /four<Enter>    找到第一个“four”
        cwfive<Esc>     修改成“five”
        n               找下一个“four”
        .               重复修改操作
        n               找下一个“four”
        .               重复修改
        如此类推……
       
技巧2.   分割窗口的技巧
    很多编辑另一个文件的命令都有一个分割窗口的变量。
    对于命令模式,这通过前置一个“s”实现。例如“:tag”跳到一个标记,“stag”分割出一个新窗口并跳到那个标记。
    对于普通模式,前置一个 CTRL-W 可以完成这个功能。例如,CTRL-^ 跳到备选文件,而 CTRL-W CTRL-^ 打开一个新窗口并编辑备选文件。

技巧3.  使用.vimrc文件
        这个文件放在“~/” 下;
        常用设置:
        set fileencodings=cp936
        set encoding=cp936               
        source $VIMRUNTIME/ftplugin/man.vim   用“:Man”“\K”开个新窗口查看man手册
        set incsearch                增量匹配       
        set showcmd                窗口右下角,标尺的右边显示未完成的命令
        set display=uhex                以<xx>形式显示不可打印字符
        set showmatch                显示匹配,如“()”“[]”
        set ignorecase smartcase 智能忽略大小写,可以用“\c”“\C”指点是否忽略;
 楼主| 发表于 2003-7-26 21:54:48 | 显示全部楼层
我还仔细找了找“关闭表情标签”,
结果还是没找着。:(
 楼主| 发表于 2003-7-27 12:31:53 | 显示全部楼层
555555555555
没人里我...
发表于 2003-7-27 17:55:55 | 显示全部楼层
这都没找到,我服你了。我本想也要打印的,可是有笑脸符。哈哈~,算了

想知道对还是错,运行一下不就行了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表