转载请注明出处:http://blog.csdn.net/yiliumu/article/details/20870921

我们如何在Linux这样的一个命令行界面下,来编写一些脚本,web页面,等等

早期就是叫vi,后来推出了一个增强版,叫vim
所有的Linux系统都会默认安装这个vi,vim/vi是一个功能强大的全屏幕文本编辑器,是Linux/Unix最常用的文本编辑器,它的作用是建立,编辑,显示文本文件,
vim/vi没有菜单,只有命令

其实使用vi就是用来:编辑一个配置文件,还有就是来编写一些shell脚本

学习vi之前,必须知道,vi有三种工作模式:
(1)命令模式
(2)插入模式
(3)编辑模式
我们使用vi filename进入vi的命令模式,输入"i"或者"a"或者"o"其中一个,进入插入模式,插入完敲打Esc键,返回到命令模式,可以通过“:”从命令模式到达编辑模式,回车后结束编辑模式,回到命令模式,输入":wq"("write quit"保存并退出)可以退出vi

以下命令都是在命令模式下输入的:
在命令模式下,我们还有很多的命令可以用到,比如我们要让编辑器显示行号,就可以使用":set number"(或者使用简写":set nu")
接下来是高效的使用vi,我们在命令模式下,使用下面的命令:
a      在光标后附加文本
A      在本行行末附加文本
i      在光标前插入文本
I      在本行开始处插入文本         0零也可以移动到行首,但不执行插入操作
o      在光标下一行插入新的一行
O      在光标上一行插入新的一行

定位命令:
h                方向左键     
l                方向右键     
k                方向上键     
j                方向右键     
$                移至行尾
0(零)            移至行首,但不执行插入操作
H                移至屏幕上端
M             移至屏幕中央
L             移至屏幕下端
 
:set nu          设置行号
:set nonu        取消行号
gg               到第一行
G                都最后一行
ng(n为数值)     到第n行
:n(n为数值)     到第n行

删除命令:
x             删除光标所在处的字符
nx             删除光标所在处后n个字符
dd             删除光标所在行,ndd删除n行
dG             删除光标所在行到文件末尾的内容
D             删除从光标所在处到行尾
:n1,n2d         删除指定范围的行

复制和剪切命令:
yy或者Y 复制当前行
nyy或者nY 复制当前行以下n行
dd         剪切当前行(其实就是删除)
ndd         剪切当前行以下n行
p、P     将内容粘贴在当前光标所在行下或行上

替换和取消命令:
r             取代光标所在处的一个字符,操作:按下r,然后再按你要替换的新的字符
R             从光标所在处开始替换字符,直到按Esc结束
u             取消上一步操作,撤销,在你没有保存退出之前都可以撤销

搜索和替换命令:
/关键字          敲完“/关键字”之后,按下回车,以后向前搜索指定的字符串n(next),向前搜索按N键
注意:Linux是严格区分大小写的,在搜索的时候,比如"/ftp",此时只能搜索到小写的ftp,不能搜索到大写的ftp关键字,所以此时我们在使用/ftp前,可以使用":set ic",将搜索设置为忽略大小写,再使用"/ftp"来搜索。同时,我们也可以将忽略大小写关闭掉,忽略大小写,输入":set noic"

s表示替换
":%s/old/new/g"(命令的最后一个指令:g表示不询问确认,如果是c则表示询问确认,询问中a:all,q:quit),其中%s表示全文替换,即将全文中的所有old都替换为new,比如,将所有的ftp替换为lamp,":%s/ftp/lamp/c"

":n1,n2s/old/new/g"表示将第n1行到第n2行的old用new来替换,比如将10行到20行中的The替换为this,就可以使用":10/20s/The/this/g"

那如何退出vi编辑器呢,我们可以使用“:wq”来保存退出,同时我们也可以使用“shift+zz”,表示两个大写的“ZZ”,也就等同于“:wq”,保存退出

我们可以此时可以将/test/services的所有者的写权限去掉,chmod u-r /test/services 或者chmod 444 /test/services ,此时再进入vi /test/services ,此时写入一些东西,按Esc键,再编辑模式下输入":wq",保存退出,此时会有一个警告,说这个文件是只读文件,但是由于你是root管理员,所以你可以增加一个“!”来强制保存,我们可以使用":wq!"来强制保存退出,但是,并不是说所有人来编写这个文件,加上"!"就可以强制保存退出的,所以只有这个文件的所有者,或者你是root超级管理员才可以强制保存该文件
还要注意一点,Linux中的root是最大的,所有东西都是它说了算,任何文件,即便他没有写权限,它也可以对任何一个文件进行写,所以他是一个特权用户

