linux vim命令(转载)

命令历史                                                                                                     

以:和/开头的命令都有历史记录,可以首先键入:或/然后按上下箭头来选择某个历史命令。

启动vim                                                                                                      

在命令行窗口中输入一下命令即可:

1、vim 直接启动vim

2、vim filename 打开vim并创建名为filename的文件

文件命令                                                                                                      

打开打个文件   vim file

同事打开多个文件 vim file1 file2 file3 。。。

在vim窗口中打开一个新文件 :open file

在新窗口中打开文件 :split file

切换到下一个文件 :bn

切换到上一个文件 :bp

查看当前打开的文件列表,当前正在编辑的文件会用[]括起来 :args

打开远程文件,比如ftp或者share folder  :e ftp://192.168.10.76/abc.txt   :e\\qadirver\test\1.txt

vim的模式                                                                                                    

正常模式(按Esc或Ctrl+[进入),左下角显示文件名或为空

插入模式(按i键进入) 左下角显示 --INSERT--

可视模式(?进入)左下角显示 --VISUAL--

导航命令                                                                                                       

%括号匹配

插入命令                                                                                                        

i在当前位置前插入

I在当前行首插入

a在当前位置后插入

A在当前行尾插入

o在当前行之后插入一行

O在当前行之前插入一行

查找命令                                                                                                          

/text  查找text,按n键查找下一个,按N键查找上一个。

?text 查找text,反向查找,按n键查找下一个,按N键查找上一个。

vim中有些特殊字符在查找时需要转义  .*[]^%/?~$

:set ignorecase 忽略大小写查找

:set noignorecase 不忽略大小写查找

查找很长的词,如果一个词很长,键入麻烦,可以将光标移动到该词上,按*或#键即可对该词进行搜索,相当于/搜索。而#命令相当于?搜索

:set hlsearch 高亮搜索结果,所有结果都高亮显示,而不是只显示一个匹配。

:set nohlsearch 关闭高亮搜索显示。

:nohlsearch 关闭当前的高亮显示,如果再次搜索或者按下n或N键,则会再次高亮。

:set insearch 逐步搜索模式,对当前键入的字符进行搜索而不必等待键入完成。

:set wrapscan 重新搜索,在搜索到文件头或尾时,返回继续搜索,默认开启。

替换命令                                                                                                          

ra 将当前字符替换为a,当前字符即光标所在的字符

s/old/new/ 用old替换new,替换当前行的第一个匹配

s/old/new/g 用old替换new,替换当前行的所有匹配

%s/old/new/ 用old替换new,替换所有航的第一个匹配

:10,20 s/^/    /g在第10行至第20行每行前面加四个空格,用于缩进

ddp 交换光标所在行和其紧邻的下一行

移动命令                                                                                                          

 

h 左移一个字符
l 右移一个字符,这个命令很少用,一般用w代替。
k 上移一个字符
j 下移一个字符
以上四个命令可以配合数字使用,比如20j就是向下移动20行,5h就是向左移动5个字符,在Vim中,很多命令都可以配合数字使用,比如删除10个字符10x,在当前位置后插入3个!,3a!<Esc>,这里的Esc是必须的,否则命令不生效。

 

w 向前移动一个单词(光标停在单词首部),如果已到行尾,则转至下一行行首。此命令快,可以代替l命令。

 

b 向后移动一个单词 2b 向后移动2个单词

 

e,同w,只不过是光标停在单词尾部

 

ge,同b,光标停在单词尾部。

 

^ 移动到本行第一个非空白字符上。

 

0(数字0)移动到本行第一个字符上,

 

<HOME> 移动到本行第一个字符。同0健。

 

$ 移动到行尾 3$ 移动到下面3行的行尾

 

gg 移动到文件头。 = [[

 

G(shift + g) 移动到文件尾。 = ]]

 

f(find)命令也可以用于移动,fx将找到光标后第一个为x的字符,3fd将找到第三个为d的字符。

 

F 同f,反向查找。

 

跳到指定行,冒号+行号,回车,比如跳到240行就是 :240回车。另一个方法是行号+G,比如230G跳到230行。

 

Ctrl + e 向下滚动一行

 

Ctrl + y 向上滚动一行

 

Ctrl + d 向下滚动半屏

 

Ctrl + u 向上滚动半屏

 

Ctrl + f 向下滚动一屏

 

Ctrl + b 向上滚动一屏

 

撤销和重做                                                                                                       

u 撤销(Undo)

U 撤销对整行的操作

Ctrl+r 重做(Redo),即撤销的撤销

删除命令                                                                                                          

 

x 删除当前字符

 

3x 删除当前光标开始向后三个字符

 

X 删除当前字符的前一个字符。X=dh

 

dl 删除当前字符, dl=x

 

dh 删除前一个字符

 

dd 删除当前行

 

dj 删除上一行

 

dk 删除下一行

 

10d 删除当前行开始的10行。

 

D 删除当前字符至行尾。D=d$

 

d$ 删除当前字符之后的所有字符(本行)

 

kdgg 删除当前行之前所有行(不包括当前行)

 

jdG(jd shift + g)   删除当前行之后所有行(不包括当前行)

 

:1,10d 删除1-10行

 

:11,$d 删除11行及以后所有的行

 

:1,$d 删除所有行

 

J(shift + j)  删除两行之间的空行,实际上是合并两行。

 

拷贝和粘贴                                                                                                       

 

yy 拷贝当前行

 

nyy 拷贝当前后开始的n行,比如2yy拷贝当前行及其下一行。

 

p  在当前光标后粘贴,如果之前使用了yy命令来复制一行,那么就在当前行的下一行粘贴。

 

shift+p 在当前行前粘贴

 

:1,10 co 20 将1-10行插入到第20行之后。

 

:1,$ co $ 将整个文件复制一份并添加到文件尾部。

 

正常模式下按v(逐字)或V(逐行)进入可视模式,然后用jklh命令移动即可选择某些行或字符,再按y即可复制

 

ddp交换当前行和其下一行

 

xp交换当前字符和其后一个字符

 

剪切命令                                                                                                          

 

正常模式下按v(逐字)或V(逐行)进入可视模式,然后用jklh命令移动即可选择某些行或字符,再按d即可剪切

 

ndd 剪切当前行之后的n行。利用p命令可以对剪切的内容进行粘贴

 

:1,10d 将1-10行剪切。利用p命令可将剪切后的内容进行粘贴。

 

:1, 10 m 20 将第1-10行移动到第20行之后。

 

退出命令                                                                                                           

:wq 保存并退出

ZZ 保存并退出

:q! 强制退出并忽略所有更改

:e! 放弃所有修改,并打开原来文件。

窗口命令                                                                                                           

:split或new 打开一个新窗口,光标停在顶层的窗口上

:split file或:new file 用新窗口打开文件

split打开的窗口都是横向的,使用vsplit可以纵向打开窗口。

Ctrl+ww 移动到下一个窗口

Ctrl+wj 移动到下方的窗口

Ctrl+wk 移动到上方的窗口

关闭窗口

:close 最后一个窗口不能使用此命令,可以防止意外退出vim。

:q 如果是最后一个被关闭的窗口,那么将退出vim。

ZZ 保存并退出。

关闭所有窗口,只保留当前窗口

:only

录制宏

按q键加任意字母开始录制,再按q键结束录制(这意味着vim中的宏不可嵌套),使用的时候@加宏名,比如qa。。。q录制名为a的宏,@a使用这个宏。

执行Shell命令                                                                                                    

:!command

:!ls 列出当前目录下文件

:!perl -c script.pl 检查perl脚本语法,可以不用退出vim,非常方便。

:!perl script.pl 执行perl脚本,可以不用退出vim,非常方便。

:suspend或Ctrl - Z 挂起vim,回到shell,按fg可以返回vim。

注释命令                                                                                                           

perl程序中#开始的行为注释,所以要注释某些行,只需在行首加入#

3,5 s/^/#/g 注释第3-5行

3,5 s/^#//g 解除3-5行的注释

1,$ s/^/#/g 注释整个文档。

:%s/^/#/g 注释整个文档,此法更快。

帮助命令                                                                                                          

 

:help or F1 显示整个帮助
:help xxx 显示xxx的帮助,比如 :help i, :help CTRL-[(即Ctrl+[的帮助)。
:help 'number' Vim选项的帮助用单引号括起
:help <Esc> 特殊键的帮助用<>扩起
:help -t Vim启动参数的帮助用-
:help i_<Esc> 插入模式下Esc的帮助,某个模式下的帮助用模式_主题的模式
帮助文件中位于||之间的内容是超链接,可以用Ctrl+]进入链接,Ctrl+o(Ctrl + t)返回

 

其他非编辑命令                                                                                                 

 

. 重复前一次命令

 

:set ruler?  查看是否设置了ruler,在.vimrc中,使用set命令设制的选项都可以通过这个命令查看

 

:scriptnames  查看vim脚本文件的位置,比如.vimrc文件,语法文件及plugin等。

 

:set list 显示非打印字符,如tab,空格,行尾等。如果tab无法显示,请确定用set lcs=tab:>-命令设置了.vimrc文件,并确保你的文件中的确有tab,如果开启了expendtab,那么tab将被扩展为空格。

 

Vim教程
在Unix系统上
$ vimtutor
在Windows系统上
:help tutor

:syntax 列出已经定义的语法项
:syntax clear 清除已定义的语法规则
:syntax case match 大小写敏感,int和Int将视为不同的语法元素
:syntax case ignore 大小写无关,int和Int将视为相同的语法元素,并使用同样的配色方案

 

 

 

=================================================================

*02.1*  第一次运行 Vim

启动 Vim 的命令如下:

        gvim file.txt

如果在UNIX 操作系统中,你可以在任意命令提示符下输入这个命令。

如果你用的是 Microsoft Windows, 启动一个 MS-DOS 窗口,再输入这个命令。 

无论哪一种方式,现在 Vim 开始编辑一个名为 file.txt 的文件了。由于这是一个新建文件,你会得到一个空的窗口。屏幕看起来会象下面这样:

        +---------------------------------------+
        |#                                      |
        |~                                      |
        |~                                      |
        |~                                      |
        |~                                      |
        |"file.txt" [New file]                  |
        +---------------------------------------+ 

('#"是当前光标的位置)

以波纹线(~)开头的行表示该行在文件中不存在。换句话说,如果 Vim 打开的文件不能充满 这个显示的屏幕,它就会显示以波纹线开头的行。在屏幕的底部,有一个消息行指示文件名为 file.txt 并且说明这是一个新建的文件。这行信息是临时的,新的信息可以覆盖它。

vim 命令

gvim 命令建立一个新窗口用于编辑。

如果你用的是这个命令:vim file.txt ,则编辑在命令窗口内进行。

换句话说,如果你在 xterm 中运行,编辑器使用 xterm 窗口。 如果你用的是 Microsoft Window 的 MS-DOS 窗口,编辑器使用这个 MS-DOS 窗口。两个版本显示出来的文本看起来是一样的。但如果你用的是 gvim,就会有其他特性,如菜单条。 后面会有更多的描述。

 

 

 

 

*02.2*  插入文本

 

Vim 是一个多模式的编辑器。就是说,在不同模式下,编辑器的响应是不同的。

在普通模式下,你敲入的字符只是命令;

而在插入模式,你敲入的字符就成为插入的文本了。

当你刚刚进入 Vim,它处在普通模式。通过敲入"i"命令(i是 Insert 的缩写)可以启动插入模式,这样你就可以输入文字了,这些文字将被插入到文件中。

不用担心输错了, 你还能够随后修正它。要输入下文的程序员打油诗,你可以这样敲:

 

        iA very intelligent turtle
        Found programming UNIX a hurdle

 

输入"turtle"后,你通过输入回车开始一个新行。最后,你输入 <Esc> 键退出插入模式而回到普通模式。现在在你的 Vim 窗口中就有两行文字了:

 

        +---------------------------------------+
        |A very intelligent turtle              |
        |Found programming UNIX a hurdle        |
        |~                                      |
        |~                                      |
        |                                       |
        +---------------------------------------+

 


我在什么模式?

 

要看到你在什么模式,输入如下命令:

 

        :set showmode

 

你会发现当你敲入冒号后,Vim 把光标移到窗口的最后一行。那里是你输入“冒号命令” (以冒号开头的命令)的地方,敲入回车结束这个命令的输入(所有的冒号命令都用这种方式结束)。 

现在,如果你输入 "i" 命令,Vim 会在窗口的底部显示 --INSERT--(中文模式显示的是--插入-- —— 译者注),这表示你在插入模式。

 

        +---------------------------------------+
        |A very intelligent turtle              |
        |Found programming UNIX a hurdle        |
        |~                                      |
        |~                                      |
        |-- INSERT --                           |
        +---------------------------------------+

 

如果你输入<Esc>回到普通模式,最后一行又变成空白。

 


解决问题 

 

Vim 新手常常遇到的一个问题是不知道自己在什么模式下,可能是因为忘了,也可能是因为不小心敲了一个切换模式的命令。无论你在什么模式,要回到普通模式,只要敲 <Esc> 就可以了。有时你需要敲两次,如果 Vim 发出“嘀”一声,就表示你已经在普通模式了。

 

 

 

--------------------------------------------------------------------------------

 

*02.3*  移动光标

 

回到普通模式后,你可以使用如下命令移动光标:

 

        h       左                                              *hjkl*
        j       下
        k       上
        l       右

 

这些命令看起来是随便选的。无论如何,谁听说过用 l 表示右的?但实际上,作这些选择是有理由的:移动光标是最常用的编辑器命令。而这些键位是在你本位的右手。也就是说:这种键位的设定使你可以以最快的速度执行移动操作(特别是当你用十指输入的时候)。

 

        Note:
        你还可以用方向键移动光标,但这样会减慢你输入的速度,因为你必须把你的手从 字母键移动到方向键。想象一下,你在一个小时内可要这样做几百次,这可要花相当多的时间的。而且,有一些键盘是没有方向键的,或者放在一些很特别的地方。所以, 知道 hjkl 的用法在这些情况下就很有帮助了。

 

记住这些命令的一个方法是:h 在左边,l 在右边,j 指着下面。用图表示如下:

 

                       k
                   h     l
                     j

 

学习这些命令的最好方法是使用它。用 "i" 命令输入更多的文字。然后用 hjkl 键移动光标并在某些地方输入一些单词。别忘了用 <Esc> 切换回普通模式。|vimtutor|也是一个练习的好办法。

 

 

 

--------------------------------------------------------------------------------

 

*02.4*  删除字符

 

要删除一个字符,把光标移到它上面然后输入 "x"。(这是对以前的打字机的一种回归,那时你通过在字符上输入xxxx删除它) 例如,把光标移到行首,然后输入xxxxxxx(七个x)
可以删除 "A very"。结果看起来这样:

 

        +---------------------------------------+
        |intelligent turtle                     |
        |Found programming UNIX a hurdle        |
        |~                                      |
        |~                                      |
        |                                       |
        +---------------------------------------+

 

现在你可以输入新的字符了,例如,通过输入:

 

        iA young <Esc>

 

这个命令启动一次插入操作(那个"i"),并插入 "A young",然后退出插入模式(最后一个<Esc>)。结果是:

 

        +---------------------------------------+
        |A young intelligent turtle             |
        |Found programming UNIX a hurdle        |
        |~                                      |
        |~                                      |
        |                                       |
        +---------------------------------------+

 


删除一行 

 

要删除一整行,使用 "dd" 命令,后一行会移上来填掉留下的空行:

 

        +---------------------------------------+
        |Found programming UNIX a hurdle        |
        |~                                      |
        |~                                      |
        |~                                      |
        |                                       |
        +---------------------------------------+

 

删除一个分行符 

 

在 Vim 中你可以把两行连起来,这意味着两行间的换行符被删除了。"J" 命令 用于完成这个功能。
    以下面两行为例子:

 

        A young intelligent
        turtle

 

把光标移到第一行,然后按 "J":

 

        A young intelligent turtle

 

 

 

--------------------------------------------------------------------------------

 

*02.5*  撤销与重做

 

假设现在你删得太多了。当然,你可以重新输入需要的内容。不过,你还有一个更简单的 选择。"u" 命令撤销上一个编辑操作。看看下面这个操作:先用 "dd" 删除一行,再敲 "u",该行又回来了。
    再给一个例子:把光标移到第一行的 A 上:

 

        A young intelligent turtle

 

现在输入 xxxxxxx 删除 "A young"。结果如下:

 

        intelligent turtle

 

输入"u" 撤销最后一个删除操作。那个删除操作删除字符 g,所以撤销命令恢复这个字符:

 

        g intelligent turtle

 

下一个 u 命令恢复倒数第二个被删除的字符:

 

        ng intelligent turtle

 

下一个 u 命令恢复 u,如此类推:

 

        ung intelligent turtle
        oung intelligent turtle
        young intelligent turtle
        young intelligent turtle
        A young intelligent turtle

 

        Note:
        如果你输入 "u" 两次,你的文本恢复原样,那应该是你的 Vim 被配置在 Vi 兼容 模式了。看这里修正这个问题:|not-compatible|。 本文假定你工作在 "Vim 的方式"。你可能更喜欢旧的 Vi 的模式,但是你必须 小心本文中的一些小区别。

 


重做

 

如果你撤销得太多,你可以输入CTRL-R(redo)回退前一个命令。换句话说,它撤销一个撤销。要看执行的例子,输入CTRL-R两次。字符 A 和它后面的空格就出现了:

 

        young intelligent turtle

 

有一个特殊版本的撤销命令:"U" (行撤销)。行撤销命令撤销所有在前一个编辑行上的操作。 输入这些命令两次取消前一个 "U":

 

        A very intelligent turtle
          xxxx                  删除 very

 

        A intelligent turtle
                      xxxxxx            删除turtle

 

        A intelligent
                                用 "U" 恢复行
        A very intelligent turtle
                                用 "u" 撤销 "U"
        A intelligent

 

"U" 命令本身就是一个改变操作,"u" 命令撤销该操作,CTRL-R 命令重做该操作。有点乱吧, 但不用担心,用 "u" 和 CTRL-R 命令你可以切换到任何你编辑过的状态。

-----------------------------------------------------------------------------

 

*02.6*  其它编辑命令

 

Vim 有大量的命令可以修改文本。参见|Q_in|和下文。这里是一些经常用到的:添加"i" 命令在光标所在字符前面插入字符。一般情况下,这就够用了,但如果你刚好想在行尾加东西怎么办?要解决这个问题,你需要在文本后插入字符。这通过 "a" (append)
命令实现。
    例如,要把如下行

 

        and that's not saying much for the turtle.

改为 
        and that's not saying much for the turtle!!!

 

把光标移到行尾的句号上。然后输入 "x" 删除它。现在光标处于一行的尾部了,现在输入

 

        a!!!<Esc>

 

添加三个感叹号到 turtle 的 "e" 后面:

 

        and that's not saying much for the turtle!!!

 


开始一个新行

 

"o" 命令在光标下方建立一个新的空行,并把 Vim 切换到插入模式。然后你可以在这个新行内输入文本了。
    假定你的光标在下面两行中第一行的某个地方:

 

        A very intelligent turtle
        Found programming UNIX a hurdle

 

如果你现在用 "o" 命令并输入新的文字:

 


        oThat liked using Vim<Esc>

 

结果会是:

 

        A very intelligent turtle
        That liked using Vim
        Found programming UNIX a hurdle

 

"O" 命令(大写)在光标上方打开一个新行。

 


指定次数

 

假定你想向上移动 9 行,你可以输入 "kkkkkkkkk" 或者你可以输入"9k"。实际上,你可以在很多命令前面加一个数字。例如在这章的前面,你通过输入 "a!!!<Esc>" 增加三个感叹号。另一个方法是使用命令 "3a!<Esc>"。次数 3 要求把后面的命令执行三次。同样的,要删除三个字符,可以使用 "3x"。次数总是放在要被处理多次的命令的前面。

 

 

 

--------------------------------------------------------------------------------

 

 

 

 

 

 

*02.7*  退出

使用 "ZZ" 命令可以退出。这个命令保存文件并退出。
        Note:
        与其他编辑器不一样,Vim 不会自动建立一个备份文件。如果你输入 "ZZ", 你的修改立即生效并且不能恢复。你可以配置 Vim 让它产生一个备份文件。 
      
放弃修改

有时你会做了一系列的修改才突然发现还不如编辑之前。不用担心,Vim 有“放弃修改 并退出”的命令,那就是:

        :q!

别忘了按回车使你的命令生效。

这个命令执行的细节是:命令有三部分,包括冒号(:),它使 Vim 进入命令模式,q 命令,它告诉 Vim 退出,而感叹号是强制命令修饰符。 这里,强制命令修饰符是必要的,它强制性地要求 Vim 放弃修改并退出。如果你只是输入":q",Vim 会显示一个错误信息并拒绝退出:

        E37: No write since last change (use ! to override)

通过指定强制执行,你实际上在告诉 Vim:“我知道我所做的看起来很傻,但我长大了,知道自己在做什么。”

如果你放弃修改后还想重新编辑,用 ":e!" 命令可以重新装载原来的文件。

posted @ 2013-10-24 10:20  泉水叮~咚  阅读(304)  评论(0)    收藏  举报