vim

vim插件之属性目录NERDTree

0 条评论 vim 无标签 adtxl

转载自https://www.cnblogs.com/littlewrong/p/6535728.html

1、下载安装

下载地址:

官网:http://www.vim.org/scripts/script.php?script_id=1658
GitHib:https://github.com/scrooloose/nerdtree
下载并解压后,把plugin/NERD_tree.vim 和doc/NERD_tree.txt分别拷贝到~/.vim/plugin 和 ~/.vim/doc 目录。

2、基本使用

【命令】

在linux命令行界面,输入vim;输入:NERDTree ,回车。

【配置】

在".vimrc"文件中增加下面配置代码:

" 设置NerdTree

map <F3> :NERDTreeMirror<CR>

map <F3> :NERDTreeToggle<CR>

按F3即可显示或隐藏NerdTree区域了。

3、常用命令

进入当前目录的树形界面,通过小键盘"上下"键,能移动选中的目录或文件。目录前面有"+"号,按Enter会展开目录,文件前面是"-"号,按Enter会在右侧窗口展现该文件的内容,并光标的焦点focus右侧。"ctr+w+h"光标focus左侧树形目录,"ctrl+w+l"光标focus右侧文件显示窗口。多次按"ctrl+w",光标自动在左右侧窗口切换。光标focus左侧树形窗口,按"?"弹出NERDTree的帮助,再次按"?"关闭帮助显示。输入":q"回车,关闭光标所在窗口。

NERDTree提供了丰富的键盘操作方式来浏览和打开文件,介绍一些常用的快捷键:

  • 和编辑文件一样,通过h j k l移动光标定位
  • 打开关闭文件或者目录,如果是文件的话,光标出现在打开的文件中
  • go 效果同上,不过光标保持在文件目录里,类似预览文件内容的功能
  • i和s可以水平分割或纵向分割窗口打开文件,前面加g类似go的功能
  • t 在标签页中打开
  • T 在后台标签页中打开
  • p 到上层目录
  • P 到根目录
  • K 到同目录第一个节点
  • J 到同目录最后一个节点
  • m 显示文件系统菜单(添加、删除、移动操作)
  • ? 帮助
  • q 关闭

vim入门--(3)小改动

0 条评论 vim Vim adtxl

1.操作符与动作

可能已经学过使用 "x" 命令来删除一个字符以及通过计数前缀,例如 "4x" 去删除多个字符。
"dw" 命令删除一个单词。你可能认出来了,"w" 是词移动命令。实际上,"d" 命令后面可以跟任何 "动作" (motion) 命令,它会删除从当前位置到光标移动到的目标位置的全部内容。
例如 "4w" 命令能够向后移动四个单词。所以 "d4w" 命令删除 4 个单词。

        To err is human. To really foul up you need a computer. 
                         ------------------>
                                 d4w

        To err is human. you need a computer. 

Vim 只删除从当前位置到 "动作" 把光标移动到的位置的前一个位置。这是因为 Vim 认为你可能不想删掉一个单词的第一个字符。如果你用 "e" 命令作为动作来移动到单词结尾,Vim 这时认为你是想删掉整个单词 (包括最后一个字符):

        To err is human. you need a computer. 
                        -------->
                           d2e

        To err is human. a computer. 

是否包括光标所在的字符取决于你使用的移动命令。在参考手册中,当不包括这个字符时,称为 "非包含的" (exclusive),而包括这个字符时,称为 "包含的" (inclusive)。
"$" 命令移动到行尾。所以,"d$" 命令从当前的位置一直删除到本行行尾。这是一个"包含的" 命令,所以,这行的最后一个字符也会被删除:

        To err is human. a computer. 
                       ------------>
                            d$

        To err is human 

以上定义了一个命令组合模式: 操作符-动作。你首先输入一个操作符命令,例如,"d"就是一个删除操作符。然后你输入一个动作命令,例如 "4l" 或者 "w"。这种方法使你可以在任何你能越过的文本上执行各种操作。

2.修改文本

另一个操作符命令是 "c",表示修改,change
它的作用方式与 "d" 操作符相似,只是完成后会切换到插入模式。例如,"cw" 修改一个词,更精确的说,它删除一个词,并切换到插入模式。

        To err is human 
           ------->
             c2wbe<Esc>

        To be human 

这里 "c2wbe<Esc>" 包括如下操作:
c 修改操作符
2w 移动两个单词的距离 (与操作符合起来,它删除两个单词并进入插入模式)
be 插入 be 这个单词
<Esc> 切换回普通模式
你会发现一个奇怪的地方: human 前面的空格没有被删除。有一句谚语说道: 任何问题都有一个简单,清楚但错误的回答。"cw" 命令就属于这种情况。c 操作符在很多地方都和d 一样,但有一个例外,"cw"。它实际上像 "ce" 一样,删除到单词尾。这样单词后面的空格就不包括在内了。这要追溯到使用 Vi 的旧日子。由于很多人已经习惯了这种方式,这个不一致之处就留在 Vim 里了。

更多的修改命令
像 "dd" 可以删除一行一样,"cc" 修改一整行。但它会保留这一行的缩进 (前导空格)。
"d$" 删除到行尾;"c$" 则修改到行尾。这相当于先用 "d$" 删除一行再用 "a" 启动插入模式,以便加入新的文字。

