Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1076540
  • 博文数量: 165
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1351
  • 用 户 组: 普通用户
  • 注册时间: 2016-03-11 14:13
个人简介

狂甩酷拽吊炸天

文章分类

全部博文(165)

文章存档

2024年(1)

2023年(1)

2022年(3)

2021年(4)

2020年(17)

2019年(37)

2018年(17)

2017年(35)

2016年(50)

分类: LINUX

2016-08-25 16:43:08

原文地址:vi&vim笔记 作者:javier_zh

vi有两种模式:命令模式与插入模式。

按下ESC,可回到命令模式。

:e!——当想要消除所有的编辑结果,回到原来的文件时。
:q!——当想要消除所有的编辑结果,然后直接离开vi。
:w——将缓冲区中的内容写入(保存)文件中,但不离开vi。
:q——离开编辑器。
:wq——写入文件同时离开编辑器。这是无条件写入,即使文件没有被修改也一样。
:x——写入文件同时离开编辑器。只有文件被修改过时才会写入。


大部分的vi命令遵循如下模式:
(command)(number)(text object)
或者相等的模式:
(number)(command)(text object)
它们的工作方式是这样的:number和command为可选项。如果没有这两部分,则只是单纯的光标移动命令;如果加上number,则出现移动多次的效果;结合command(c、d、y等等)与text object,则会得到编辑命令。

移动光标

vi移动光标的命令包括:
  • 上、下、左、右键——一次一个字符(character)。
  • 前进或后退一格文本块(text block)——一次一个单词、句子或段落。
  • 在文件中一次一屏(screen)地前进后退。


单一的移动

h、j、k、l,这四个键可以移动光标:
h:向左一个字符
j:向下一行
k:向上一行
l:向右一个字符

数值参数

你可以在移动命令的前面加上数字。如命令4l把光标向右移动4个字符,命令3k把光标向上移动3行。

在一行中移动

0:移动到一行的开头
$:移动到一行的结尾

按照文本块来移动

w命令使光标前进一个单词,符号与标点也算是一个单词。
W命令使光标前进一个单词,但不算符号与标点。
b命令使光标后退一个单词,符号与标点也算是一个单词。
B命令使光标后退一个单词,但不算符号与标点。
也可以在b、B、w、W命令前加上数字,代表移动多少个单词。
若想移动到特定行,可以使用命令G。只按G将移动到文件的结尾,1G则可到达文件顶端,42G可移动到第42行。

简单编辑

在vi中,只要几个简单的键,就可以做出这些动作:i表示插入,a表示添加,c表示更改,d表示删除。
移动与复制文本,则需要用到两个命令。移动时先用d做删除,再用p进行放置;复制时先用y做“拖拽”的动作,再用p进行放置。

复制文本

使用两个命令——y(拖拽)与p(放置),就可以复制任何数量的文本,并放置到另一个地方。拖拽命令会将选中的文本放到特殊的缓冲区中,一直保留到下一个拖拽命令(或删除命令)发生为止。
快捷键yy用于拖拽一整行文本,就像dd与cc一样。

重复或撤销上一个命令

每一个编辑命令均存储到一个临时的缓冲区,知道发出下一个命令为止。
想要重复相同的编辑命令时,可以使用重复命令——句号(.)。
想要撤销上一个编辑命令时,可以使用撤销命令——按下u即可。

插入命令的数值参数

插入命令也接受数值参数。例如,输入50i* ESC会插入50个星号;25i*- ESC则会插入50个字符(25对星号与连字符的组合)。

快速移动位置

本章内容包括:
  • 根据屏幕来移动
  • 根据文本块来移动
  • 根据搜索模式的结果来移动
  • 根据行号来移动

跟据屏幕来移动

^F:往前滚动一整屏
^B:往后滚动一整屏
^D:往前(下)滚动半屏
^U:往后(上)滚动半屏
其中^符号表示CTRL键。^F表示按着CTRL键并同时按下f键。

根据搜索模式的结果来移动

搜索命令是特殊字符/(斜线)。格式为:/pattern。模式输入完毕之后,按ENTER结束命令。要往回搜索,则不是输入/,而是输入?。格式为:?pattern。
重复搜索的命令:
n:往同一个方向重复搜索。
N:往相反的方向重复搜索。


