LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1467|回复: 19

我的vi使用笔记

[复制链接]
发表于 2003-12-9 00:08:22 | 显示全部楼层 |阅读模式
allwin@202.115.48.148 allwin@www.linuxsir.cn
有谬误之处,欢迎指正
欢迎大家补充
一 12月  8 17:17:01 CST 2003
1.基本命令格式:vi 选项 文件名
  也可以直接用:vi 文件名
  这可以使用户编辑该文件
  也可以直接输入vi,然后进入编辑,但退出的时候必须输入文件名来保存
  可以是vi filename1 filename2 ... filenameN,中间的...代表文件名.也就是说vi可以打开多个文件.
  说明:编辑完一个文件后,可以在:提示符下键入n来切换到下一个文件.如果当前文件修改了而且没保存,vi会提示       用户保存.如果使用n!则放弃当前修改,强制进入到下一个文件.比如对filename1作了修改,然后使用n!就可       以进入对filename2的编辑,对filename1的编辑将被忽略.在任何一个文件处,:提示符下键入rew都将回到第       一个文件.
2.基本选项有:
  -R:以只读方式打开,可以防止误操作
  -x:加密,保存时可以加密,今后在读取时必须凭密匙才能着正确读取
3.保存时输入的选项:
  wq:保存并退出
  q!:退出不保存
  x:保存并退出,与wq效果一样
  q:退出vi
  w:保存所写的内容,但不退出vi
  e!:重新编辑当前文件,放弃自上一次保存以来所做的修改
  e x:退出当前编辑的文件,改为编辑名为x的文件,如果当前文件经过修改未保存,会提示保存
  e + x:与e x一样,只不过是从x的文件尾开始编辑
  w x:保存为名为x的文件
  w! x:覆盖名为x的文件
  r x:读入名为x的文件的内容,将其内容插入当前光标所在位置
  说明:w-write,q-quit
4.要由屏幕模式进入编辑模式,按的键可以为:
  a:从光标所在位置的后面开始输入文字,光标后的文字随着输入的文字向后移动
  A:从光标所在行的最后开始插入文字
  i:从光标所在位置的前面开始输入文字,光标后的文字随着输入的文字向后移动
  I:从光标所在行的第一个非空白字符开始输入文字,光标后的文字随着输入的文字向后移动
  o:在光标所在行的下方新增一行并处于输入状态
  O:在光标所在行的上方新增一行并处于输入状态
  说明:a:append追加
       i:insert插入
       open开始
       我们不需要把这些选项都掌握,其实最常用的就a,记住a可以用来让你处于输入状态就可以了