快捷键
有些操作符-动作命令由于经常被使用,所以被设置为单字符命令:

        x  表示  dl  (删除当前光标下的字符)
        X  表示  dh  (删除光标左边的字符)
        D  表示  d$  (删除到行尾)
        C  表示  c$  (修改到行尾)
        s  表示  cl  (修改一个字符)
        S  表示  cc  (修改一整行)

在什么地方加入计数前缀
命令 "3dw" 和 "d3w" 都是删除 3 个单词。如果你非要寻根问底,那么: "3dw" 表示删除一个单词 3 次,而 "d3w" 表示删除三个单词一次。这是一个没有分别的分别。实际上你可以放两个计数前缀,例如,"3d2w" 删除两个单词三次,共计六个单词。

替换单个字符
"r" 命令不是操作符。它只是等你输入一个字符然后用这个字符替换当前光标上的字符。你可以用 "cl" 命令或者 "s" 命令完成相同的功能,但 "r" 命令不需要使用 退出插入状态:

        there is somerhing grong here 
        rT           rt    rw

        There is something wrong here 

通过计数前缀,"r" 命令可以使多个字符被同一个字符替换,例如:

        There is something wrong here 
                           5rx

        There is something xxxxx here

要用换行符替换一个字符可以用命令 "r<Enter>"。这会删除一个字符并插入一个换行符。在这里使用计数前缀会删除多个字符但只插入一个换行符: "4r<Enter>" 用一个换行符替换四个字符。

3.重复一个修改

"." 是 Vim 中一个非常简单而有用的命令。它重复最后一次的修改操作
例如,假设你
在编辑一个 HTML 文件,你想删除所有的<B>标记。你把光标移到第一个"<" 上,然后用 "df>" 命令删除 <B>。然后你就可以移到 </B>< 上面用 "." 命令删除它。"."命令执行最后一次的修改命令 (在本例中,就是 "df>")。要删除下一个 <B> 标记,移动到下一个 < 的位置,再执行 "." 命令即可。

                              To <B>generate</B> a table of <B>contents
        f<   找第一个 <       --->
        df>  删除到 >            -->
        f<   找下一个 <            --------->
        .    重复 df>                       --->
        f<   找下一个 <                        ------------->
        .    重复 df >                                      -->

"." 命令重复任何除 "u" (撤销),CTRL-R (重做) 和冒号命令外的修改。

4.可视模式

要删除一些简单的东西,用操作符-动作命令可以完成得很好。但很多情况下,并不容易确定用什么命令可以移到你想修改的地方。这时候,你就需要可视模式了。
你可以用 "v" 命令启动可视模式。你可以移动光标到需要的地方。当你这样做的时候,中间的文本会被高亮显示。最后执行一下 "操作符" 命令即可。
例如,要从一个单词的中间删除到下一个单词的中间:

                This is an examination sample of visual mode 
                               ---------->
                                 velllld

                This is an example of visual mode 

但你这样做的时候,你不需要真的算要按 l 多少次,你可以在按 "d" 前清楚得看到将要被删除的是哪些文本。
如果任何时候你改了主意,只用按一下 <Esc> 就能退出可视模式。

按行选择
如果你想对整行做操作,可以使用 "V" 命令来启动可视模式。你会发现在你作任何移动之前,整行都被高亮显示了。左右移动不会有任何效果。而通过上下移动,你可以一次选择多行。
例如,用 "Vjj" 可以选中三行:

                          +------------------------+
                          | text more text         |
                       >> | more text more text    | |
                       >> | text text text         | | Vjj
                       >> | text more              | V
                          | more text more         |
                          +------------------------+

列块选择
如果你要处理一个矩形块内的文本,可以使用 CTRL-V 启动可视模式。这在处理表格时非常有用。

                name            Q1      Q2      Q3
                pierre          123     455     234
                john            0       90      39
                steve           392     63      334

要删除中间 "Q2" 这一栏,把光标移动到 "Q2" 的 "Q" 上面。按 CTRL-V 启动列块可视模式。现在用 "3j" 向下移动三行,然后用 "w" 移到下一个单词。你可以看到最后一栏的第一个字符也被包括进来了。要去掉它,用 "h" 命令即可。现在按 "d",中间一栏就被删除了。

移动到另一端
如果你在可视模式下选中了一些文字,然后你又发现你需要改变被选择的文字的另一端,用 "o" 命令即可 (提示: "o" 表示 other end),光标会移动到被选中文字的另一端,现在你可以移动光标去改变选中文字的开始点了。再按 "o" 光标还会回到另一端。
当使用列块可视模式的时候,你会有四个角,"o" 只是把你移到对角上。而用 "O" 则能移到同一行的另一个角上。
备注: "o" 和 "O" 在可视模式下与在普通模式下的作用有很大的不同;在普通模式下,它们的作用是在光标后或前加入新的一行。

5.移动文本

当你用 "d","x" 或者其它命令删除文本的时候,这些文字会被存起来。你可以用 p 命令重新粘贴出来 (p 在 Vim 中表示 put,放置)。
看看下面的例子。首先,你会在你要删除的那一行上输入 "dd" 删除一整行,然后移动到你要重新插入这行的地方输入 "p" (put),这样这一行就会被插入到光标下方。

        a line          a line        a line
        line 2    dd    line 3    p   line 3
        line 3                        line 2

