现在的位置: 首页 > 综合 > 正文

vim初步——基础命令

2018年02月23日 ⁄ 综合 ⁄ 共 5054字 ⁄ 字号 评论关闭

    linux最常见常用的编辑器肯定是vi了,这个编辑器的历史可以追溯到上个世纪Unix的年代。

    VIM的意思是Vi IMproved,显然,是从vi发展过来的了,所以输入方式相当的接近(并不完全一致)。这里介绍的命令是基于VIM 7.3的版本。


    1. VIM的模式

     VIM是分成各种各样的模式的,各有各的作用,最常见的包括:普通模式,命令模式,插入模式,可视模式等

     普通模式不用介绍了,就是打开文件时的模式,可以阅读不能编辑,VIM提供了一大堆快捷键帮助你控制光标,让你可以快速的定位位置以及跳来挑去。

      插入模式就是开始编辑,VIM默认你是在阅读并非是编写,你必须主动通知它你要开始输入他才会跳到编辑模式(否则哪里有那么多快捷键好使呢),这点很多习惯windows下的IDE编辑的人刚转到VIM是不习惯的,这个只能靠多使用来熟悉了。

      命令模式是指在编辑器最下面一行可以输入命令,让编辑器做各种各样的事情(你甚至可以运行shell命令),切换到这个命令需要输入:,一般都是先狂按ESC键然后输入:来输入命令。

       可视模式是指输入v之后进入的模式,这个可以方便的用来选中你需要的块内容。


    2. 各个模式下的常用命令

    2.1 普通模式

          这个模式下快捷键最多了,VIM提供了相当强大的各种各样的方法让你阅读代码。

          hjkl这四个是标准键,用来控制光标上下左右移动的,所有用vi的人都应该知道,如果你不习惯你应该多使用使用,没其他的方法。这里补一句,虽然网上的文章从没看到过推荐,但上下左右键本身确实也可以控制光标,如果实在不习惯,那么。。。
          )移动光标到下一个句子
          (移动光标到上一个句子

         x 删除当前字符,可以使用数字来修饰实现多个字符删除
         X 删除光标左边的一个字符
         D 删除到行尾
         C 修改到行尾
         s 修改一个字符
         S 修改一整行
         dd 删除一行
         cc 剪切当前行并进入插入模式
         yy copy当前行
         r 替换当前字符
         R 进入替换模式,直到ESC结束
         . 重复最后一次的修改操作
         u  撤销上次操作       U 撤销本行的所有操作
         CTRL_R 恢复上次操作

         w   跳到下一个单词的第一个字符
         b   跳到上一个单词的第一个字符
         e   跳到下一个单词的最后一个字符
         ge  跳到上一个单词的最后一个字符
         $   跳到行末尾
         ^   跳到行头(第一个非空格字符)
         0   跳到行头(第一个字符)

         f?  向后搜索?字符,光标在?字符处
         F?  向前搜索?字符,光标在?字符处
         t?  向后搜索?字符,光标在?字符前
        T?  向前搜索?字符,光标在?字符前

        %   匹配括号,如果有数字,比如:50%,则意思是跳到文章的50%的地方
        G   跳到文件尾,如果有数字,比如:33G,则意思是跳到33行
        gg  跳到文件头
        H   光标跳转到屏幕上面
        M   光标跳转到屏幕中间
        L   光标跳转到屏幕下面

        CTRL_G 显示当前编辑信息,在ruler关闭的情况下特别有用
        CTRL_U 向上翻半屏
        CTRL_D 向下翻半屏
        CTRL_E 向上滚动一行
        CTRL_Y 向下滚动一行 (windows下不是这个意思)
        CTRL_F 向上翻一屏
        CTRL_B 向下翻一屏

        CTRL_O 跳转到较老的一个地方
        CTRL_I 跳转到较新的一个地方

        zz 当前光标行移动屏幕中间

        * 当前光标的字符串向下搜索,编程很有用
        # 当前光标的字符串向上搜索,编程很有用


    2.2 命令行模式

          命令行的命令都会在最下面一行显示出来,可以输入会被解释成并执行的文本
          :w   写文件
          :q   退出
          :ZZ  退出
          :q!  强制退出,没有保存的内容将被抛弃
          / ?  搜索,其中/是向后搜索,?是向前搜索,搜索到后,n是继续搜下一个,N是搜上一个

          :set 这个可以设置一系列的参数,用来实现各种各样的功能
           set number/nonumber                  显示/取消行号,也可以简写成set nu/nonu
           set ruler/noruler                            显示/取消状态显示
           set hlsearch/nohlsearch               搜索内容高亮
           set incsearch                                递增式搜索
           set showmode                              显示当前所处的模式
           set ignorecase/noignorecase       忽略大小写/不忽略大小写
           set nowrapscan                            搜索到达文件末尾后停止,不再从头搜起
           set list                                           显示TAB键
           set tabstop=4                                TAB占用4个字符宽度
           set expandtab                               不使用TAB,使用空格代替TAB
           set cinoptions=:N                         使得自动缩进时swithc和case在同一列上,个人爱好,可以不设

          :edit                                                编辑另一个文件
          :next/previous                                 下一个/上一个文件
          :first/last                                          第一个/最后一个文件
          :args                                                文件列表,当前文件会有[]提示
          :split                                                分割窗口
          :close                                              关闭文件


    2.3 可视模式

           这个其实和普通模式没有太大区别,往往进入可视模式是为了选中一段区域,后续可以剪切/复制/粘贴。

           进入可视模式后,操作光标时,从起始点到当前光标点的内容会被高亮显示,此时:

           d:剪贴选择的内容到剪贴板。
           y:拷贝选择的内容到剪贴板。
           c:剪贴选择的内容到剪贴板并且进入插入模式。
           o:可视模式下,o是移动到选中的另一端

           选中之后的粘贴命令:

           p:粘贴
           P:粘贴,但贴到光标前面

           需要特别指出的是CTRL_V是按块选择,可以选择一个矩形块并且矩形块内文本会高亮,粘贴也是成块的,这个功能在复制表格时非常强大


    2.4 插入模式

            i:在当前光标之处开始插入,当前光标处的字符会向后移动
            I:在当前行首插入
            a:在当前光标之后开始插入,当前光标处的字符是不移动位置的
            A:在当前行尾插入
            o:在当前光标的下一行创建一个新行,并进入插入模式
            O:在当前光标的上一行创建一个新行,并进入插入模式
            ~:修改光标下字符的大小写,并移动到下一个字符。
            c{motion}:删除 motion 命令跨过的字符,并且进入插入模式。比如:c$,这将会删除从光标位置到行尾的字符并且进入插入模式。ct!,这会删除从光标位置到下一个叹号(但不包括),然后进入插入模式。被删除的字符被存在了剪贴板里面,并且可以再粘贴出来。
            d{motion}:和上面差不多,但是不进入插入模式。
            y{motion}:和上面差不多,不过是拷贝


    3. 其他

         VIM除了按步就班之外,还有不少方便灵活的小功能。

    3.1  书签

         书签可以比较方便的记录位置供日后跳转,并且在VIM中没有GUI上的显示,VIM中书签是单个小写字母a~z
         ma: 标记书签a,其中a为书签的名字,可以是a~z
        `a:跳转到书签
        'a: 跳转到书签所在行
        `.:到你上次编辑文件的地方。这个命令很有用,而且你不用自己去标记它。
        :marks取得所有的标记


       另外还有一些特殊的标记,包括:
        '       跳转前的位置
        "       最后编辑的位置
        [       最后修改的位置的开头
        ]       最后修改的位置的结尾
        这样的书签只能在本文件编辑时使用,如果想在文件中标记跳转,那么需要使用大写的书签,比如mA


    3.2 寄存器

        很多编辑器都只提供了一个剪贴板。VIM 有很多。剪贴板在 VIM 里面被称为寄存器(Registers)
        :reg         列出当前定义的所有寄存器名和内容
        使用寄存器的命令为双引号 ",比如:我们要拷贝当前行到寄存器 k。你应该按 "kyy。然后可以使用命令 "kp 来粘贴寄存器 k 里面的内容到你想要的位置


    3.3 录制宏

        有时候,你会发现你自己在文章的每段或者每行都重复相同的一系列动作。VIM 允许你记录一个宏来完成你的特殊需要。
        这个录制分成3步走:
        1. "q{register}" 命令启动一次击键记录,结果保存到 {register} 指定的寄存器中。
            寄存器名可以用 a 到 z 中任一个字母表示。比如 qa,将会记录并且把宏存在寄存器 a 里面。
        2. 输入你的命令
        3. 键入 q(后面不用跟任何字符)命令结束记录。
        @register:使用存在寄存器 register 的宏。比如 @a,将会使用存在寄存器 a 里面的宏


    3.4 键盘映射

        映射可以使你把一系列 Vim 命令绑定为一个单键。假设你要用一个大括号将一个特定的单词括起来。例如,把 "amount" 变成 "{amount}"。用 ":map" 命令,就可以让 F5 来完成这个工作。命令如下:
        :map <F5> i{<Esc>ea}<Esc>
        在这个例子中,触发器是一个单键;它还可以是任何字符串。但若你使用一个已经存在的 Vim 命令,该命令将不在有效。所以你最好避免出现这种情况。
        一个可用于映射的键是反斜杠。因为你很可能想定义多个映射,那就加上另一个字符。你可以映射 "\p" 为在单词两端加园括号,而映射 "\c" 为加花括号,例如:
        :map \p i(<Esc>ea)<Esc>
        :map \c i{<Esc>ea}<Esc>
       你需要在敲入\后,立即敲入p,以便 Vim 知道它们组成一个命令。
        ":map" 命令(无参数)列出当前已定义的映射,至少会包括普通模式下的那些。

    3.5 插件

        Vim 可以通过插件增强功能。插件其实是一个当 Vim 启动的时候能被自动执行的脚本。
        简单地把插件放到你 Vim 的 plugin 目录中就可以使它生效。Unix下插件目录是~/.vim/plugin/

    3.6 分割窗口

        这是VIM一个很强大的特性,使用起来非常非常的酷,参照文件内容编码时尤其有用
        :split           分割窗口,这个是水平分割窗口的
        :vsplit         分割窗口,这个是竖直分割窗口的
        :close        关闭窗口
        :only          仅编辑一个窗口
        CTRL-W w 命令可以用于在窗口间跳转。
        要扩大窗口:
            CTRL-W +
        要缩小窗口:
            CTRL-W -

        CTRL-W h        跳转到左边的窗口
        CTRL-W j         跳转到下面的窗口
        CTRL-W k        跳转到上面的窗口
        CTRL-W l         跳转到右边的窗口

        CTRL-W t         跳转到最顶上的窗口
        CTRL-W b        跳转到最底下的窗口


    当然,VIM还有非常丰富的内容,有很多的插件可以挑选,完成各种各样的功能,如果挑选一下使用熟练的话,编辑起来必然事半功倍。

抱歉!评论已关闭.