`

我使用过的Linux命令之vi - 广泛使用的文本编辑器

阅读更多

我使用过的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/

 

 

返回 我使用过的Linux命令系列总目录

 

1
3
分享到:
评论
2 楼 codingstandards 2011-07-04  
linvar 写道
楼主, 我们需要best practice 

你讲得很对,“常用参数”部分其实就是我最常用到的vi用法。因为vi的用法实在太多,后面几个“相关资料”就很好。
1 楼 linvar 2011-07-02  
楼主, 我们需要best practice 

相关推荐

    Linux操作系统Vi-文本编辑器实验报告.doc

    Vi 文本编辑器是 Linux 操作系统中的一种全屏幕文本编辑器,具有文本编辑所需的所有功能,适用于各种版本的 Unix/Linux,适用于各种类型的终端,使用灵活快捷。 Vi 文本编辑器有三种基本工作模式:编辑模式、插入...

    linuxvi命令详解-屏幕文本编辑器Vi.pdf

    linuxvi命令详解-屏幕文本编辑器Vi.pdf

    linuxvi命令详解-屏幕文本编辑器Vi整理.pdf

    linuxvi命令详解-屏幕文本编辑器Vi整理.pdf

    linux_vi命令详解-屏幕文本编辑器Vi

    ### Linux VI命令详解:屏幕文本编辑器Vi #### 引言 在Linux系统中,文本编辑器是不可或缺的工具,广泛应用于文件创建、文本编辑、编程等场景。其中,Vi编辑器作为全屏幕编辑器的代表,自诞生以来便深受用户喜爱。...

    linuxvi命令详解-屏幕文本编辑器Vi[汇编].pdf

    linuxvi命令详解-屏幕文本编辑器Vi[汇编].pdf

    Linux常用命令-Vi-简单Shell编程.zip_linux常用命令_vi

    - Vi(Visual Editor)是Linux中最常用的文本编辑器之一,具有全屏幕编辑和命令模式两种操作方式。 - 在命令模式下,你可以通过键入命令来移动光标、删除文本、复制和粘贴等。 - 转换到插入模式(Insert mode),...

    虚拟机-Linux-vi文本编辑器

    Linux中的vi编辑器是系统管理员和开发者们最常使用的文本编辑工具之一,它以其高效和灵活性而备受青睐。vi(Visual Editor)编辑器是类Unix系统中的标准编辑器,而vim(Vi IMproved)则是vi的增强版,包含了更多的...

    Linux系统基本操作命令与vi编辑器使用

    vi编辑器是一个功能强大且灵活的文本编辑器,广泛应用于Unix和Linux系统中。vi编辑器有三种运行模式:normal模式、insert模式和command模式。 1. normal模式 在normal模式下,可以使用以下命令: * i:进入insert...

    Linux操作实验-练习用pico 、vi、emacs 编辑器编辑文本文件

    ### Linux操作实验——掌握pico、vi与emacs编辑器 #### 实验背景及目标 ...通过上述步骤,用户能够系统地学习并实践Linux环境下pico、vi与emacs三种常用文本编辑器的基本操作,从而提高在Linux平台上的工作效率。

    linux文本编辑器-VI编辑器

    "Linux 文本编辑器-VI 编辑器" Linux 文本编辑器-VI 编辑器是 Linux 操作系统中的一种文本编辑器,提供了创建文件、打开存在的文件、复制和粘贴文本、查询文本、处理大量数据等基本功能。 Vi 编辑器简介 --------...

    Linux文本编辑器vi的使用

    ### Linux文本编辑器vi的使用 #### 一、vi编辑器概述 vi是Linux乃至UNIX中最常用且功能强大的文本编辑器之一。对于Linux系统管理员来说,掌握vi编辑器的使用至关重要,因为它几乎适用于所有类型的文本文件编辑,...

    linux下Vi编辑器命令大全

    Vi编辑器是Unix及类Unix操作系统(包括Linux)中广泛使用的文本编辑工具。Vi编辑器具备强大的功能和丰富的命令集,适用于从简单的文本编辑到复杂的脚本编写等多种场景。本文旨在详细介绍Vi编辑器的基本操作、光标...

    linux vi文本编辑器

    ### Linux VI文本编辑器:深度解析与操作指南 在Linux操作系统中,VI(Visual Editor)是一种功能强大且广泛使用的文本编辑器。对于任何Linux用户或系统管理员而言,掌握VI编辑器的基本操作是至关重要的技能之一。...

    linux实验报告vi编辑器的使用.pdf

    Vi编辑器是Linux系统中最基本的文本编辑器,系统管理员的重要工作就是修改与设定某些重要软件的配置文件,因此至少得要学会一种以上的命令界面文本编辑器。Vi编辑器可以用不同颜色显示文字内容,还能够进行诸如shell...

    linux下Vi编辑器常用命令

    ### Linux 下 Vi 编辑器常用命令详解 #### 一、进入 vi 的命令 1. **vi filename**:此命令用于打开或编辑...以上就是关于 Linux 下 Vi 编辑器常用命令的详细介绍,通过掌握这些命令,可以极大地提高文本编辑的效率。

    文本编辑器vi 使用

    **文本编辑器vi 使用** `vi`(Visual Editor)是UNIX和类UNIX系统中的一个强大的文本编辑器,它以其高效、灵活和强大的功能而闻名。虽然最初设计为命令行界面下的工具,但随着时代的发展,它现在也常被称为`vim`...

    linux -vi-gcc 命令

    根据给定文件的信息,我们可以总结出关于 Linux 下的 vi 编辑器以及 gcc 编译器的一些关键知识点。 ### 一、vi 编辑器 #### 1. vi 编辑器模式 vi 编辑器有三种主要的工作模式: - **命令模式(Command Mode)**:...

    04-RHEL7-Linux文本编辑器使用

    RHEL7-Linux文本编辑器使用”指出了本文档的主要内容是关于在RHEL7(Red Hat Enterprise Linux 7)环境下使用Linux文本编辑器,而特别提到了VIM编辑器,这是因为VIM是Linux系统中最常用的文本编辑器之一。...

    Linux实验六vi文本编辑器[整理].pdf

    VI 文本编辑器是 Linux 操作系统中的一种功能强大的文本编辑器,广泛应用于编程、文档编辑和文件管理等领域。下面是 VI 文本编辑器的实验操作指南: 一、VI 文本编辑器基本操作 * 启动 VI 文本编辑器:在 Linux ...

    linux上vi编辑器常用命令

    Vi编辑器作为Linux平台下一款轻量级的文本编辑工具,在系统管理、软件开发等领域具有广泛的应用价值。尤其是在Ubuntu这样的发行版中,尽管相较于Red Hat可能存在一些差异性体验,但Vi编辑器的强大功能依然不容小觑。...

Global site tag (gtag.js) - Google Analytics