由于你删除的是一整行,"p" 命令把该行插入到光标下方。如果你删除的是一行的一部分(例如一个单词),"p" 命令会把它插入到光标的后面。

        Some more boring try text to out commands. 
                         ---->
                          dw

        Some more boring text to out commands. 
                         -------->
                            welp

        Some more boring text to try out commands. 

关于粘贴的更多知识
"P" 命令像 "p" 一样也是插入字符,但插入点在光标前面。当你用 "dd" 删除一行,"P" 会把它插入到光标所在行的前一行。而当你用 "dw" 删除一个单词,"P" 会把它插入到光标前面。
你可以执行这个命令多次,每次会插入相同的文本。
"p" 和 "P" 命令接受计数前缀,被插入的文本就会被插入指定的次数。所以 "dd" 后加一个 "3p" 会把删除行的三个拷贝插入到文本中。

交换两个字符
经常发生这样的情况,当你输入字符的时候,你的手指比脑子转得快 (或者相反?)。这样的结果是你经常把 "the" 敲成 "teh"。Vim 让你可以很容易得修正这种错误。只要把光标移到 "teh" 的 "e" 上,然后执行 "xp" 即可。这个工作过程是: "x" 删除一个字符,保存到寄存器。"p" 把这个被保存的字符插入到光标的后面,也就是在 "h" 的后面了。

        teh     th     the 
         x       p

6.拷贝文本

要把文本从一个地方拷贝到另一个地方,你可以先删除它,然后用 "u" 命令恢复,再用"p" 拷到另一个地方。这里还有一种简单的办法: 抽出 (yank)。"y" 命令可以把文字拷贝到寄存器中。然后用 "p" 命令粘贴到别处。
yanking 是 Vim 中拷贝命令的名字。由于 "c" 已经被用于表示 change 了,所以拷贝 (copy) 就不能再用 "c" 了。但 "y" 还是可用的。把这个命令称为 "yanking" 是为了更容易记住 "y" 这个键。(译者注: 这里只是把原文译出以作参考,"抽出" 文本毕竟是不妥的。后文中将统一使用 "拷贝"。中文可不存在 change 和 copy 的问题。)
由于 "y" 是一个操作符,所以 "yw" 命令就是拷贝一个单词了。当然了,计数前缀也是有效的。要拷贝两个单词,就可以用 "y2w"。例如:

        let sqr = LongVariable * 
                 -------------->
                       y2w

        let sqr = LongVariable * 
                               p

        let sqr = LongVariable * LongVariable 

注意: "yw" 命令包括单词后面的空白字符。如果你不想要这个字符,改用 "ye" 命令。
"yy" 命令拷贝一整行,就像 "dd" 删除一整行一样。出乎意料地是,"D" 删除到行尾而"Y" 却是拷贝一整行。要注意这个区别!"y$" 拷贝到行尾。

        a text line   yy        a text line            a text line
        line 2                  line 2          p      line 2
        last line               last line              a text line
                                                       last line

7.使用剪切板

如果你使用 Vim 的 GUI 版本 (gvim),你可以在 "Edit" 菜单中找到 "Copy" 项。你可以先用可视模式选中一些文本,然后使用 Edit/Copy 菜单项目。现在被选中的文本被拷进了剪贴板。你可以把它粘贴到其它程序,或者在 Vim 内部使用。

如果你已经从其它程序中拷贝了一些文字到剪贴板,你可以在 Vim 中用 Edit/Paste 菜单项目粘贴进来,这在普通模式和插入模式中都是有效的。如果在可视模式,被选中的文字会被替换掉。

"Cut" 菜单项会在把文字拷进剪贴板前删除它。"Copy","Cut" 和 "Paste" 命令在弹出菜单中也有 (当然了,前提是有弹出式菜单)。如果你的 Vim 有工具条,在工具条上也能找到这些命令。

如果你用的不是 GUI,或者你根本不喜欢用菜单,你只能用其它办法了。你还是可以用普通的 "y" (yank) 和 "p" (put) 命令,但在前面必须加上 "* (一个双引号加一个星号)。例如,要拷贝一行到剪贴板中:

        "*yy

要粘贴回来:

        "*p

这仅在支持剪贴板的 Vim 版本中才能工作。

8.文本对象

如果你在一个单词的中间而又想删掉这个单词,在你用 "dw" 前,你必须先移到这个单词的开始处。这里还有一个更简单的方法: "daw"。

        this is some example text. 
                       daw

        this is some text. 

"daw" 的 "d" 是删除操作符。"aw" 是一个文本对象。提示: "aw" 表示 "A Word" (一个单词),这样,"daw" 就是 "Delete A Word" (删除一个单词)。确切地说,该单词后的空格字符也被删除掉了 (或者如果在行尾的话,单词前的空格字符)。
使用文本对象是 Vim 中执行修改的第三种方法。我们已经有操作符-动作和可视模式两种方法了。现在我们又有了操作符-文本对象方法。
这种方法与操作符-动作很相似,但它不是操作于从当前位置到移动目标间的内容,而是对光标所在位置的文本对象进行操作。文本对象是作为一个整体来处理的。现在光标在对象中的位置无关紧要。
用 "cis" 可以改变一个句子。看下面的句子:

        Hello there.  This 
        is an example.  Just 
        some text. 

移动到第二行的开始处。现在使用 "cis":

        Hello there.    Just 
        some text. 

现在你输入新的句子 "Another line.":

        Hello there.  Another line.  Just 
        some text. 

