赞
踩
Vim是全屏编辑器,因此不会像ed那样只显示一行,对于Vim,ed命令编辑的一般都是当前行,这就相当于ed中所显示的那行,实际上也是文件的当前行.
:[range] cmd args
- := -- 打印文件的总行数
- :/pattern/= -- 打印匹配pattern的行号
- :w -- 把当前buffer写入文件,也就是说进行保存动作
- :w! -- 强制保存,如果是只读文件也能进行保存动作
- :q -- 退出当前文件,前提是已经保存过了,如果没有保存Vim会提醒你的.
- :q! -- 强行退出,也就是说无论已经保存过与否都退出,可能会丢失所做的修改
- :wq -- 保存并退出.
- :wa -- 把所有的buffer写入文件,也即保存所有的文件(如果你打开了多个文件的话).
- :x -- 保存并退出,程序员最应该使用的命令.它与:wq的区别在于,如果文件没有修改:x是不会修改文件的时间戳,因此就不需要重新编译.而:wq命令,即使文件未修改也会修改时间戳,也即会触发重新编译.
- :xa -- 保存并退出所有的文件,如果打开了多个文件话.
- :w a-new-file -- 另存为a-new-file
- :[range] w a-new-file -- 把[range]所指定的范围的内容另存为a-new-file
- :[range] w >> another-file -- 把[range]所指定的范围的内容追加到another-file中
- :r file or :read file -- 把file文件中的内容读出来放到当前行下面.细节是打开file,拷贝其中的内容然后粘贴到当前行下面.
- :n r file -- 把file中的拷贝到第n行下面
- :/pattern/ r file -- 把file中的内容拷贝到第一个匹配pattern的行下面
- :e another-file -- 把another-file读入内存并开始编辑
- :e! -- 舍弃所有的未保存的修改,回到上一次文件所保存的状态
0. 不指定行号则通常代表当前行
1. 具体的绝对的行号,行号是从1开始到第x行,x为文件总行数.
- :n, m -- 文件的第n行到第m行,包含n和m
如:2, 10则是第2行到第10行
如果n=0或n=-1则n自动转成1;如果m大于x则转成x
特殊的行号
- .(句点) -- 当前行
- $ -- 最后一行
如:.,$则表示文件中的所有行
- % -- 所有行等同于:1,x和:.,$
2. 相对于当前行和相对行号
- +/-n -- +表示从当前向第n行;-表示当前行向前减n行
- +/- -- 前一行或后一行
如:-,+ d -- 删除当前行,上一行和下一行,共三行;:-2,+2 d删除当前行,前二行后二行,共五行
用搜索匹配来指定行
- /pattern/ -- 指定的是匹配pattern的下一行,也即当前行后面的第一个匹配pattern的行.这个只能指定一行
- /pattern/, /pattern2/ -- 第一个含有pattern的行到第一个含有pattern2的行.
注意,如果指定范围时后面的行号小于前面的行号,那么Vim会提示你[range]边界指示反了,要不要swap一下.
重新指定当前行
如:
- n; m -- 把第n行视为当前行.默认情况下光标所在为当前行.这个命令能快速指定当前行,可以省不少的力气
- :40; +50 d -- 删除第40行到第50行.这相当于:40跳到40行,然后执行+50 d.
- :/old/; +10 d -- 删除从含有old的行到其下面的10行.这相当于然后搜索到含有old的行:/old/,然后执行:+10 d
就是打开后进行一些操作
如,$vim +/"your life" file -- 打开后跳到"your life"的那行
$vim +n file -- 打开file文件后跳到第n行 $vim + file -- 打开file文件后跳到最后一行 $vim +/pattern file -- 打开file文件后跳到含有pattern的那行
1. 命令行启动多个文件
$vim a.txt b.txt c.txt
2. 已经在编辑一个文件时,可以用:e命令开始编辑另外一个文件
3. args -- 显示所有的文件列表,当前的文件会以[filename]形式标出
- :e another-file
$vim a.txt b.txt c.txt :args ----->>>> [a.txt] b.txt c.txt :n ----->>>> a.txt [b.txt] c.txt
4. 在文件之间进行切换
- :p[rev] -- 前一个文件
- :n[ext] -- 下一个文件
- :last -- 最后一个文件
1. 启动方式:当编辑一个文件的时候,用e命令读入并编辑另外一个文件就进入了双文件模式
2. 二个文件速记符,相当于字符串宏,内容就是所编辑的二个文件名
3. 示例
- % -- 当前文件名
- # -- 前一个文件
$vim a.txt :w -- 保存修改 :e b.txt -- 开始编辑另外一个文件b.txt :e # -- 开始编辑前一个文件,也就是文件a.txt :e # -- 开始编辑前一个文件,这时是b.txt :w %.bak -- 另存当前文件为b.txt.bak(此时当前文件%为b.txt) :r # -- 拷贝a.txt的内容到b.txt当前行下 :split # -- 在新窗口中打开a.txt :e! # -- 舍弃当前文件修改,并开始编辑a.txt
如
这是一个很常用的场景,所以就有了更快捷与方便的方法,可以shell或sh命令来做相同的事情
:x -- 保存并退出到终端;做想做的事情 $do all stuff you want $vim file -- 再次打开并编辑文件
sh命令很实用.比如常见的编辑编译运行调试例行,编译后就可以用:sh命令退出到Shell进行测试和调试,然后再exit到编辑中.
:sh -- 回到终端 $ do you stuff $exit -- 当完事后用exit命令就会退出终端然后回到编辑器.
但如果没有makefile怎么办呢,特别是某些单个文件之类的.每个文件的编译目标和源码都不一样,这时就可以写一个简单的makefile,不指定具体的编译目标和源码文件,而只是定义一些简单的编译选项和规则:
这样,在Vim中:
#makefile LDLIBS= -lm CFLAGS= -g -std=c99 -Wall -Werror
$vim hello.c
edit edit
:make hello -- 编译hello
:cc -- 显示编译错误信息
:cn -- 下一个
:cn -- 下一个
:make hello -- 编译 ... Okay
:sh -- 进入Shell
$./hello -- 运行并测试程序, 有Bug
$gdb hello -- 调试 ... 找到了问题
$exit
修复运行时问题
:make hello
:sh
$./hello
$exit -- 回到编辑器
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。