学习vi和vim编辑(3):一个简单的文本编辑器(2)
然后文章,继续评论vi编辑简单的文本编辑命令。
本文主要是删除的文字。复制,运动命令。
删除文本:
正如上一篇文章中讲过的,对于删除命令("d")也具有“(command)(TextObject)”的使用形式。当中command代表的是如删除("d"),替换("c")等命令,而TextObject指的是光标移动命令,代表command影响的文本对象范围。仅仅要记住了这一点,接下来的删除命令的组合就不须要记了:
dw:删除光标所在的位置到该单词的结尾(w就是光标移动命令中的向后移动一个单词),注意该命令会将这个单词之后的空白也删除;
de: 和dw命令一样,可是不会删除单词之后的空白;
dE: 删除到包含标点符号在内的单词结尾;
d$: 删除光标所在位置到该行结尾处。和D命令效果一样。
d0: 删除光标所在位置到该行開始处;
dd: 不管当前光标处于该行的哪个位置。都直接删除一整行;
d命令和光标移动命令的组合不仅仅这么多,这里就不一一举例了,仅仅要理解这样的组合的使用形式,就根本不须要记。
这里补充两个光标移动命令:" e "和" E " ,这两个命令都将光标移动到单词结尾,可是" e "命令移动到单词本身结尾,而" E "命令移动到该单词的标点符号之后。
假设须要删除字符,有更简单的命令。当然这些命令也能够加上数值參数:
x:删除光标所在的字符。
X: 删除光标之前的一个字符;
删除文件时发生的问题:假设误删了文本,该怎样补救呢?能够使用u命令撤销上一个命令。
可是由于u仅仅会撤销近期的一个命令。因此u命令恢复仅仅能用在还没有下达其它编辑命令时。个人认为书上这里讲的有问题,由于我连续删除十行的的时候,然后接着连续按下10个u,依旧能恢复到原来的样子,例如以下图所看到的,是须要删除的十行:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZnVjaGVuY29uZw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
在连续按下十个" dd "命令时。再接着连续按十个" u "命令进行恢复。依旧能恢复到最原始的样子,所以认为书上讲的有问题。临时先记录下来吧。
移动文本:
vi编辑器中移动文本是通过“删除后再放置文本实现的”,每次须要移动文本块时。先删除该文本块,这样文本块的内容就会存储在特殊的缓冲区中。然后将光标移动到正确的位置,使用放置命令(p)将刚刚删除的文本放在新的位置。从而实现文本的移动。
p:将缓冲区的文本放在光标之后,假设移动了一行及一行以上的文本,则是放置在光标之后的新的一行。假设移动不到一行,则将移动的文本放置在光标之后的同一行。
P:与p命令类似,仅仅只是是将缓冲区中的文本放置到光标之前;
须要说明的是," p "命令是将刚刚删除的文本放置到新的位置,所以一定要在做下一个删除动作前,将眼下删除的本文恢复过来,否则假设做了一个影响缓冲区的编辑动作(删除,拖曳等),那么当前被删除的文本就会消失。
类似的,能够通过" xp "命令完毕两个字母的对调。
复制文本:
复制文本是通过两个命令" y "(拖曳)和" p "(放置)来实现的。" y "命令也具有(command)(TextObject)的使用形式。因此能够将拖曳命令和光标移动命令进行组合使用。从而指定须要拖曳的文本范围。
这里就不再列出拖曳命令和光标移动命令的组合了,可是有个特殊情况," Y "命令等同于" yy "命令。都表示拖曳一整行(而在删除,替换命令中,D等同于d$。C等同于c$)。
拖曳命令和删除命令共用一个缓冲区,所以每个新的删除或拖曳命令都会覆盖缓冲区中的内容。
反复:
反复命令为“.”,直接反复上一个命令。
撤销命令:
前面提过,当出现错误操作时,能够使用" u "命令撤销上一个操作。
" U "命令能够撤销全部对同一行的编辑动作,可是须要光标还在这一行,一旦光标离开了这一行,就无法使用U命令对原先的这一行进行恢复了。
很多其它插入文本的方法:
上一篇文章已经讲了" i "和" a "两个命令来插入文本,事实上还有多个插入文本的命令:
A: 在一行的结尾处加入文本。
I:在一行的开头处加入文本;
o:在光标所在位置的下一行加入新的一行;
O:在光标所在位置的上一行加入新的一行;
并且之前讲过的全部插入命令中。除了o与O命令,都能够接受数值參数。比如" 50i*ESC "就能够直接插入50个" * "字符," 10a*-ESC "就能够直接加入10个" *- "字符对。" 2r* "能够直接将当前光标之后的两个字符替换为两个" * "。
例如以下图所看到的:按键顺序为" 50。i。*,ESC "。则出现了50个" * "。感觉并非立即就出来了,要等将近1秒钟:
用J命令合并两行,假设在J命令前面加上数值參数,则能够指定须要合并的行数。
本章vi编辑器命令总结:
d。D。dd,e,E,p。y,Y,yy,.,u,U,A,I,o,O,J。
版权声明:本文博客原创文章。博客,未经同意,不得转载。
学习vi和vim编辑(3):一个简单的文本编辑器(2)的更多相关文章
- python使用wxPython创建一个简单的文本编辑器。
ubuntu下通过'sudo apt-get install python-wxtools'下载wxPython.load和save函数用于加载和保存文件内容,button通过Bind函数绑定这两个函 ...
- 学习vi和vim编辑(4):高速移动定位
平时.第一步是编辑文本需要做将光标移动到需要编辑.因此,根据需要,将光标移动到目标数字键来编辑文本的速度在一定程度上. 一篇文章.主要介绍怎样高速移动光标. 依据屏幕来移动: 在一个有几千行文本的文件 ...
- 一个简单的文本编辑器。(是在DEV C++下写的)
//头文件// main.h #define CM_FILE_SAVEAS 9072 #define CM_FILE_EXIT 9071 #define CM_FILE_OPEN 9070 #defi ...
- C++ 容器的综合应用的一个简单实例——文本查询程序
C++ 容器的综合应用的一个简单实例——文本查询程序 [0. 需求] 最近在粗略学习<C++ Primer 4th>的容器内容,关联容器的章节末尾有个很不错的实例.通过实现一个简单的文本查 ...
- 原生JS实现简单富文本编辑器2
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 原生JS实现简单富文本编辑器
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 学习vi和vim编辑器(1):vi文本编辑器
UNIX系统中有非常多编辑器.能够分为两种类型:行编辑器和全屏编辑器.行编辑器每次仅仅能在屏幕中显示文件的一行,如ed和ex编辑器.全屏编辑器能够在屏幕上显示文件的一部分. vi(读为vee-eye) ...
- QML学习笔记(五)— 做一个简单的待做事项列表
做一个简单的QML待做事项列表,能够动态添加和删除和编辑数据 GitHub:八至 作者:狐狸家的鱼 本文链接:QML学习笔记(五)— 做一个待做事项列表 主要用到QML:ListView 效果 全部代 ...
- GNU Make 学习系列一:怎样写一个简单的Makefile
编程通常遵循一个相当简单的程序:编辑源文件,编译源代码成可执行的格式,调试结果.尽管将源代码翻译成可执行程序是常规的过程,如果做的不正确,程序员可能会浪费大量的时间去追踪问题.大多数的开发者都经历过这 ...
随机推荐
- poj1155(树形dp)
题目链接:http://poj.org/problem?id=1155 题意:电视台要直播一场比赛,电视网络刚好形成了一棵树,其中有M个为客户端,其他的为中转站,其中中转站与中转站以及中转站与客户端之 ...
- POJ 3286 How many 0's?
题目大意: 计算[m,n]之间全部数字有多少个零. 解题思路: 能够用[0,m)之间和[0,n]之间有多少个零然后作差. 规律是计算全部位置在到当前数时有多少个零. 以下是代码: #include ...
- 学了Java 你未必知道这些
作为一个正奔跑向编程完美天堂的朝圣者,本人觉得在平常的编程中,应该要做到以下几点: 一:汝应注释,这样做既方便别人,也方便自己去读懂代码的逻辑 二:注重细节,为自己写的每行代码负责,比如,在并发编程的 ...
- d3d纹理参数
D3DTEXTURESTAGESTATETYPE 纹理状态定义了一个多层次的复杂的操作质感.一些采样工作状态设置顶点,有些组像素操作. 纹理层次状态可以快速保存并返回状态. typedef enum ...
- 初识google多语言通信框架gRPC系列(四)C++中使用gRPC
我的这几篇文章都是使用gRPC的example,不是直接编译example,而是新建一个项目,从添加依赖,编译example代码,执行example.这样做可以为我们创建自己的项目提供借鉴.如果对gR ...
- C语言程序代写(QQ:928900200)
1.学生成绩统计 要求描述: 用结构数组实现学生信息的统计功能. struct student { long no; /*学号*/ char name[10]; /*姓名*/ char sex; /* ...
- arcmap坐标点生成线和面(更正版)
一:本博客的脉络 (1 )做了例如以下更正:之前在网上搜到的结果是:arcmap坐标点生成线和面 ------ 注意该功能在ArcGIS10中没有了,当时自己也没有多想就转载了,再此做一下更正或者叫做 ...
- Android开发调节屏幕亮度
在播放器,我们经常看到这样的设计,即,在用户的特定部分将能够滑动屏幕向上或向下调整屏幕的亮度,上下滑动的某一部分将能够调整播放音量.并以滑动的进程可以进行调整,以玩. 如今,我不得不说一下亮度调节. ...
- 【 D3.js 入门系列 --- 4 】 怎样使用scale(比例)
本人的个人博客为: www.ourd3js.com csdn博客为: blog.csdn.net/lzhlzz 转载请注明出处,谢谢. 在上一节中使用了一个非常重要的概念 - scale (这个不知道 ...
- Python使用subprocess的Popen要调用系统命令
当我们须要调用系统的命令的时候,最先考虑的os模块.用os.system()和os.popen()来进行操作.可是这两个命令过于简单.不能完毕一些复杂的操作,如给执行的命令提供输入或者读取命令的输出, ...