"cis" 包括 "c" (change,修改) 操作符和 "is" 文本对象。这表示 "Inner Sentence"(内含句子)。还有一个文本对象是 "as" ("A Sentence"),区别是 "as" 包括句子后面的空白字符而 "is" 不包括。如果你要删除一个句子,而且你还想同时删除句子后面空白字符,就用 "das";如果你想保留空白字符而替换一个句子,则使用 "cis"。
你还可以在可视模式下使用文本对象。这样会选中一个文本对象,而且继续留在可视模式,你可以继续多次执行文本对象命令。例如,先用 "v" 启动可视模式,再用 "as" 就可以选中一个句子。现在重复执行 "as",就会继续选中更多的句子。最后你可以使用一个操作符去处理这些被选中的句子。
你可以在这里找到一个详细的文本对象的列表: text-objects

9.替换模式

"R" 命令启动替换模式。在这个模式下,你输入的每个字符都会覆盖当前光标上的字符。
这会一直持续下去,直到你输入 <Esc>
在下面的例子中,你在 "text" 的第一个 "t" 上启动替换模式:

        This is text. 
                Rinteresting.<Esc>

        This is interesting. 

你可能会注意到,这是用十二个字符替换一行中的五个字符。如果超出行的范围,"R" 命令自动进行行扩展,而不是替换到下一行。

你可以通过<Insert>在插入模式和替换模式间切换。

但当你使用 <BS> (退格键) 进行修正时,你会发现原来被替换的字符又回来了。这就好像一个 "撤销" 命令一样。

10.总结

操作符,移动命令和文本对象可以有各种组合。现在你已经知道它们是怎么工作了,你可以用 N 个操作符加上 M 个移动命令,组合出 N*M 个命令!

你可以在这里找到一个操作符的列表: operator 。

还有很多方法可以删除文本。这是一些经常用到的:

x       删除光标下的字符 ("dl" 的缩写)
X       删除光标前的字符 ("dh" 的缩写)
D       从当前位置删除到行尾 ("d$" 的缩写)
dw      从当前位置删除到下一个单词开头
db      从当前位置删除到前一个单词的开头
diw     删除光标上的单词 (不包括空白字符)
daw     删除光标上的单词 (包括空白字符)
dG      删除到文件末
dgg     删除到文件首

如果你用 "c" 代替 "d",这会变成修改命令;而改用 "y",则变成拷贝命令,等等等等。

还有一些常用的进行修改的命令,放在哪一章都不合适,列在这里:

        ~       修改光标下字符的大小写,并移动到下一个字符。这不是一个操作符
                (除非设置了 'tildeop'),所以你不能连接一个动作命令。这个命令在
                可视模式下也有效,它会改变被选中的所有文本的大小写。

        I       移到当前行的第一个非空字符并启动插入模式。

        A       移动到行尾并启动插入模式。

vim入门--(2)移动

0 条评论 vim Vim adtxl

1.词移动

要移动光标向前跳一个词,可以使用 "w" 命令。像大多数 Vim 命令一样,你可以在命令前加数字前缀表示把这个命令重复多次。(从"x"标记的位置开始)

        This is a line with example text ~
          x-->-->->----------------->
           w  w  w    3w

"b" 命令向后移动到前一个词的词首
还有一个 "e" 命令可以移到下一个单词的词末,而 "ge" 则移动到前一个单词的末尾:

        This is a line with example text 
           <----<----x---->------------>
           2ge   ge     e       2e

还可以用空白字符分隔的 "字串" (大写的 WORD) 移动。这不是我们通常意义的 "单
词"。这就是为什么使用大写形式的 WORD 的原因。按字串移动的命令也全都是大写的,
如下图所示:

                ge      b          w                             e
               <-     <-         --->                          --->
        This is-a line, with special/separated/words (and some more). 
           <----- <-----         -------------------->         ----->
             gE      B                   W                       E
               ge      b          w                             e

组合运用这些大写和小写的命令,你可以在段落内快速前后移动。

2.移动到行首或行尾

"$" 命令把光标移动到当前行行尾。如果你的键盘上有 键,也可以完成相同的功
能。
"^" 命令把光标移动到一行的第一个非空字符,而 "0" 命令 (零) 则移到一行的第一个
字符, 键也可以完成相同的功能。图示如下 ("." 指示一个空格):

                  ^
             <-----------x
        .....This is a line with example text 
        <----------------x   x-------------->
                0                  $

(这里 "....." 表示空白字符)
像大多数移动命令一样,"$" 命令接受计数前缀。但是 "移动到一行的行尾 n 次"没有什么意义,所以它会使光标移动到另一行。例如,"1$" 移动到当前行的行尾,而"2$" 则移动到下一行的行尾,如此类推。
"0" 命令不能加计数前缀,因为 "0" 本身就是个数字。而且,出人意料地是,"^"命令使用计数前缀也没有任何效果。

3.移动到一个指定的字符

单字符查找命令是最有用的移动命令之一。"fx" 命令向前查找本行中的字符 x。
提示:"f" 代表 "Find" (寻找)。
你可以在这个命令前面加计数前缀,所以,你可以用 "3fl" 命令移动到 "foul" 的"l":

To err is human.  To really foul up you need a computer. 
          --------------------->
                     3fl

"F" 命令用于向左查找:

        To err is human.  To really foul up you need a computer.
                  <---------------------
                            Fh