那么有时候我们使用vi /test/service按错的时候,vi会自动给你创建一个文件,那么此时如果你不想保存这个文件,并要退出,那么你就可以使用":q!",表示不保存退出

有时候当你在用一个编辑器写一个脚本文件的时候,需要定时的"ctrl+s"来定时保存文件,但是不退出,那么在vi下,我们可以使用“:w”来保存,再继续往下写,如果还是提示没有写的权限,那么“文件所有者”可以使用“:w!”来强制写入
我们还可以使用“:w /root/services.bak”,将文件另存为(备份)到另外一个目录

到目前为止,我们如果是想在vi下做一些应用,那么这些已经差不多了,要对以上的所有vi命令非常熟练,因为到时要配置一些apache文件,我们可以快速的定位到要修改的地方

vi中有趣的用法:
(1):我们可以在操作中的vi导入文件:比如:
使用vi打开一个文件,在编辑模式下,输入":r /etc/services",就能在操作中的文件中导入/etc/services
(2):有时候我们在写一些shell脚本的时候,在vi环境内,我们需要查看一些系统的东西,比如"ls -l /"等等的命令,这时候我们又不想退出这个vi环境,那么我们就可以使用":! ls -l /"来查看系统的东西
(3):我们在有时候写一些脚本的时候,需要在文件中写入当前时间,以作为标记,那么此时我们可以使用“:r !date”,其中":r"表示导入文件,但是我们要导入命令执行的结果,此时我们可以使用“!”加上命令,其实这个命令就是上面两个命令的结合,此时他就会在你“光标高亮”的地方,帮你加上date执行的结果

这里有几点需要注意的,在Linux配置文件和shell脚本中,“#”表示注释
(1)有时候,我们在配置文件中,我们需要将#号去掉,即去掉注释,那我们直接可将光标移动到要删除的#号上,再按下“x”删除,这个过程是很啰嗦的。所以怎样来提高我们的效率,就是“定义快捷键”
vi中定义快捷键:
比如我们要定义一个快捷键的作用是:无论我们的光标在一行中的任何一个位置,我们只要按下一个快捷键,就可以将行前加入#号以起到注释的效果
我们现在定义一个"ctrl+p",就可以使用如下命令:
":map ^P I#<ESC>"  (注意,在vi环境下^符号是使用ctrl+v联合ctrl+p或者ctrl+v+p按出来的) 
大写"I"表示回到行首,并进入插入模式,#表示插入一个#号,<ESC>表示插入后回到命令模式

我们可以使用大写的I和0零将光标移动到行首,但是我们使用0零只是将光标移动到行首,此时并不能插入,是在命令模式下,所以我们还是使用大写的I

(2)有时候在写完一些自动化得shell脚本后,需要在末尾将自己的邮箱留下,别人才知道这个是你写的,那么我们就可以定义一个快捷键,就不用每次都敲入了,比如定义一个ctrl+e
此时我们可以使用:
":map ^E(ctrl+v以及ctrl+e或者ctrl+v+e)i(E与i之间不需要空格)test@qq.com":表示在光标的前面插入test@qq.com,并在插入模式下,E可以理解为email

(3)比如我们有时候要将行首的#号干掉,此时我们也可以定义一个快捷键,方便我们操作
":map ^B (ctrl+v ctrl+b或者ctrl+v+e) 0x"
0表示回到行首,还是在命令模式,x表示在命令模式下删除光标所在处的字符,此时我们就可以将光标移动到要删除#号的行中,就可以将#删除了

连续行注释,其实就是我们前面学过的替换
(4)比如有时候我们需要将一个函数都注释掉,那么此时我们如果还是使用快捷键的方式来实现注释功能,那就太麻烦了,你需要将光标一次一次的移动到每一行上面,然后再注释。那么我们可以使用:

":10,20s/^/#/g"   其中"10,20s"表示10行至20行,s表示全文,^表示行首,#表示我们要替换的字符,g表示不询问确认,其实就是我们上面讲的替换,^表示将行首替换为"#"
假如我们要将#号去掉,那么我们可以使用:
":10,20s/#//g" 将10行到20行中的#号替换为""空就行了,其实我们在论坛中经常看到会有过滤敏感词的功能,那我们也可以在vi中写一些过滤敏感词的脚本,然后来实现敏感词的过滤成"***"等等特殊字符。
那有时候我们会看到一些语句中,有两个#号,比如:#this is#a test,那么这个时候我们该怎么来删除行首的#号呢,我们可以
":1,19s/^#//g"       ^表示行首,^#表示行首的#替换为“”空,这时候中间的#不会被替换