ex编辑器

想在vi中使用ex命令,你必须输入特定字符:(冒号)。输入命令后,按ENTER来执行。
在ex编辑器中执行:vi命令,可以让你从ex进入vi。

:set  nu命令可以将所有的行号显示在屏幕左边。
:set  nonu命令可以取消显示行号。
:=命令列出文件的总行数。
:.=命令列出当前所在行的行号。
:/pattern/=命令列出pattern第一次出现时的行号。

每一个ex编辑命令都需要知道要编辑的行号。而对于ex的move和copy命令,还必须提供文本移动或复制的目的地。

常用的ex命令与缩写整理如下:
Full Name
Abbreviation
Meaning
delete
d 删除行
move
m 移动行
copy
co 复制行


指定行地址的方法有下面几种:
  • 指定明确的行号
  • 用符号来指定相对于当前位置的行号
  • 标识某些行的搜索模式作为地址
举例:
:3,18d ——删除第3行到第18行。
:160,224m23——将第160行到第224行移到第23行之后(类似vi中的delete与put)。
:23,29co100——将第23行到第29行复制到第100行之后(类似vi中的yank与put)。

行寻址符号

你也可以用符号表示行地址。点号(.)表示当前这一行;$表示文件的最后一行。%表示文件中的每一行,与1,$组合的意义相同。例如:
:.,$d——删除当前这一行到文本结尾间的文本。
:20,.m$——将第20行到当前这一行间的文本移到文件结尾。
:%d——删除文件中的所有的行。
:%t$——将所有的行复制到文件结尾。
除了绝对行地址之外,还可以指定相对于当前这一行的地址。+与-的操作类似于算数操作。放在数值前面时,其表示加上或减去后面的数值。例如:
:.,.+20d——删除当前这一行到20行之后的行之间的文本。
:226,$m.-2——将第226行到文本结尾间的行移动到当前这一行的两行之前。
:.,+20#——显示当前这一行及向下20行之间的行号。

保存一部分的文件

有时你会想将一部分编辑中的文件保存为新文件。比如:
:230,$w newfile——将第230行到文件结尾保存成名为newfile的文件。
:.,600w newfile——将当前行到第600行之间的文本保存成名为newfile的文件。

附加内容到已保存的文件

例如:
:1,10w newfile——将第1行到第10行保存为newfile。
:340,$w >> newfile——将第340行到文本结尾的所有行追加到newfile中。


全局替换

在全局替换中,ex编辑器会检查每一行中有没有某个字符模式。在包含这个模式的每一行中,ex会用新的字符串来替代这个模式。
全局替换实际上会用到两个ex命令::g(global,全局)与:s(substitute,替换)。

替换命令的语法如下:
:s/old/new
它会将当前这一行中第一个出现的模式old改为new。其中的/(斜线)用来分割命令的各部分。
:s/old/new/g
会将当前这一行中的每一个old更换为new,并不是指更换第一个。
在:s前面加上地址,可以将有效范围扩展到超过一行。例如:
:50,100s/old/new/g——将第50行到100行之间的old改为new。
:1,$s/old/new/g——将整个文件中的old改为new。
:%s/old/new/g——将整个文件中的old改为new。

如果希望在每一个替换之前做确认,可以在替换命令的结尾加上c选项(代表confirm)。
:1,30s/old/new/gc

与上下文相关的替换

另一种稍微复杂的全局替换。让你搜索一个模式,在找到包含模式的某一行时,对另一个字符串做替换。可以想成是与上下文相关的替换。
语法如下:
:g/pattern/s/old/new/g——在全局范围内遇到包含pattern的行,将old更改为new。


高级编辑方法

执行Unix命令

使用vi编辑时,可以显示或读入任何Unix命令所产生的结果。感叹号(!)会告诉ex创建一个shell,并将后续文本是为Unix命令:
:!command
例如:
:!date

vim的多窗口功能

打开新窗口最简单的方式就是使用:split(水平分割)或:vsplit(垂直分割)。
:split——新建水平分割窗口并显示相同文件
:split otherfile——新建水平分割窗口并打开显示其它文件
阅读(1279) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~