目录
本系列先前的随笔位于新浪博客
前言
Vi和Vim都是文本编辑器,不同的是Vim是Vi的升级版本,它不仅兼容Vi的所有指令,而且还有一些新的特性在里面。
Vim/Vi是一个功能强大的全屏幕文本编辑器,是Linux/UNIX上最常用的文本编辑器,主要用于使用Linux Sever时进行类似于DOS下批处理的Shell脚本编程,以及进行配置文件的修改,它的作用是建立、编辑、显示文本文件。
Vim/Vi没有菜单,只有命令
Vim/Vi的三种工作模式:
常用命令
1、插入命令
命令 | 作用 |
a(append) | 在光标后附加文本 |
A | 在本行行末附加文本,即光标移至行末并进入插入模式 |
i(insert) | 在光标前插入文本 |
I | 在本行行首插入文本,即光标移至行首并进入插入模式 |
o | 在光标下插入新行 |
O | 在光标上插入新行 |
2、定位命令
命令 | 作用 |
h、方向左键 | 光标左移一个字符 |
j、方向下键 | 光标下移一行 |
k、方向上键 | 光标上移一行 |
l、方向右键 | 光标右移一个字符 |
$ | 光标移至行尾 |
光标移至行首 | |
H(High) | 光标移至屏幕上端 |
M(Middle) | 光标移至屏幕* |
L(Low) | 光标移至屏幕下端 |
:set nu | 显示行号 |
:set nonu | 取消显示行号 |
gg | 光标到第一行 |
G | 光标到最后一行 |
nG、:n | 光标到第n行 |
3、删除命令
命令 | 作用 |
x | 删除光标所在处字符 |
nx | 删除光标所在处后n个字符 |
dG | 删除光标所在行起到文件末尾的内容 |
D | 删除从光标所在处到行尾 |
:n1,n2d | 删除指定范围(n1~n2)的行 |
4、复制和剪切命令
命令 | 作用 |
yy、Y | 复制当前光标所在行 |
nyy、nY | 复制当前光标所在行起n行 |
dd | 剪切当前光标所在行 |
ndd | 剪切当前光标所在行起n行 |
p(paste) | 粘贴在当前光标所在行下面 |
P | 粘贴在当前光标所在行上面 |
5、替换和撤销命令
命令 | 作用 |
r(replace) | 替换光标所在处字符 |
R | 从光标所在处开始替换字符,按Esc结束 |
u(undo) | 撤销上一步操作 |
6、搜索和替换命令
命令 | 作用 |
/string |
从前向后搜索指定字符串string 按n跳到下一个指定字符串出现的位置 按N跳到上一个指定字符串出现的位置 搜索时忽略大小写:set ic |
:%s/old/new/g | 全文替换指定字符串(用new替换old) |
:n1,n2s/old/new/g | 在一定范围(n1~n2)内替换指定字符串 |
7、保存和退出命令
命令 | 作用 |
:w | 保存修改 |
:w new_filename | 另存为指定文件 |
ZZ、:wq | 保存修改并退出 |
:q! | 不保存修改退出 |
:wq!(只有管理员root或 文件的所有者可以使用) |
保存修改并退出 可忽略文件的只读属性 |
扩展应用
1.在当前文件末尾导入其他文件的内容 :r 文件名
2.在Vim/Vi中执行命令 :! 命令
3.在当前文件末尾导入命令执行的结果(上面两个命令结合) :r !命令
范例:常用于把当前时间导入到文件末尾用来标识最后一次修改时间 :r !date
4.定义快捷键 :map 快捷键 触发命令 (取消定义的快捷键 :unmap 快捷键 )
范例:定义快捷键ctrl+p在行首插入#注释本行 :map ^P I#<ESC> (^P并不是直接打出来的,而是先按ctrl+v,再按ctrl+p,I为在行首插入,#为注释符号,在Shell脚本和Linux系统配置文件中#表示注释,<ESC>表示从插入模式返回到命令模式)
定义快捷键ctrl+b删掉行首字符(多用于取消注释) :map ^B 0x (0把光标移至行首,x删除这个字符)
定义快捷键ctrl+e在当前光标前插入我的邮箱地址 :map ^E iupc_eniac12@.com<ESC>
5.连续行注释 :n1,n2s/^/#/g (实际上就是之前提到过的替换命令,^表示行首(是直接打出来的,不是ctrl+v),这里的行首指的是这个位置不是光标移到行首指示的那个是字符,所以这么命令起到的作用是添加而不是替换,要添加的符号是#)
在大多数程序设计语言中注释符号是//,而不是#,这时连续行注释要这么写 :n1,n2s/^/\/\//g (错误的写法:n1,n2s/^////,Vim识别不出中间的//为要添加的内容,所以要用转义字符'\/'表示'/',new的地方是\/\/,使用了转义字符表示//)
6.连续行取消注释 :n1,n2s/^#//g (^#表示行首的#,把行首#替换成空,即删除行首#)
7.实时替换 :ab mymail upc_eniac12@.com (ab是替换命令,把a替换成b,此处a是mymail,b是upc_eniac12@163.com,该命令是实时替换即当我们在文本中输入mymail后再按下空格或ESC,Vim会自动把我们刚才输入的mymail替换成upc_eniac12@163.com,所以这是一个懒人必备的命令,取消这个实时替换的命令是 :unab mymail )
上述对Vim的设置只在本次打开有效,如果要让其再任意时刻打开都有效需要编辑Vim的配置文件(~/.vimrc,~表示用户的宿主目录,管理员root的宿主目录缺省在/root下面,普通用户的宿主目录缺省在/home下面),配置文件.vimrc缺省是空的,例如在文件中写入 set nu ,则以后每次打开Vim都会默认显示行号
总结
Vim/Vi博大精深,初学者使用会觉得十分复杂,操作效率低下,但当你完全熟悉了它之后,你就会觉得它简直就是个神器,使用它可以极大的提高我们码代码的效率。
这是一个你不需要使用鼠标,不需使用小键盘,只需要使用大键盘就可以完成很多复杂功能文本编辑的编辑器,不然,Visual Studio也不就会有vim的插件了。
学习vim就像学弹钢琴一样,一旦学会,受益无穷。
另外这里还有一篇关于Vim比较不错的文章,想要深入学习可以看一看
(四)文本编辑器Vim/Vi的更多相关文章
-
文本编辑器VIM/VI
vim/vi 功能强大全屏文本编辑器.主要是建立,编辑,显示文本. www.vim.org 构建shell脚本 :set number 使文件出现行号 a 光标后附件文件 i在光标前插入文 ...
-
文本编辑器vim/vi用法完全解读
vi用法 1.启动vim 2.命令模式和输入模式 3.退出vi 4.vi与ex命令 5.移动光标 6.跳转 7.搜索 8.插入文本 9.修改文本 10.替换文本 11.删除文本 12.恢复和撤销改变 ...
-
文本编辑器vim/vi——命令模式
一个完整的指令的标准格式: Linux通用的格式——#指令主体(空格) [选项](空格) [操作对象] 一个指令可以包含多个选项,操作对象也可以是多个. vim指令: 指令:vim (vim是一款 ...
-
文本编辑器vim/vi——模式切换及输入模式
vim一共有三种模式:命令模式.输入模式.末行模式 要从命令模式切换到输入模式:a,i,o a——append 属于在后面追加内容:i——insert 属于插入,在前面插入内容:o——other 属于 ...
-
文本编辑器vim/vi——末行模式
指令格式: #vim 文件路径作用:打开指定的文件. 进入方式:由命令模式进入,按下“:”或者“/(表示查找)”即可进入 退出方式: a. 按下esc b. 连按2次esc键 c. 删除末行全部输入字 ...
-
Linux系列教程(十)——Linux文本编辑器vim
通过前面几篇博客我们终于结束了Linux常用命令的介绍,Linux常用命令主要包括以下: ①.Linux文件和目录处理命令 ②.Linux链接命令和权限管理命令 ③.Linux文件搜索命令 ④.Lin ...
-
Linux文本编辑器vim
目录 1.vim 的工作模式 2.插入命令 3.定位命令 4.删除命令 5.复制和剪切命令 6.替换和取消命令 7.搜索和搜索替换命令 8.保存和退出命令 9.vim 高级操作 10.总结 通过前面几 ...
-
LINUX文件内容处理及文本编辑器vim
Linux基本操作命令 echo命令 echo命令: 把echo后面的内容显示到屏幕. -n 显示内容的时候不显示每行结尾的回车 echo 内容 >> 文件名 表示把内容加到一个文件的末尾 ...
-
文本编辑器vim和gedit
vim和gedit都是文本编辑器 vim用法: vim 文件名 #打开文件 输入 i,进入文本编辑模式,编辑完再按ESC,退出编辑模式,再输:wq,保存退出:如果输:q!则是不保存退出,很简单.. 如 ...
随机推荐
-
爬虫初探(1)之urllib.request
-----------我是小白------------ urllib.request是python3自带的库(python3.x版本特有),我们用它来请求网页,并获取网页源码. # 导入使用库 imp ...
-
easyui-datagrid自动合并行
1.目标 1.1表格初始化完成后,已经自动合并好需要合并的行: 1.2当点击字段排序后,重新进行合并: 2.实现 2.1 引入插件 /** * author ____′↘夏悸 * create dat ...
-
hive查询
查询语句可以直接使用非分析函数的变量的别名 select t1.* from ( select account_id, sum(recharge_money) recharge_money_total ...
-
log4j使用教程详解(怎么使用log4j2)
1. 去官方下载log4j 2,导入jar包,基本上你只需要导入下面两个jar包就可以了(xx是乱七八糟的版本号): log4j-core-xx.jar log4j-api-xx.jar 2. 导入到 ...
-
Cheatsheet: 2014 12.01 ~ 12.31
.NET Some Thoughts on the new .Net Introducing .NET Core Running ASP.NET on a Raspberry Pi with Mono ...
-
Qt之镜像旋转
简述 Qt中可以对图片进行任何处理,改变亮度.灰度.透明度.大小.形状等,当然也可以进行镜像旋转! 简单的几行代码,有时就可以事半功倍...甚至图片不用经过美工处理就可以直接拿来使用! 简述 实现 原 ...
-
[译]使用Babel和Browserify创建你的ES6项目
原文地址:Setting up an ES6 Project Using Babel and Browserify JavaScript的发展日新月异,ES6很快就要接管JS了.很多著名的框架像Ang ...
-
第五章 MySQL函数
一.数学函数 (1) 绝对值函数:ABS(x) ABS(x) 用于返回 x 的绝对值 mysql> SELECT ABS(2), ABS(-2.3), ABS(-33); +--------+- ...
-
学习 day4 html 盒子模型
盒子模型 1.框模型 框:页面上所有元素都可以称为“框” 框模型:(BOX Model),又称盒子模型 定义框处理元素内容.内边距padding.外边距margin.边框的样式border 外边距ma ...
-
linux权限之su和sudo的差别
我们都知道非常多的文件都仅仅有root有权限来改动,那么在我们平时的开发过程中都建议使用一般账号来登录进行开发.还记得前面说到的ssh吗.我们也是将同意root登录设置成no.到必要的时候再切换到ro ...