(5)那有时候我们的注释不是#号,而是//呢,那我们可以使用
":1,10/^/\/\//g",其中^表示行首,"\/\/"表示将两个/分别转义,此时就表示将行首替换为//了

(6)如果我们在vi中有经常需要输入比较长的信息,我们又不想将其定义为快捷键,那么我们就可以使用:
":ab mymail test@qq.com"
可以理解为当输入a时,就会显示b,此时我们在vi中,将光标移动到我们要输入邮箱的位置上,输入mymail,然后回车,就可以自动输入这个邮箱了

那么我们怎样取消上面定义的快捷键和ab等按钮呢
我们可以使用":unmap ^P"将ctrl+p的快捷键取消,(注意其中的^符号是使用:ctrl+v+p按出来的)
还可以将上面的mymail取消:unab mymail

有时候,我们在使用":set nu"时,会有行号的出现,但是,但我们使用":q"退出的时候,再vi进入的时候,就没有了行号了,上面也是一样,我们将快捷键取消了,那么只是在当前的vi文件中取消,那如果我们要将其全部取消呢,这时候我们就需要编辑vi的配置文件
那么vi的配置文件存放在什么位置呢?存放在每个用户的宿主目录下,每个用户的宿主目录(也称为家目录)用“~”波浪线表示,home directory,在Linux中,每个用户都需要有一个宿主目录,也就是每个用户登录过来后,都需要有一个存储管理自己东西的位,如果这个用户没有宿主目录(home directory家目录),很多Linux和UNX是不允许该用户登录的,所以在Linux里,添加一个用户,缺省就会给该用户创建一个数组目录,这个宿主目录理论上可以任意指定,但是如果你没有为该用户指定数组目录的位置,则上面的“~”号就表示用户的宿主目录。
管理员root     默认就是/root    管理员比较特殊,宿主目录不在/home目录下,而是在根目录下,用root命令的目录,其他普通用户的宿主目录都是在/home下
普通用户users  默认都是/home下面,用用户名来给他命名,比如普通用户的用户名是zhangsan,那么该用户的数组目录就是/home/zhangsan,lisi           --->/home/lisi如果你没有指定,默认是这样

再删除一个用户的时候,可以使用userdel -r zhangsan (-r,remove表示将该用户的宿主目录,计划任务等等有关的信息都删除)

每个用户都可以定义自己vi的使用方法,vi的配置文件存放在该用户的宿主目录中(~/.vimrc),那也就是每个用户都有自己的vi配置文件,都可以定义vi的使用方法,那如果你想改变vi的使用方法(设置快捷键,ab等),就可以改变你的配置文件,上面已经说过,不同的用户“~”号(即宿主目录)表示不同
那么我们要编辑该vi配置文件,就可以
vi ~/.vimrc或者vi /root/.vimrc,缺省这个文件是什么都没有写的
那么我们就可以在这里面设置一些快捷键,等等,比如:
set nu 表示打开一个vi就设置行号
map ^P I#<esc>
ab mymail test@qq.com
这样,你在使用vi打开所有的文件都会有效,而不像我们刚才,只对某一个vi有效。

最后,这里给大家推荐一个关于Vim热键设计的游戏:http://bbs.chinaunix.net/thread-3729133-1-1.html

本章节学习了Linux的文本编辑器Vi/Vim的使用技巧,下一章节将会学习Linux中用户管理使用到的配置文件。
--------------------- 
作者:一流木 
来源:CSDN 
原文:https://blog.csdn.net/yiliumu/article/details/20870921 
版权声明:本文为博主原创文章,转载请附上博文链接!