"tx" 命令与 "fx" 相似,但它只把光标移动到目标字符的前一个字符上。提示: "t" 表示 "To" (到达)。这个命令的反向版本是 "Tx"。

这四个命令可以通过 ";" 命令重复,"," 命令则用于反向重复。无论用哪个命令,光标永远都不会移出当前行,哪怕这两行是连续的一个句子。

有时你启动了一个查找命令后才发现自己执行了一个错误的命令。例如,你启动了一个"f" 命令后才发现你本来想用的是 "F"。要放弃这个查找,输入 。所以 "f"取消一个向前查找命令而不做任何操作。 备注: 可以中止大部分命令,而不仅仅是查找。

4.括号匹配

当你写程序的时候,你经常会遇到嵌套的 () 结构。这时,"%" 是一个非常方便的命令:它能匹配一对括号。
如果光标在 "(" 上,它移动到对应的 ")" 上,反之,如果它在 ")"上,它移动到 "(" 上
这个命令也可适用于 [] 和 {}。(可用 'matchpairs' 选项定义)
当光标不在一个有用的字符上,"%" 会先正向查找找到一个。比如当光标停留在上例中的行首时,"%" 会正向查找到第一个 "("。再按一次会移动到它的匹配处。

5.移动到指定的行

使用 "G" 命令。加上一个计数前缀,这个命令可以把你送到指定的行。例如,"33G" 把你送到 33 行。
如果没有计数前缀,"G" 命令把光标移动到文件末。移动到文件首的命令是 "gg"。"1G" 也能完成这个功能,但稍复杂一点。

另一个定位行的方法是使用带计数前缀的 "%" 命令。例如,"50%" 移动到文件的中间,而 "90%" 移到差不多结尾的位置。
前面的描述假定你想移动到文件中的某一行,而不在乎它是否可见。那么如何移动到视野之内的一行呢?下图演示了三个可以使用的命令:

                        +---------------------------+
                H -->   | text sample text          |
                        | sample text               |
                        | text sample text          |
                        | sample text               |
                M -->   | text sample text          |
                        | sample text               |
                        | text sample text          |
                        | sample text               |
                L -->   | text sample text          |
                        +---------------------------+

提示: "H" 表示 Home (头),"M" 表示 Middle (中) 而 "L" 表示 Last (尾)。另外一种记法,"H" 表示 High (高),"M" 表示 Middle (中) 而 "L" 表示 Low (低)。

6.确定当前的位置

要确定你在文件中的位置,有三种方法:

1.使用 CTRL-G 命令,你会获得如下消息 (假定 'ruler' 选项已经被关闭):

"usr_03.txt" line 233 of 650 --35%-- col 45-52

这里显示了你正在编辑的文件的名称,你所处的当前行的行号,全文的总行数,光标以前的行占全文的百分比,和你所处的列的列号。有时你会看到一个分开的两个列号。例如,"col 2-9"。这表示光标处于第二个字符上,但由于使用了制表符,在屏幕上的位置是 9。

2.置位 'number' 选项。这会在每行的前面加上一个行号:
:set number
要重新关闭这个选项:
:set nonumber
由于 'number' 是一个布尔类型的选项,在它前面加上 "no" 表示关闭它。布尔选项只会有两个值,on 或者 off。

3.置位 'ruler' 选项。这会在 Vim 窗口的右下角显示当前光标的位置:
:set ruler

7. 滚屏

CTRL-U 命令向下滚动半屏。
CTRL-D 命令把视窗向下移动半屏,所以把文字向上移动半屏。

正向滚动一整屏的命令是 CTRL-F (减去两行)。反向的命令是 CTRL-BCTRL-F 是向前(forward) 滚动,CTRL-B 是向后 (backward) 滚动,这比较好记。

移动中的一个常见问题是,当你用 "j" 向下移动的时候,你的光标会处于屏幕的底部,你可能希望,光标所在行处于屏幕的中间。这可以通过 "zz" 命令实现。

        +------------------+             +------------------+
        | earlier text     |             | earlier text     |
        | earlier text     |             | earlier text     |
        | earlier text     |             | earlier text     |
        | earlier text     |   zz  -->   | line with cursor |
        | earlier text     |             | later text       |
        | earlier text     |             | later text       |
        | line with cursor |             | later text       |
        +------------------+             +------------------+

"zt" 把光标所在行移动到屏幕的顶部,而 "zb" 则移动到屏幕的底部。Vim 中还有另外一些用于滚动的命令,可以参见 Q_sc 。要使光标上下总保留有几行处于视窗中用作上下文,可以使用 'scrolloff' 选项。

8.简单查找

查找命令是 "/String"。
备注:
字符 .*[]^%/\?~$ 有特殊含义。如果你要查找它们,需要在前面加上一个"\"。请参见下文。
要查找下一个匹配可以使用 "n" 命令。用下面命令查找光标后的第一个 #include:

/#include

然后输入 "n" 数次。你会移动到其后每一个 #include。如果你知道你想要的是第几个,
可以在这个命令前面增加计数前缀。这样,"3n" 表示移动到第三个匹配点。"/" 也可用
计数前缀: "4/the" 转到 "the" 的第四个匹配。
"?" 命令功能与 "/" 的功能类似,但进行反方向查找:

?word

"N" 命令在反方向重复前一次查找。因此,在 "/" 命令后执行 "N" 命令是反向查找,在"?" 命令后执行 "N" 命令是正向查找。