5.屏幕定位命令我们需要把光标定位到我们想去的地方,这就需要很多技巧,而vi可以很好地做到这一点)
  方向键右:向右移动
  方向键左:向左移动
  方向键上:向上移动
  方向键下:向下移动
  说明:这几个键很简单,就是一个一个字符地移动
  在一些情况下,方向键不能用时,可以用下面的几个键
  h:向左
  j:向下
  k:向上
  l:向右
  说明:一般情况下方向键都没问题,所以我们只要记住方向键怎么用就可以了
  w:将光标向所在位置的后面移动,每移动一次,到下一个标点符号处,换行符也算,这是对中文而言.对英文,移动的    单位是字,即以一个单词为单位移动,遇到标点有停留,简单地说:遇到空格和标点符号,w移动时都有停留,换行符也算
  W:与w一样,但移动的时候如果遇到标点符号,也把它认作普通字符,即移动时只以空格为标志,换行符也算
  举例:this is my first test,please enjoy it. you will find it interesting.
       this is the second line.
       假设光标在this的t处,那么依次按w,光标的位置将依次在(this) (is) (my) (first) (test) (,) (please       ) (enjoy) (it) (.) (you) (will) (find) (it) (interesting) (.) (this) (is) (the) (second) (lin       e) (.)前有停留.而按W,大都一样,只是在(test,please) (it.) (interesting.) (line.)处只停留一次.
  b:与w的功能一致,只是方向相反
  B:与W的功能一直,只是方向相反
  e:对中文,移动到句子末尾,对英文,移动到单词末尾,标点符号在两种情况下都算一个单位.若一个中文句子里有     英文单词或者字符,移动的时候也要考虑为英文.要考虑换行符
  E:与e功能一致,只是不考虑标点符号,要考虑换行符
  ):将光标移到下一句子,移动的标准似乎很智能化,但我还不清楚是什么标准
  (:与)相似,不过是回退,方向相反
  }:将光标移动到下一段
  {:将光标移动到上一段
  H:将光标移动到当前屏幕的最顶行(high)
  L:将光标移动到当前屏幕的最底行(low)
  M:将光标移动到当前屏幕的中间一行(middle)
  +:将光标移动到下一行的第一个非空字符处
  -:将光标移动到上一行的第一个非空字符处
  enter键:与+作用相同
  ctrl+f:向下滚屏(整个屏幕)
  ctrl+b:向上滚屏(整个屏幕)
  ctrl+d:向下滚动半个屏幕
  ctrl+u:向上滚动半个屏幕
  ctrl+e:向下滚屏(一行)
  ctrl+y:向上滚屏(一行)
  下面说一下在出现提示符:的情况下输入一些字符实现移动
  在出现了:的情况下,输入
  x:x代表一个具体的数字,比如5,那么光标将移动到第5行
  $:将移动到文件的最后一行
  下面的是按字符单位来定位(不是在:下)
  ^:移动到本行的第一个非空字符
  0:光标移动到行首
  说明:^与0的区别在于,行的首部可以为空格,用^不能移动到空格处,只能在第一个字符处,而0就可以
  $:移动到一行的末尾
  空格键:与方向键的向右移动一样
  backspace键:与方向键的向左一样
6.查找命令
  用于查找并移动到某个单词所在位置
  /x:x代表你要查找的单词或者字,句子或者其他,并将光标定位在x的第一个字处,这是向前查找
  ?x:x代表你要查找的单词或者字,句子或者其他,并将光标定位在x的第一个字处,这是向后查找
  n:重复最后的/或?操作,可以用这个实现在查找到有多个位置适合查找条件时移动到下一个适合的位置
  N:与n一样,不过方向相反,从后向前
  /x/+y:与/x一样,只是把光标定位在x所在行后的第y行首
  ?x?-y:与?x一样,只是把光标定位在x所在行前的第y行首
7.删除命令
  x:删除当前光标后的一个字符
  X:删除当前光标前的一个字符
  dd:删除当前行
  dw:删除当前光标所在的字
  D:删除从光标到行尾的所有字符
  d$:与D一样
  backspace和del键的功能是最基本的,不用介绍
8.修改文本命令
  说明:如果在编辑文本时要先删除指定的内容再输入要更改的内容,编辑将显得很麻烦且费时,下面介绍一些快捷        方式.
  r:删除光标当前所在字符并替换成接下来输入的字符
  R:将替换从光标位置开始的与所输入的字符长度相等的字符为所输入的内容
  s:替换当前所在字符为下面输入的字符,然后处于输入状态从当前所在字符位置处开始输入.相当于r与a的组合
  S:替换当前行的内容为所输入的内容,并处于输入状态.相当于dd与a的组合
  ~:改变当前字符的大小写,并处于输入状态
  cw:删除当前光标所在位置的字(单词)并处于输入状态
  C:删除从光标所在位置开始到行尾的所有字并处于输入状态
9.命令前计数(可以在一些命令前加数字,表示重复效应)
  这主要是针对屏幕定位命令和删除命令
  比如3dd就是删除从光标所在行开始的3行内容,6k就是将光标移动到当前位置的前6行处
10.文件与文本的复制
  vi的文本复制与粘贴使用了缓冲区的概念.当用户启动vi时系统创建了9个删除缓冲区,名字为1到9,用来存放用户  的临时数据.当用户删除了一些内容时,这些内容被放进缓冲区1,当再次删除一些文本时,先前的删除内容被移动   到缓冲区2,当前删除的放进缓冲区1,依此类推.vi还提供了26个插入缓冲区,也叫命名缓冲区,采用26个字母a~z来  命名.用户可以使用命令来将选定内容放进缓冲区,也可以用命令从指定缓冲区取出内容粘贴到文本中.换句话说,  copy和paste命令就是建立在这些缓冲区的基础上.需要注意的是:当用户退出vi时缓冲区数据将丢失.
  复制与粘贴的具体过程:
  复制:
  首先确定当前光标的位置,命令格式如下:
  "mnyy
  注意:复制时必须处于命令模式下,不是处于:提示符下,不是处于编辑状态
  说明:m代表缓冲区名,可以是删除缓冲区,也可以是插入缓冲区.n代表从当前行起的要复制的行数,yy是        必须的,表示这是复制,即写缓冲区,"是双引号,它告诉vi对后面的字符作特殊解释
  举例:文本内容:
       this is the first line
       this is the second line
       这是第三行
       这是第四行
       this is the fifth line
       这是第六行
  假设光标在第一行,则命令"q5yy将把从this is the first line到this is the fifth line之间的内容  全部写到q缓冲区去
  vi提供了追加功能,即往一个已有数据的缓冲区的末尾追加数据,比如现在我把光标移动到"这是第六行"  然后用命令"Q1yy就可以把"这是第六行"追加到q缓冲区去,那么现在q缓冲区里的内容就是上面例子中的  所有六行内容.语法是"在前,紧接着是缓冲区的大写,然后是从光标所在位置起要追加的行数,然后是固   定的yy
  说明:在未退出vi的情况下,只要该缓冲区未被重新指定,即重新写数据,那么该缓冲区的数据一直存在
  粘贴:
  缓冲区的数据可以用读命令读出来并粘贴到指定的位置.粘贴命令如下:
  "mp
  说明:"仍然是必须的,m代表缓冲区名(a~z,1~9),即你要从该缓冲区读出数据,p表示把数据放在光标之后       ,如果把p换成P,则表示把内容放在光标之前.如果不指定缓冲区的名字,则表示用来处理最近删除        的或者填入缓冲区的数据.比如"就表示把最近缓冲区里的数据放到光标之前,但有个问题,"p究竟       表示什么,这个我还不清楚(这个p有两种理解,一是缓冲区p,一是表示粘贴,究竟表示哪个?)
   附:不同tty下的vi似乎不可以共享缓冲区,不知道是不是这样的.
   不使用缓冲区进行文本复制和粘贴:
   语法:
   在:提示符下,输入m,n co x
   说明:m表示复制开始的行,n表示复制结束的行,m,n确定了复制的内容,co表示copy,x表示要复制到的行        注意,m与n之间有,号,co与前后有空格
   移动内容而不是复制的语法:
   在:提示符下,输入m,n m x
   说明:相关内容跟上面的一样,但co改成了m,表示是move
11.一些技巧:
  1.ctrl+g:显示当前文件的文件名,行数及光标所在位置
  2.在出现:提示的情况下,输入sh可以执行shell命令,执行完后按ctrl+d返回vi
  3.在出现:提示的情况下,输入! x可以执行名为x的shell命令,执行完后,提示用户按enter返回vi
    比如:! date,则在shell运行date后显示执行结果,然后提示用户返回vi
  4.在出现:提示后输入r! x,则将在shell里运行x的结果插入当前位置,然后返回vi继续编辑.
  5."."可以用来重复一条命令.这必须是在前一条命令执行完毕之后.一般用于文本修改命令.例如:dd之     后,按.可     以重复删除所在的一行,即原来的下一行.
  6.u可以取消最后一条文本修改命令,一直按u可以依次取消以前的文本修改
  7.U可以取消对一行的修改,并回到初始状态
  8.J可以把下一行连接到本行,如果使用了数字前缀,就可以把下面的多行连接到本行(即取消换行符)
  9.在出现:的情况下键入help可以取得帮助
  10.在出现:提示符的情况下键入set nu可以显示行号;键入set nonu可以取消行号的显示
12.几个问题:
   1.不同tty下面的vi之间可以实现复制吗?
   2.怎么把vi的内容复制到其他地方,比如到telnet要发表文章的地方.当然,指的是text mode下.

一 12月  8 23:53:10 CST 2003
发表于 2003-12-9 00:51:04 | 显示全部楼层
总结的很好,不过这是vim,呵呵
在不同的tty之间复制要用到系统剪贴板
"*yy 复制到系统剪贴板
"*p 从系统剪贴板中粘贴
发表于 2003-12-9 09:29:22 | 显示全部楼层
我实在觉得用这东西有点自虐,以前看过,一段时间没有,竟然差不多都忘了。个人意见啦
 楼主| 发表于 2003-12-9 09:33:14 | 显示全部楼层
其实最常用的就那几个键
但能全部掌握就很不错了
 楼主| 发表于 2003-12-9 10:56:09 | 显示全部楼层
我刚才测试的结果是:
"*yy也不能用于不同tty之间复制
发表于 2003-12-9 10:57:17 | 显示全部楼层
怎样成批替换文本的内容啊?比方说我要把文本中所有的aaa都替换成bbb?
发表于 2003-12-9 11:04:54 | 显示全部楼层
:1,$s/aaa/bbb/g
发表于 2003-12-9 11:30:39 | 显示全部楼层
最初由 Vel 发表
:1,$s/aaa/bbb/g

非常感谢!我很需要这种东西,经常用到。
发表于 2004-5-30 13:56:42 | 显示全部楼层
希望大家把自己都帖出来
发表于 2004-5-30 14:05:24 | 显示全部楼层
最初由 hyoga 发表
非常感谢!我很需要这种东西,经常用到。

试试这个,
#vim -e -s -c ":%s/abc/ABC/g" -c ":wq" filename
ps:支持原创! :thank
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表