- 浏览: 4732752 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
bzhao:
你也应该可以这样:(not tested)./rbtunnel ...
在Bash脚本中怎么关闭文件描述符? -
bzhao:
如果有A进程原代码情况下,通过如下调用,把他的子进程继承关闭则 ...
在Bash脚本中怎么关闭文件描述符? -
Master-Gao:
楼主咋没分析下源码呢?
我使用过的Linux命令之dirname - 截取给定路径的目录部分 -
jiedushi:
tail -F 就可以吧
Linux下实时跟踪log4j日志文件的bash脚本 - 增强了tail -f的功能 -
java_is_new:
新手学习了,就是不明白为一个网卡配多个ip有什么用
我使用过的Linux命令之ifconfig - 网络配置命令
我使用过的Linux命令之vi - 广泛使用的文本编辑器
本文链接:http://codingstandards.iteye.com/blog/966982 (转载请注明出处)
用途说明
vi是Linux/Unix中最常用的文本编辑器,它是全屏幕的编辑器,类似DOS/Windows下的edit程序,但它的使用方式与edit很不一 样。vi是“Visual Interface”的缩略词,来源于另外一个文本编辑器ex的命令visual。vi是一种模式编辑器。不同的按键可以更改不同的“模式 (mode)”;比如说:在“插入模式(insert mode)”下,输入的文本会直接被插入到文档;当按下“退出键(ESC)”,“插入模式”就会更改为“命令模式(command mode)”,并且光标的移动和功能的编辑都由字母来响应,例如:“j”用来移动光标到下一行;“k”用来移动光标到上一行,“x”可以删除当前光标处的 字符,“i”可以返回到“插入模式”(也可以使用方向键)。在“命令模式”下,敲入的键(字母)并不会插入到文档,这使得新接触vi的用户很迷惑。
在Linux下,我们在使用vi时实际使用的是vim(Vi IMproved),vim是一个与vi向上兼容的文本编辑器(Vim is a text editor that is upwards compatible to Vi)。说实话,vi中的命令实在太多,无法全部掌握,本文只列举了一些常用的,想对vi/vim有更多了解的话,可以参考后面的相关资料部分。
常用参数
格式:vi <file>
使用vi编辑<file>指定的文件。
格式:vi -R <file>
格式:view <file>
用vi打开<file>指定的文件,但不能编辑,即只读模式。要达到类似的效果也可以使用more/less。
格式:vi <file1> <file2>
格式:vi <file1> <file2> <file3>
用vi打开多个文件编辑。如果在编辑完第一个文件之后按:q退出,vi就会提示“E173: 还有 2 个文件未编辑”,可以使用:n继续编辑下一个文件。
格式:vi +n <file>
用vi编辑<file>指定的文件,并且将光标定位到第n行,从1开始计数。如:vi +2 1.txt。
格式:vi +/pattern <file>
用vi编辑<file>指定的文件,并且将光标定位到符合pattern模式的行。如:vi +/world 1.txt。
下面对vi下常用的编辑命令做一个小结:注意大小写,效果是不一样的。
ESC 退出插入模式;有时候为了确认不是在插入模式,可多按ESC键,因为下面的命令都是在命令模式执行的。
小写i 进入插入模式,插入点在当前光标之前;
小写a 进入插入模式,插入点在当前光标之后;
大写A 进入插入模式,插入点在当前行末尾;
小写o 进入插入模式,插入点在当前行后,新增一行;
大写O 进入插入模式,插入点在当前行前,新增一行;
下面是常用的删除命令:
小写x 删除当前光标后的字符;
大写X 删除当前光标前得字符;
小写dw 删除一个单词;
小写dd 删除一行;
小写d$ 删除至行尾;
下面是常用的移动光标的命令:
上下左右箭头 这个你懂的;还有hjkl这四个字符分别是左下上右四个方向移动光标,不常用;
数字0 定位到行首;
美元符$ 定位到行尾;
下面几个是常用的搜索命令:
/pattern 查找pattern匹配的位置
n 定位到下一个匹配的位置
N 定位到前一个匹配的位置
?pattern 与/pattern相反,它是反向查找的,同样的n和N的定位方向也是相反的。
注意pattern为正则表达式,但与java里面的有些不一样。比如()不是元字符,\(\)才是。
还有一些常用的行命令,即冒号跟上一些字符然后回车,如:
:0 定位到第一行;
:$ 定位到最后一行;
:n 定位到n行,其中n为任意数字;
:.= 显示当前行号;很多时候都需要确定当前的行号;
下面是常用的替换命令:
:%s/pattern/replace/g 将符合pattern模式的所有字符串替换为replace,如 :%s/123/456/g
:n,m/pattern/replace/g 将符合pattern模式的所有字符串替换为replace,但只对从n到m行之间的替换。
注意%s相当于1,$,即从第1到最后一行。
保存和退出命令:
:w 保存
:wq或:x 保存并退出
:q! 不保存,退出
使用示例
示例一 RHEL5.5下vi命令不支持语法高亮显示的问题
在安装了RHEL5.5后,我发现一个问题,在使用vi编辑c代码文件时,不支持语法高亮显示,开始时以为是没有安装vim-enhanced软件包,一查之后发现这个猜测错了,如下所示:
[root@jfht ~]# rpm -qa | grep vim
vim-minimal-7.0.109-6.el5
vim-common-7.0.109-6.el5
vim-enhanced-7.0.109-6.el5
[root@jfht ~]#
这个问题让我迷惑了很久,后来发现在这个版本下vi和vim两个程序的表现不一样,直接用vim命令就没有问题了,在/etc/profile的尾部增加了一个别名(alias)就可以使用vi命令获得同样的效果了,如下所示:
alias vi="vim"
保存/etc/profile重新登录,就会发现vi可以支持语法高亮显示了。
示例二 语法高亮显示配置文件
vim支持语法高亮显示,每种语言它定义了语法显示样式文件,通常在/usr /share/vim/vim70下(注意目录中的vim版本)找到filetype.vim,其中syntax目录下有很多.vim文件,它定义了各种 语言的语法高亮显示规则。你也可以增加自己的语法规则,当然需要熟悉其中的规则。
[root@web ~]# less /usr/share/vim/vim70/filetype.vim
" Vim support file to detect file types
"
" Maintainer: Bram Moolenaar <Bram@vim.org>
" Last Change: 2006 Aug 25
" Listen very carefully, I will say this only once
if exists("did_load_filetypes")
finish
endif
let did_load_filetypes = 1
" Line continuation is used here, remove 'C' from 'cpoptions'
let s:cpo_save = &cpo
set cpo&vim
augroup filetypedetect
" Ignored extensions
if exists("*fnameescape")
au BufNewFile,BufRead ?\+.orig,?\+.bak,?\+.old,?\+.new,?\+.rpmsave,?\+.rpmnew
\ exe "doau filetypedetect BufRead " . fnameescape(expand("<afile>:r"))
au BufNewFile,BufRead *~
\ let s:name = expand("<afile>") |
\ let s:short = substitute(s:name, '\~$', '', '') |
\ if s:name != s:short && s:short != "" |
\ exe "doau filetypedetect BufRead " . fnameescape(s:short) |
\ endif |
\ unlet s:name s:short
au BufNewFile,BufRead ?\+.in
\ if expand("<afile>:t") != "configure.in" |
\ exe "doau filetypedetect BufRead " . fnameescape(expand("<afile>:r")) |
\ endif
elseif &verbose > 0
echomsg "Warning: some filetypes will not be recognized because this version of Vim does not have fnameescape()"
endif
" Pattern used to match file names which should not be inspected.
" Currently finds compressed files.
if !exists("g:ft_ignore_pat")
let g:ft_ignore_pat = '\.\(Z\|gz\|bz2\|zip\|tgz\)$'
[root@web ~]#
[root@web ~]# less /usr/share/vim/vim70/syntax/c.vim
" Vim syntax file
" Language: C
" Maintainer: Bram Moolenaar <Bram@vim.org>
" Last Change: 2006 May 01
" Quit when a (custom) syntax file was already loaded
if exists("b:current_syntax")
finish
endif
" A bunch of useful C keywords
syn keyword cStatement goto break return continue asm
syn keyword cLabel case default
syn keyword cConditional if else switch
syn keyword cRepeat while for do
syn keyword cTodo contained TODO FIXME XXX
" cCommentGroup allows adding matches for special things in comments
syn cluster cCommentGroup contains=cTodo
" String and Character constants
" Highlight special characters (those which have a backslash) differently
syn match cSpecial display contained "\\\(x\x\+\|\o\{1,3}\|.\|$\)"
if !exists("c_no_utf")
syn match cSpecial display contained "\\\(u\x\{4}\|U\x\{8}\)"
endif
if exists("c_no_cformat")
syn region cString start=+L\="+ skip=+\\\\\|\\"+ end=+"+ contains=cSpecial,@Spell
" cCppString: same as cString, but ends at end of line
syn region cCppString start=+L\="+ skip=+\\\\\|\\"\|\\$+ excludenl end=+"+ end='$' contains=cSpecial,@Spell
else
if !exists("c_no_c99") " ISO C99
syn match cFormat display "%\(\d\+\$\)\=[-+'
#0*]*\(\d*\|\*\|\*\d\+\$\)\(\.\(\d*\|\*\|\*\d\+\$\)\)\=\([hlLjzt]\|ll\|hh\)\=\([aAbdiuoxXDOUfFeEgGcCsSpn]\|\[\^\=.[^]]*\]\)"
contained
else
syn match cFormat display "%\(\d\+\$\)\=[-+'
#0*]*\(\d*\|\*\|\*\d\+\$\)\(\.\(\d*\|\*\|\*\d\+\$\)\)\=\([hlL]\|ll\)\=\([bdiuoxXDOUfeEgGcCsSpn]\|\[\^\=.[^]]*\]\)"
contained
endif
syn match cFormat display "%%" contained
[root@web ~]#
示例三 在vi中进行字符串替换(2011.08.04)
在C++中,我们常用std::cerr和std::cout打印一些调试信息,在调试好程序之后又要将其去掉。怎么做才比较快?在vi中可以通过下面的命令来实现:
在std::cerr前面加上注释:
:%s/std::cerr/\/\/std::cerr/g
在std::cout前面加上注释:
:%s/std::cout/\/\/std::cout/g
要注意,/是个特殊字符,它被用作搜索范围、源字符串、目标字符串、选项之间的分隔符,因此当/作为目标字符串的一部分时,必须转义。
问题思考
相关资料
【1】维基百科的vi词条
http://zh.wikipedia.org/wiki/Vi
【2】LinuxSir.Org 文件编辑器 vi
http://www.linuxsir.org/main/?q=node/206
【3】鳥哥的 Linux 私房菜 vim 程式編輯器
http://linux.vbird.org/linux_basic/0310vi.php
【4】酷勤 vi/vim 快捷键盘对照图(含中英文)
http://www.kuqin.com/developtool/20090628/59303.html
【5】易水博客 vi/vim使用进阶: 目录
http://easwy.com/blog/archives/advanced-vim-skills-catalog/
评论
你讲得很对,“常用参数”部分其实就是我最常用到的vi用法。因为vi的用法实在太多,后面几个“相关资料”就很好。
发表评论
-
在Linux用tar归档压缩文件时忽略某些文件和目录
2013-02-01 10:19 16927在Linux下,常用tar对文 ... -
使用nmap扫描服务器端口的一次操作
2012-11-01 17:00 15075使用nmap扫描服务器端口的一次操作 本文来自:http ... -
我使用过的Linux命令之wget - ooo
2011-09-14 13:10 0我使用过的Linux命令之wg ... -
推荐一篇学习Vim使用的好文:酷壳 - 简明 Vim 练级攻略
2011-09-09 12:53 9085简明 Vim 练级攻略 http://coolshell.c ... -
推荐一篇学习Vim使用的好文:酷壳 - 简明 Vim 练级攻略
2011-09-09 12:49 1简明 Vim 练级攻略 http://coolshell.c ... -
我使用过的Linux命令之:(冒号) - 啥也不做(除了……)
2011-08-29 13:18 11984我使用过的Linux命令之: ... -
我使用过的Linux命令之date - 显示、修改系统日期时间
2011-08-25 09:21 41905我使用过的Linux命令之da ... -
我使用过的Linux命令之declare - 声明shell变量(不知道没关系、知道了就更好的内建命令)
2011-08-16 09:22 21740我使用过的Linux命令之declare - 声明shell变 ... -
我使用过的Linux命令之alias - 设置命令的别名,让 Linux 命令更简练
2011-08-11 09:31 28717我使用过的Linux命令之alias - 设置命令的别名,让 ... -
我使用过的Linux命令之ar - 创建静态库.a文件
2011-08-08 10:40 51816我使用过的Linux命令之ar - 创建静态库.a文件 本 ... -
我使用过的Linux命令之crontab - 设置例行任务(类似于Windows中的任务计划)
2011-08-04 22:26 9691我使用过的Linux命令之crontab - 设置例行任务(类 ... -
我使用过的Linux命令之chmod - 改变文件/目录的访问权限
2011-08-03 21:33 10641我使用过的Linux命令之chmod - 改变文件/目录的访问 ... -
我使用过的Linux命令之export - 设置或显示环境变量
2011-08-02 19:55 25371我使用过的Linux命令之export - 设置或显示环境变量 ... -
我使用过的Linux命令之wc - 统计文件行数、单词数或字节数
2011-07-26 10:50 28933我使用过的Linux命令之wc - 统计文件行数、单词数或字节 ... -
我使用过的Linux命令之groupdel - 删除群组
2011-07-22 22:13 9620我使用过的Linux命令之gr ... -
我使用过的Linux命令之ifconfig - 网络配置命令
2011-07-21 20:43 60375我使用过的Linux命令之ifconfig - 网络配置命令 ... -
我使用过的Linux命令之ll - 列出文件/目录的详细信息
2011-07-20 21:22 7104我使用过的Linux命令之ll ... -
我使用过的Linux命令之mkdir - 创建目录
2011-07-20 20:58 13605我使用过的Linux命令之mkdir - 创建目录 本文链 ... -
我使用过的Linux命令之perror - 解释错误代码
2011-07-18 20:29 24969我使用过的Linux命令之perror - 解释错误代码 ... -
我使用过的Linux命令之ping - 测试与目标主机的连通性
2011-07-16 10:46 26256我使用过的Linux命令之ping - 测试与目标主机的连通性 ...
相关推荐
Linux操作系统Vi-文本编辑器实验报告.doc
linuxvi命令详解-屏幕文本编辑器Vi.pdf
linuxvi命令详解-屏幕文本编辑器Vi整理.pdf
Linux中最常用的文本编辑器-vi文本编辑器,要使用vi编辑器的小伙伴们欢迎来看呀
linux_vi命令详解-屏幕文本编辑器Vi
linuxvi命令详解-屏幕文本编辑器Vi[汇编].pdf
Linux下最基本的文本编辑器vi使用方法与技巧
Linux文本编辑器vi的使用 Linux文本编辑器vi的使用
VI编辑器是LINUX平台下一个一款小巧的文本编辑软件,在不得已的情况下,用VI编辑配置文件非常方便.以前一直用REDHAT,下面的VI可以支持 方向箭头,pagedown\up,等其他一些功能键,非常好用.但最近用UBUNTU的时候,发现在...
Linux下的文本编辑器有很多种,vi 是最常用的,也是各版本Linux的标配。注意,vi 仅仅是一个文本编辑器,可以给字符着色,可以自动补全,但是不像 Windows 下的 word 有排版功能。 · 所有版本的 Linux 都带有 vi ...
linux vi文本编辑器使用说明 。
vi全屏幕编辑器常用命令 vi全屏幕编辑器常用命令 vi全屏幕编辑器常用命令 vi全屏幕编辑器常用命令 vi全屏幕编辑器常用命令 vi全屏幕编辑器常用命令 vi全屏幕编辑器常用命令
1. 练习用pico 编辑器编辑文本文件; 2. 练习用vi编辑器编辑文本文件; 3. 练习用emacs 编辑器编辑文本文件;
linuxvi命令详解屏幕文本编辑器Vi.pdf
Linux文本编辑器 - vi;Linux文本编辑器 - vim;vim编辑器命令格式;vim基础操作 - 打开文件;vim基础操作 - 移动光标;vim基础操作 - 数据操作;vim基础操作 - 行号显示与取消;vim基础操作 - 查找与替换;vim基础操作 - ...
vi编辑器的使用 一、vi的工作模式 vi有两种工作模式: 编辑模式:用来输入和编辑文件的模式,屏幕上会显示用户的键入,按键不是被解释为命令执行,而是作为文本写到用户的文件中。 指令模式:用来编辑、存盘和...
linux下的常用命令与文本编辑器vi
Linux文件编辑器命令详解 Linux文件编辑器 Vi(Vim) 关键字: vim 1、关于文本编辑器; 文本编辑器有很多,比如图形模式的gedit、kwrite、OpenOffice ... ... ,文本模式下的编辑器有vi、vim(vi的增强版本)和...
在/home目录下使用vi编辑器创建文本文件test,输入内容“I Like Linux!”并保存,然后使用cat命令将文件中的内容显示出来。(截图) 用vi编辑器打开test文件继续添加一下内容: 1234567890123456 Abcdefghjkabcd ...
基本功能: 1) 创建文件 2) 打开存在的文件 3) 复制和粘贴文本 4) 查询文本 5) 处理大量数据