忽略大小写
通常,你必须区分大小写地输入你要查找的内容。但如果你不在乎大小写。可以设置'ignorecase' 选项:

:set ignorecase

如果你现在要查找 "word",它将匹配 "word" 和 "WORD"。如果想再次区分大小写:

:set noignorecase

历史记录
假设你执行了三个查找命令:

      /one
      /two
      /three

现在,让我们输入 "/" 启动一次查找,但先不按下回车键。现在按 <Up> (上箭头),Vim把 "/three" 放到你的命令行上。回车就会从当前位置查找 "three"。如果你不回车,继续按 <Up>,Vim 转而显示 "/two",而下一次<Up> 变成 "/one"。
你还可以用<Down> 命令在历史记录中反向查找。

如果你知道前面用过的一个模式以什么开头,而且你想再使用这个模式的话,可以在输入<Up> 前输入这个开头。继续前面的例子,你可以输入 /o<Up>,Vim 就会在命令行上显示 /one

冒号开头的命令也有历史记录。这允许你取回前一个命令并再次执行。这两种历史记录是相互独立的。

在文本中查找一个单词
假设你在文本中看到一个单词 "TheLongFunctionName" 而你想找到下一个相同的单词。你可以输入 "/TheLongFunctionName",但这要输入很多东西。而且如果输错了,Vim 是不可能找到你要找的单词的。
有一个简单的方法: 把光标移到那个单词下面使用 "*" 命令。Vim 会取得光标上的单词并把它作为被查找的字符串。
"#" 命令在反向完成相同的功能。你可以在命令前加一个计数: "3*" 查找光标下单词第三次出现的地方。

查找整个单词
如果你输入 "/the",你也可能找到 "there"。要找到以 "the" 结尾的单词,可以用:

 /the\>

">" 是一个特殊的记号,表示只匹配单词末尾。类似地,"\<" 只匹配单词的开头。这样,要匹配一个完整的单词 "the",只需:

/\<the\>

这不会匹配 "there" 或者 "soothe"。注意 "*" 和 "#" 命令也使用了 "词首" 和"词尾" 标记来匹配整个单词 (要部分匹配,使用 "g*" 和 "g#")

高亮匹配
当你编辑一个程序的时候,你看见一个变量叫 "nr"。你想查一下它在哪被用到了。你可以把光标移到 "nr" 下用 "*" 命令,然后用 n 命令一个个遍历。
这里还有一种办法。输入这个命令:

:set hlsearch

现在如果你查找 "nr",Vim 会高亮显示所有匹配的地方。这是一个很好的确定变量在哪
被使用,而不需要输入更多的命令的方法。
要关掉这个功能:

:set nohlsearch

这样做,下一次查找时你又需要切换回来。如果你只是想去掉高亮显示,用如下命令:

:nohlsearch

这不会复位 hlsearch 选项。它只是关闭高亮显示。当你执行下一次查找的时候,高亮功
能会被再次激活。使用 "n" 和 "N" 命令时也一样。

调节查找方式
有一些选项能改变查找命令的工作方式。其中有几个是最基本的:

:set incsearch

这个命令使 Vim 在你输入字符串的过程中就显示匹配点。用这个功能可以检查是否会被
找到正确的匹配,这时输入 就可以真正地跳到那个地方。否则,继续输入更多
的字符可以修改要查找的字符串。

:set nowrapscan

这个设置使得找到文件结尾后停止查找。或者当你往回查找的时候遇到文件开头停止查
找。默认情况下 'wrapscan' 的状态是 "on"。所以在找到文件尾的时候会自动折返到文
件头。

9.简单的查找模式

Vim 用正则表达式来定义要查找的对象。正则表达式是一种非常强大和紧凑的定义查找模式的方法。但是非常不幸,这种强大的功能是有代价的,因为使用它需要掌握一些技巧。
行首 与 行尾
^ 字符匹配行首。在美式英文键盘上,它在数字键 6 的上面。模式 "include" 匹配一行
中任何位置的单词 include。而模式 "^include" 仅匹配在一行开始的 include。
$字符匹配行尾。所以,"was$" 仅匹配在行尾的单词 was。

我们在下面的例子中用 "x" 标记出被 "/the" 模式匹配的位置:

        the solder holding one of the chips melted and the 
        xxx                       xxx                  xxx

用 "/the$" 则匹配如下位置:

        the solder holding one of the chips melted and the 
                                                       xxx

而使用 "/^the" 则匹配:

        the solder holding one of the chips melted and the 
        xxx

你还可以试着用这个模式: "/^the$";它只会匹配仅包括 "the" 的行。并且不包括空
格。例如包括 "the " 的行是不会被这个模式匹配的。

匹配任何单个字符

点 "." 字符匹配任何字符。例如,模式 "c.m" 匹配一个字符串,它的第一个字符是 c,第二个字符是任意字符,而第三个字符是 m。例如:

        We use a computer that became the cummin winter. 
                 xxx             xxx      xxx

匹配特殊字符
如果你确实想匹配点字符,可以在前面加一个反斜杠去消除它的特殊含义。
如果你用 "ter." 模式去查找,会匹配这些地方:

        We use a computer that became the cummin winter. 
                      xxxx                          xxxx

但如果你查找 "ter.",只会匹配第二个位置。

10.使用标记

