Unix环境下的编辑器有多种,一般可以分为
行编辑器 | ed ex 一次只能显示一行 |
全屏编辑器 | viemacs显示文件的一部分 |
vi命令的特点:
- 字母区分大小写
- 输入时不会显示在屏幕上
- 不需要在命令后按Enter键
打开关闭文件
使用vi进行文本编辑的时候,是在内存里的文本副本上进行操作,也就是说是在缓冲区中进行操作,存储编辑的结果时,实际上是将缓冲区的内容写入文件中。
打开文件的命令是:
保存并离开文件
命令模式 ZZ 或者 :wq
结束不保存结果
:e! 恢复到上一次存储的文件内容
:q! 消除所有编辑结果,并退出vi
:w newfile 可将编辑的结果写入新的文件(就是另存为)
第二章 简单的文本编辑器
vi命令
刚进入vi之后,处于命令模式中,按i会进入插入模式,在插入模式中按Esc键会进入命令模式。
---------------------------------------
Windows环境下gVim的准备
(1)打开gVim,输入mkvimrc! ~/.vimrc 该命令会在用户目录下新建一个.vimrc的脚本文件,gvim每次启动的时候都会读取这个文件里的配置
(2)编辑~/.vimrc文件,加入一些脚本
set nobackup 不备份文件,避免自动产生a.txt~备份文件
syntax on 语法高亮
set number 显示行数
colo elflord 设置颜色
set guifont=Consolas:h15:cANSI 设置字体为Consolas,字体大小h15,为西欧cANSI字符
set nocompatible
set ai 自动缩进
set si 智能缩进
set nu 显示行数
set ts=4 一个tab=4个空格
set bs=indent,eol,start
set guioptions-=T 无工具条
set
foldmethod=indent " 折叠方式为 依靠缩进
colorscheme murphy
---------------------------------------
单一的移动
h/Backspace | 左移一个字符 |
j/Enter | 下移一个字符 |
k | 上移一个字符 |
l | 右移一个字符 |
数值参数
在移动命令之前加上数字:例如4l 右移4个字符
在一行中移动
vi会以用户按Enter键作为一行的换行,而与显示行无关
:set wm=10 设置与右边界的距离是10个字符的时候就会换行
按照文本块移动
w | 向后移动一个单词(标点、符号算作一个单词) |
W | 向后移动一个单词(标点、符号不算作一个单词) |
b | 向前移动一个单词(标点、符号算作一个单词) |
B | 向前移动一个单词(标点、符号不算作一个单词) |
G | 移动到文件的尾部前加数字表示移动到指定行 |
同样支持前加数字
附加文本
c + 光标移动命令:结束后需要按Esc键回到命令模式
cw | 从光标到这个单词末尾 |
c2b | 从光标往前2个单词 |
c$ | 从光标到本行末尾(效果同C) |
c0 | 从光标到此行的开头 |
cc | 覆盖当前一正行 |
| |
r用于修改单个字符
r+修改后的字符,完成后立即回到命令模式
替换文本
更改大小写
~ 可以更改字符的大小写,加数字可以制定从光标开始的范围
删除文本
d | 删除命令 |
dw | 删除一个单词(单词之后的空格也会被删除) |
de | 删除一个单词(单词之后的空格也不会被删除) |
db | 向前删除一个单词 |
d$ 或者 D | 删除到一行的结尾 |
d0 | 删除到一行的开头 |
dd | 删除一整行 |
x | 删除光标后面的一个字符 |
X | 删除光标前后的一个字符 |
恢复
u | 撤销上一个命令 |
U | 恢复一整行 |
p | 恢复最近几次的删除的内容 vi会将最近9次删除的整行数据放在9个缓冲区中(移动文本讲解) |
移动文本
vi会将删除之后的文本放在缓冲区中,此时使用放置命令p,就实现了剪切-粘贴
删除的整行,会在光标所在行的下一行粘贴文本
删除的不是整行,会在光标所在位置的下一个字符开始粘贴
对调2个字符
xp x是删除一个字符,p是粘贴
复制文本
使用y拖拽、p放置
同样可以配合移动键使用
yw y$ yy
不同的是Y是复制一整行
拖拽命令和删除命令共享缓冲区
重复撤销命令
上一个命令会保存在一个缓冲区中
. 重复上一个命令
插入文本的其他方法
A | 行尾附加文本 |
I | 行首添加文本 |
o | 在下一行添加文本 |
O | 在上一行添加文本 |
s | 删除光标所在位置的一个字符后,进入插入模式 |
S | 删除一整行后,进入插入模式 |
R | 在光标坐在位置进入替换模式 |
合并
根据屏幕移动
^F | 往前滚动一整屏 |
^B | 往后滚动一整屏 |
^D | 往下滚动半屏 |
^U | 往上滚动半屏 |
z命令调整屏幕位置
z Enter | 当前行作为屏幕顶端行 光标移动到屏幕顶端 |
z. | 当前行作为屏幕中间行 光标移动到屏幕中间 |
z- | 当前行作为屏幕底端行 光标移动到屏幕底端 |
z之前加数字表示处理的行号
屏幕重绘 ^L
H | 移动到屏幕顶端 |
M | 移动到屏幕中间 |
L | 移动到屏幕底端 |
nH | 移动到屏幕顶端开始往下的第n行 |
nL | 移动到屏幕底端开始往上的第n行 |
行移动
Enter | 移动到下一行的第一个字符 |
+ | 移动到i下一行的第一个字符 |
- | 移动到上一行的第一个字符 |
| |
当前行移动
^ | 移动到当前行第一个非空字符处 |
n| | 移动到当前行第n列 |
文本块移动
e | 移动到单词的结尾 |
E | 移动到单词的结尾(忽略标点符号) |
( | 移动到句子开头 |
) | 移动到句子结尾 |
{ | 移动到段的开头 |
} | 移动到段的结尾 |
[[ | 移动到这一节的开头 |
]] | 移动到这一节的结尾 |
搜索
/ | 向下搜索 |
? | 向上搜索 |
n | 与上一搜索相同方向,继续搜索 |
N | 与上一搜索相反方向继续搜索 |
/Enter | 往下继续搜索 |
?Enter | 往上继续搜索 |
通过搜索修改文本
搜索命令之前加上文本操作
d/sad 删除向下搜索到的第一个sad
一行之内的搜索
fx | 搜索本行中下一个出现x的地方 |
Fx | 搜索本行中上一个出现x的地方 |
; | 重复上一个搜索,方向相同 |
, | 重复上一个搜索,方向相反 |
行间跳转
G | 跳转到最后一行 |
nG | 跳转到第n行 |
^G | 查看当前所在行 |
:set nu | 设置行号 |
`` | 回到上次跳转的光标位置 |
'' | 回到上次所在行的首位置 |
第四章 越过基础的藩篱
打开文件选项
前进到特定文位置
vi +n file | 在第一行打开file |
vi + file | 在最后i韩打开file |
vi +/pattern file | 在第一个出现pattern的地方打开file pattern中如果出现空格 可以+/"youcan" 或者+/you\ can指定 |
只读模式
vi -R file | |
viewfile | 可以指定打开文件的位置 强制写入文件可以保存 :w! :wq! |
缓冲区
恢复删除
对于删除的行级别的数据,每次删除都会放在缓冲区中,最后一次删除的内容放在缓冲区1中,倒数第二次放在缓冲区2中。
"2p | 恢复缓冲区2中的数据 |
"1pu.u.u | 对于不确定删除的缓冲区编号,可以一直按u.来确认因为每按一次.缓冲区的编号会相应增加 |
命令缓冲区
命名缓冲区要使用"加小写字母的形式
"dyy | 将当前行粘贴到缓冲区d中 |
"dP | 将缓冲区d的内容放置在光标前 |
"dp | 将缓冲区d的内容放置在光标后 |
标记
mx | 将当前光标位置标记为x |
'x | 将光标移动到x标记的所在行的行首 |
`x | 将光爆移动到x标记所在的位置 |
'' | 回到上次标记所在行的行首 |
`` | 回到上次标记所在位置 |
标记仅对当前会话有效