基本 vi 命令
前言
本文内容翻译 Basic vi Command, Colorado State University, 翻译原文的大部分内容。
本文介绍的是 UNIX 下的 vi 编辑器,和 Linux 下常用的 vim 会略有不同。由于 vim 是从 vi 发展而来的文本编辑器,所以本文的内容也值得一读。
我把新学到的或者值得注意的命令用黄色高亮了出来
什么是 vi ?
UNIX 操作系统的默认编辑器就是 vi (visual editor)。可见 vi 是可视化编辑器的缩写。UNIX 环境下可替换的编辑器还包括 pico 和 emacs,emacs 是 GNU 的产品。
UNIX 的 vi 编辑器有是一个全屏编辑器,有两个操作模式:
1. 命令模式 (Command mode), 发送命令可以操作文件。
2. 插入模式 (Insert mode),可以对当前文件插入文本。
在命令模式下,每一个输入的字符都是一个命令,操控着当前被编辑的文本;在命令模式下,一个输入的字符可能使得 vi 编辑器进入插入模式。在插入模式,每一个输入的字符都会添加到文件文本中;按 <Esc> (Escape) 可以关闭插入模式。
在下面的表格中,最基本的有用的命令使用星号(*) 标识出来。
注:UNIX 和 vi 都是大小写敏感的。请注意使用正确的大小写,避免出现无法预计的结果。
下面记录一下基本的 vi 命令:
开始、结束 vi
启动 vi
输入 vi filename 启动 vi 。如果文件 filename 已存在,则该文件的第一页会被显示出来。如果该文件不存在,则创建一个空文件,你可以在里面输入文本。
* vi filename // 从第 1 行开始编辑文件 filename
编辑 vi
通常,在你离开 vi 时候,新建或被修改的文件会被保存。当然,也可以不保存就离开 vi 。
注意,无论什么时候按下冒号(:),光标都会移到屏幕的底部。这类命令在按下回车<Return>(or <Enter>) 键结束。
* :x<Return> // 退出 vi, 把修改的文件保存为原来调用时的文件名
* :wq<Return> // 同时
:q<Return> // 退出 vi
* :q!<Ruturn> // 不保存最后修改的内容,直接退出
移动光标
不像 windows 和 Mac 的编辑器,鼠标无法移动 vi 编辑器屏幕内的光标。你必须使用下面列出的命令。在一些 UNIX 平台,方向键也可以使用,但是,由于 vi 是基于 Qwerty 键盘(没有方向键的键盘)设计的,所以在 vi 上,方向键有时会产生奇怪的效果,应当避免使用。
如果你在 windows 和 UNIX 之间来回切换,你可能会觉得,移动光标方式的不同是是两个环境间最令人沮丧的不同点。
在下面列表中,字母前面的符合 ^ 代表输入该字母的同时要按下 <Ctrl> 键。
* j or <Return> [or ↓] // 光标向下移动一行
* k [or ↑] // 光标向上移动一行
* h or <返回> [or ←] // 光标向左移动一位
* l or <空格> [or →] // 光标向右移动一位
* 0(零) // 光标移动到当前行开始
* $ // 光标移动到当前行末尾
w // 光标移动到下一个单词开始位置
b // 光标移动到前一个单词开始位置
:0<Return> or 1G // 光标移动到文件第一行
:n<Return> or nG // 移动光标到第 n 行
:$<Return> or G // 移动光标到文件最后一行
屏幕操作
下面命令使得 vi 编辑器的屏幕上下移动多行,或者刷新。
^f // 向前(forward)移动一屏
^b // 向后(backward)移动一屏
^d // 向下(down / forward)移动半屏
^u // 向上(up / backward)移动半屏
^l // 重绘(redraw)屏幕
^r // 重绘(redraw)屏幕,移除已删行
增,改,删文本
不像 windows 编辑器,你无法把鼠标覆盖的文本替换,或删除。而是使用下面的命令进行操作。
插入添加文本
下面的命令允许你添加插入文本。每一个命令都 vi 编辑器进入插入模式;因此,必须按<Esc>键来结束文本输入,把 vi 编辑器变回命令模式。
* i // 在光标前插入文本,直到按下 <Esc>
I // 在当前行的开始位置插入文本,直到按下 <Esc>
* a // 在光标后面插入文本,直到按下 <Esc>
A // 在当前行末尾插入文本,直到按下 <Esc>
* o // 在当前行下面插入一行,并输入文本,直到按下 <Esc>
* O // 在当前行上面插入一行,并输入文本,直到按下 <Esc>
修改文本
下面命令运行你修改文本
* r // 替换光标下的一个字符( 无需 <Esc>)
R // 替换字符,从光标位置开始,直到按下 <Esc>
删除文本
下面命令允许你删除文本
* x // 删除光标下的一个字符
Nx // 从光标位置开始,删除 N 个字符
dw // 删掉光标下的一个单词
dNw // 删掉光标位置开始后的 N 个单词,例如,d5w 删除 5 个单词
D // 删除光标位置开始的行尾部分
* dd // 删除当前行
Ndd // 删除 N 行,从当前行开始
复制粘贴文本
下面命令运行你复制粘贴文本
yy // 复制(yank)当前行到缓存(buffer)
Nyy or yNy // 把当前行后面的 N 行复制到缓存(buffer)
p // 在当前行后面粘贴(paste)缓存中的文本
其他命令
搜索文本
替换一个单词或者短语,这在文本编辑中经常出现。需要定位一个指定的字符串,可以使用下面的命令:
/string // 在文本中,向前搜索 string 的出现位置
?string // 在文本中,向后搜索 string 的出现位置
n // 查找下一个
N // 查找上一个
确定行号
有时,能够确定当前行行号或者文件的总行数是很有用的。
:.= // 在屏幕底部,显示当前行行号
:= // 在屏幕底部,显示文件的总行数
^g // 在屏幕底部,即显示当前行行号,右显示文件总行数
保存,读取文件
下面的命令允许你读取其他文件到当前文件,或者把当前文件另存为其他文件
:r filename<Return> // 读取文件 filename,然后把读取的内容插入到当前行后面
:w <Return> // 保存当前内容到原始文件
:w newfile<Return> // 把当前内容到另存为 newfile
:12,35w smallfile<Retrun> // 把 12 行到 15 行的内容保存到名为 smallfile 的文件中
:w! prefile<Return> // 把当前内容写入到之前已存在的文件 prefile 中。
基本 vi 命令的更多相关文章
- linux vi 命令大全
进入vi的命令 vi filename :打开或新建文件,并将光标置于第一行首 vi +n filename :打开文件,并将光标置于第n行首 vi + filename :打开文件,并将光标置于最后 ...
- linux下vi命令大全
进入vi的命令vi filename :打开或新建文件,并将光标置于第一行首vi +n filename :打开文件,并将光标置于第n行首vi + filename :打开文件,并将光标置于最后一行首 ...
- Linux下VI命令详细介绍
vi 是"Visual Interface" 的简称,它在Linux 上的地位就仿佛Edit 程序在DOS上一样.它可以执行输出.删除.查找.替换.块操作等众多文本操作,而且 ...
- VI 命令 gg 跳到第一行,dG 删除后面的所有内容
VI 命令 gg 跳到第一行,dG 删除后面的所有内容
- (转)linux下vi命令大全
http://www.cnblogs.com/88999660/articles/1581524.html 进入vi的命令 vi filename :打开或新建文件,并将光标置于第一行首 vi +n ...
- 关于linux vi命令替换的使用说明
转自:http://os.51cto.com/art/200907/140987.htm vi/vim 中可以使用 :s 命令来替换字符串.以前只会使用一种格式来全文替换,今天发现该命令有很多种写法( ...
- linux下vi命令大全[转]
进入vi的命令 vi filename :打开或新建文件,并将光标置于第一行首 vi +n filename :打开文件,并将光标置于第n行首 vi + filename :打开文件,并将光标置于最后 ...
- 介绍linux下vi命令的使用
功能最强大的编辑器之一——vivi是所有UNIX系统都会提供的屏幕编辑器,它提供了一个视窗设备,通过它可以编辑文件.当然,对UNIX系统略有所知的人,或多或少都觉得vi超级难用,但vi是最基本的编辑器 ...
- 10个你必须掌握的Linux超酷VI命令技巧
大部分Linux开发者对vi命令相当熟悉,可是遗憾的是,大部分开发者都只能掌握一些最常用的Linux vi命令,下面介绍的10个vi命令虽然很多不为人知,但是在实际应用中又能让你大大提高效率. 在使用 ...
- 10个你必须掌握的超酷VI命令技巧
摘要:大部分Linux开发者对vi命令相当熟悉,可是遗憾的是,大部分开发者都只能掌握一些最常用的Linux vi命令,下面介绍的10个vi命令虽然很多不为人知,但是在实际应用中又能让你大大提高效率. ...
随机推荐
- 获取context path或者basePath
转自:http://hexudonghot.blog.163.com/blog/static/532043422012112264411234/ 在jsp中获取context path或者basePa ...
- warning:1071 (42000) Specified key was too long;max key length is 1000 bytes
原因是mysql字段长度设置的太长了, 从而导致mysql在建立索引时,索引长度超过了mysql默认许可的长度 默认 Innodb 允许长度为 767 MyISAM 允许长度为 1000 官方说明 如 ...
- XML 序列化与PULL解析
简介 Pull解析XML XmlPullParser解析器的运行方式与SAX解析器相似.它提供了类似的事件(开始元素和结束元素),但需要使用parser.next()方法来提取它们.事件将作为数值代码 ...
- 对require.js 的使用进行总结
一.为什么要使用require.js 首先一个页面如果在加载多个js文件的时候,浏览器会停止网页渲染,加载文件越多,网页失去响应的时间就会越长:其次,由于js文件之间存在依赖关系,因此必须严格保证加载 ...
- redisbook笔记——redis内部数据结构
在Redis的内部,数据结构类型值由高效的数据结构和算法进行支持,并且在Redis自身的构建当中,也大量用到了这些数据结构. 这一部分将对Redis内存所使用的数据结构和算法进行介绍. 动态字符串 S ...
- 织梦dede自定义内容分页,datalist运用实例
在/plus文件夹中新建一个ceshi.php文件..<?php require(dirname(__FILE__)."/../include/common.inc.php" ...
- PHP 数据库 ODBC
PHP 数据库 ODBC ODBC 是一种应用程序编程接口(Application Programming Interface,API),使我们有能力连接到某个数据源(比如一个 MS Access 数 ...
- 02C#基础(1)
1.关键字 C#中定义了很多关键字,关键字是构成C#基本语法的,不用去背,用的多就记住了 2.标识符 标识符是用来给类.方法.变量等命名的 命名规则: (1)由字母.中文(不推荐).数字.下划线组成 ...
- XML约束
XML约束--能够看懂约束内容,根据约束内容写出符合规则的xml文件. DTD约束 1)导入dtd方式 内部导入 <!DOCTYPE note [ <!ELEMENT note (to,f ...
- WBS说明
work breakdown structure(WBS) 工作分解结构 (英语:Work Breakdown Structure, WBS)是一个详尽的,层次的(从全面到细节)的树形结构,由可交付成 ...