当你用 "G" 命令跳到另一个地方,Vim 会记住你从什么地方跳过去的。这个位置成为一个标记,要回到原来的地方,使用如下命令:

  ``

` 是反引号,用单引号 ' 也可以。
如果再次执行这个命令你会跳回去原来的地方,这是因为 "`" 命令本身是个跳转,它记住了自己跳转前的位置。
一般,每次你执行一个会将光标移动到本行之外的命令,该移动即被称为一个 "跳转" 。
这包括查找命令 "/" 和 "n" (无论跳转到多远的地方)。但不包括 "fx" 和 "tx" 这些行内查找命令或者 "w" 和 "e" 等词移动命令。另外 "j" 和 "k" 不会被当做是一次 "跳转",即使你在前面加上计数前缀使之移动到很远的地方也不例外。

"``" 命令可以在两个位置上跳来跳去。而 CTRL-O 命令则跳到一个 "较老" 的地方 (提示: O 表示 older)。CTRL-I 则跳到一个 "较新" 的地方 (提示: 在很多常见的键盘布局上,I 在键盘上紧靠着 O)。考虑如下命令序列:

        33G
        /^The
        CTRL-O

你首先跳到第 33 行,然后查找以 "The" 开头的一行,然后用 CTRL-O 你会跳回到 33行。再执行 CTRL-O 你会跳到最初的地方。现在你使用 CTRL-I,就又跳到 33 行。而再用一次 CTRL-I 你又会到达找到 "The" 的地方。

             |  example text   ^             |
        33G  |  example text   |  CTRL-O     | CTRL-I
             |  example text   |             |
             V  line 33 text   ^             V
             |  example text   |             |
       /^The |  example text   |  CTRL-O     | CTRL-I
             V  There you are  |             V
                example text

备注:
CTRL-I 的功能与 一样。

":jumps" 命令能输出一个你可以跳往的位置的列表。最后一个你使用的标记会用 ">" 符号标记出来。

有名字的标记 bookmark

Vim 允许你在文本中放置自定义的标记。命令 "ma" 用 a 标记当前的光标位置。你可以在文本中使用 26 个标记 (a 到 z)。这些标记是不可见的,只是一个由 Vim 记住的位置。
要跳到一个你定义的标记,可以使用命令 `{mark},这里 {mark} 是指定义标记的那个字母。所以,移到标记 a 的命令是:

 `a

命令 "'mark" (单引号加上一个标记) 会移到标记所在行的行首。这与 "`mark" 命令是不同的,后者同时移到标记标记的列上。

标记在需要处理一个文件的两个相关地方的时候非常有用。假设你在处理文件末的时候需要查看文件首的一些内容。
先移动到文件首,设置一个标记 s (start,开始):

ms

然后移动到你需要处理的地方,再设置一个标记 e (end,结束):

me

现在你可以随意移动,当你需要看开头的地方,可以使用这个命令移到那里:

's

然后使用 '' 跳回来。或者用 'e 跳到你正在处理的文件尾部的地方。
这里使用 s 和 e 作标记名没有特别的含义,只是为了好记而已。

你可以用如下命令取得所有的标记的列表:

 :marks

你会注意到有一些特殊的标记,包括:

        '       跳转前的光标位置
        "       最后编辑的光标位置
        [       最后修改的开始位置
        ]       最后修改的结束位置

vim知识点(1)--使用vim 查看二进制文件

0 条评论 vim Linux Vim adtxl

1. 使用-b参数,以二进制打开

vim -b xxx.ko

2.切换到十六进制模式显示

输入命令:%!xxd -g 1

然后就可以像修改文本文件一样修改16进制的字符,可以用 / 查找指定的偏移等等。修改右边的ascii字符应该无效。修改完成后再执行:%!xxd -r 切换会二进制模式,然后再 :wq 保存退出就可以了。
注意:一定要:%!xxd -r切换回来之后在保存才行。


Vim入门(1)--快捷键记录

0 条评论 vim Vim adtxl

0. 快捷键

image.png

image.png

Vim中文帮助

1. 基本操作

快捷键 功能
Esc 从当前模式转换到“普通模式”。所有的键对应到命令
i 插入模式,用于插入文字。回归按键的本职工作
: “命令行模式”Vim希望你输入类似保存文档命令的地方

三种模式之间的关系如下图所示:
imagea8b36ee0ce3bc3ea.png

命令模式

用户刚刚启动 vi/vim,便进入了命令模式。
此状态下敲击键盘动作会被Vim识别为命令,而非输入字符。比如我们此时按下i,并不会输入一个字符,i被当作了一个命令。
以下是常用的几个命令:

  • i 切换到输入模式,以输入字符。
  • x 删除当前光标所在处的字符。
  • : 切换到底线命令模式,以在最底一行输入命令。
    若想要编辑文本:启动Vim,进入了命令模式,按下i,切换到输入模式。

命令模式只有一些最基本的命令,因此仍要依靠底线命令模式输入更多命令。

输入模式

在命令模式下按下i就进入了输入模式。

在输入模式中,可以使用以下按键:

  • 字符按键以及Shift组合,输入字符
  • ENTER,回车键,换行
  • BACK SPACE,退格键,删除光标前一个字符
  • DEL,删除键,删除光标后一个字符
  • 方向键,在文本中移动光标
  • HOME/END,移动光标到行首/行尾
  • Page Up/Page Down,上/下翻页
  • Insert,切换光标为输入/替换模式,光标将变成竖线/下划线
  • ESC,退出输入模式,切换到命令模式