Linux编辑器之Vi、Vim的使用及技巧篇相关推荐

  1. Linux 编辑器之神 vim 的 IO 存储原理

    坚持思考,就会很酷 故事起因 无意间用 vim 打开了一个 10 G 的文件,改了一行内容,:w 保存了一下,慢的我哟,耗费的时间够泡几杯茶了.这引起了我的好奇,vim 打开和保存究竟做了啥? vim ...

  2. 八、Linux编辑器之Vi、Vim的使用及技巧篇

    转载请注明出处:http://blog.csdn.net/yiliumu/article/details/20870921 我们如何在Linux这样的一个命令行界面下,来编写一些脚本,web页面,等等 ...

  3. linux 神的编辑器,编辑器之神-vim的使用,编辑器神-vim

    编辑器之神-vim的使用,编辑器神-vim vim即vi的升级版:在linux中,vi是vim的软链接,我们敲vi和vim出来的都是vim: 纯手打,如有错误,敬请指出. vi的三种模式及简单使用 v ...

  4. 编辑器之神——vim编辑器

    编辑器之神--vim编辑器 一.vi介绍 Vi编辑器是所有Unix及Linux系统下标准的编辑器,类似于windows系统下的notepad(记事本)编辑器,由于在Unix及Linux系统的任何版本, ...

  5. 编辑器之神—Vim 常用快捷键

    以下是 "编辑器之神" - Vim 常用快捷键 . 学好vi, 无论用哪个IDE,只需下载一个vim的插件, 在哪里都可以使用! 前言         Vim 的三种工作模式 vi ...

  6. linux系统中vi/vim文本编辑器的使用简介

    linux系统中vi/vim文本编辑器的使用简介 1. vi/vim简介 ​ vi/vim 是linux系统中最基本的编辑器,类似于windows系统中的记事本,几乎所有的linux开发版本都内置了v ...

  7. Linux入门教程——VI/VIM 编辑器

    前言 本文小新为大家带来 Linux入门教程--VI/VIM 编辑器 相关知识,具体内容包括VI/VIM是什么,VIM的三种工作模式介绍,包括:一般模式,编辑模式,指令模式,以及模式间转换等进行详尽介 ...

  8. xshell vim 不能粘贴_编辑器之神——vim的入门指南

    编辑器之神--Vim的操作说明 ©作者:geekctwd Vim命令模式: Vim虽然被称为编辑器之神,但是很多接触过的人都说入门较难,原因是什么呢,除了vim繁杂的按键之外就是因为它的模式了,很多初 ...

  9. linux 普通用户退出vim,Linux环境下VI/VIM编辑文件时无权限保存的解决方法(普通用户)...

    在Linux环境下,如果直接使用VI/VIM命令编辑没有修改权限的文件时,保存的时候就会提示用户无法进行保存操作,一般的解决方法只能是关闭文件重新以sudo权限打开该文件编辑后再保存(前提是用户具有s ...

最新文章

  1. 【Qt】Qt Plugin:Qt插件创建与使用
  2. RDIFramework.NET ━ 9.8 用户权限管理 ━ Web部分
  3. 面向对象解决了全局变量问题?
  4. SAP ECC 6.0有哪些增强功能
  5. CodeForces - 1284B New Year and Ascent Sequence(乱搞)
  6. react 导航条选中颜色_调整安卓手机的颜色以更好地查看一切
  7. python科学计算与可视化教程
  8. 怎么访问原生php类,关于如何利用php的原生类进行XSS
  9. Delphi 导出Excel功能
  10. php fakepath,javascript - chrome upload file 出现 fakepath,请解决方案
  11. windows扫雷的模拟实现(C语言)
  12. 基于单片机的智能药盒设计
  13. 基于C#(Visual Studio 2013)的AutoCAD2016二次开发(二)创建直线
  14. 取消微信抢票的服务器,微信抢票怎么取消?
  15. 【转】最优传输理论---(微信公总号:老顾谈几何)顾险峰
  16. 命令行CURL教程,可以用来在linux下向web服务器发GET等请求
  17. ES6 trim()方法
  18. vite引入dragula报错:global is not defined
  19. 戴上口罩AI变“脸盲”?口罩人脸识别黑科技来袭
  20. 华为云计算机访问手机软件,华为云电脑来了,只需一个APP就能让手机秒变Windows电脑...

热门文章

  1. 【天天动听】一道面试题分享.
  2. React + nodemailer + koa-jwt 实现登录注册邮箱验证
  3. 47-Java编程案例七:双色球系统开发
  4. 2010上海企业宽带最佳选择
  5. 使用Arduino开发ESP32(11):IO口与相关外设说明与记录
  6. 赶紧来传智播客报名吧~名额不多了
  7. Linux默认启动项修改
  8. 正则表达式中的 [] 与 ()
  9. patten时延差编码
  10. 阿里妈妈API 获取商品详情 全电商平台数据接口