底线命令模式

在命令模式下按下:(英文冒号)就进入了底线命令模式。
底线命令模式可以输入单个或多个字符的命令,可用的命令非常多。
在底线命令模式中,基本的命令有(已经省略了冒号):

  • q 退出程序
  • w 保存文件
  • w [filename] 将编辑的数据存储成另一个档案(类似另存新档)
  • r [filename] 在编辑的数据中,读入另一个档案的数据。亦即将[filename]这个档案内容加到游标所在行后面
  • n1,n2 w [filename] 将n1到n2的内容存成filename这个档案
  • !command 暂时离开vi到指令行模式下执行command的显示结果!例如,【:!ls /home】即可在vi当中察看/home底下以ls输出的档案信息!
  • set nu 显示行号
  • set nonu 与set nu相反,为取消行号
    特别注意,在 vi/vim 中,数字是很有意义的!数字通常代表重复做几次的意思! 也有可能是代表去到第几个什么什么的意思。

举例来说,要删除 50 行,则是用 『50dd』 对吧! 数字加在动作之前,如我要向下移动 20 行呢?那就是『20j』或者是『20↓』即可。

2. 方向键

快捷键 功能
h 或 向左箭头键(←) 光标向左移动一个字符
j 或 向下箭头键(↓) 光标向下移动一个字符
k 或 向上箭头键(↑) 光标向上移动一个字符
l 或 向右箭头键(→) 光标向右移动一个字符
[Ctrl] + [f] 屏幕『向下』移动一页,相当于 [Page Down]按键 (常用)
[Ctrl] + [b] 屏幕『向上』移动一页,相当于 [Page Up] 按键 (常用)
[Ctrl] + [d] 屏幕『向下』移动半页
[Ctrl] + [u] 屏幕『向上』移动半页
+ 光标移动到非空格符的下一行
- 光标移动到非空格符的上一行
n\<space> 那个 n 表示『数字』,例如 20 。按下数字后再按空格键,光标会向右移动这一行的 n 个字符。例如 20\<space> 则光标会向后面移动 20 个字符距离。
0 或功能键[Home] 这是数字『 0 』:移动到这一行的最前面字符处 (常用)
$ 或功能键[End] 移动到这一行的最后面字符处(常用)
H 光标移动到这个屏幕的最上方那一行的第一个字符
M 光标移动到这个屏幕的中央那一行的第一个字符
L 光标移动到这个屏幕的最下方那一行的第一个字符
G 移动到这个档案的最后一行(常用)
nG n 为数字。移动到这个档案的第 n 行。例如 20G 则会移动到这个档案的第 20 行(可配合 set nu)
gg 移动到这个档案的第一行,相当于 1G 啊! (常用)
n\<Enter> n 为数字。光标向下移动 n 行(常用)

3. 浏览文档

快捷键 功能
( 跳转到上一句
) 跳转到下一句
{ 跳转到上一段
} 跳转到下一段
[[ 跳转到上一部分
]] 跳转到下一部分
[] 跳转到上一部分的末尾
][ 跳转到上一部分的开头

4. 插入文本

快捷键 功能
a 在光标后插入文本
A 在行末插入文本
i 在光标前插入文本
o (小写字母o)在光标下方新开一行
O (大写字母O)在光标上方新开一行

5. 特殊插入

快捷键 功能
:r [filename] 在光标下方插入文件[filename]的内容
:r ![command] 执行命令[command],并将输出插入至光标下方

6. 删除文本

快捷键 功能
x 删除光标处字符
dw 删除一个词
d0 删至行首
d$ 删至行末
d) 删至句末
dgg 删至文件开头
dG 删至文件末尾
dd 删除该行
3dd 删除3行

7. 简单替换文本

快捷键 功能
r{text} 将光标处的字符替换成{text}
R 进入覆写模式,输入的字符将替换原有的字符

8. 撤销/重做操作

快捷键 功能
u 撤销最后的操作
Ctrl+r 重做最后撤销的操作

9. 搜索和替换

快捷键 功能
/search_text 检索文档,在文档后面的部分搜索search_text
?search_test 检索文档,在文档前面的部分搜索search_text
n 移动到后一个检索结果
N 移动到前一个检索结果
:%s/original/replacement 检索第一个“original”字符串,并将其替换成“replacement”
:%s/original/replacement/g 检索并将所有的“original”替换成“replacement”
:%s/original/replacement/gc 检索出所有的“original”字符串,但在替换成“replacement”前,先询问是否替换

10. 选择文本

快捷键 功能
v 进入逐字可视模式
V 进入逐行可视模式
Esc 退出可视模式

11. 改动选中文本

快捷键 功能
~ 切换大小写
d 删除一个词
c 变更
y 复制
> 右移
< 左移
! 通过外部命令进行过滤

12. 保存并推出

快捷键 功能
:q 退出vim,如果文件已被修改,将退出失败
:w 保存文件
:w new_name 用new_name作为文件名保存文件
:wq 保存文件并退出
:q! 退出vim,不保存文件改动
ZZ 退出vim,如果文件被改动过,保存改动内容
ZQ 与:q!相同,退出vim,不保存文件改动

参考:
Vim 快捷键一览表
Linux vi/vim
史上最全Vim快捷键键位图(入门到进阶)