学习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
编程通常遵循一个相当简单的程序:编辑源文件,编译源代码成可执行的格式,调试结果.尽管将源代码翻译成可执行程序是常规的过程,如果做的不正确,程序员可能会浪费大量的时间去追踪问题.大多数的开发者都经历过这 ...
随机推荐
- 【Java探索道路安全系列:Java可扩展的安全架构】一间:Java可扩展的安全体系结构开始
笔者:郭嘉 邮箱:allenwells@163.com 博客:http://blog.csdn.net/allenwells github:https://github.com/AllenWell [ ...
- 使用Google Roads API抓取道路信息(java实现)
Google Roads API提供了强大的道路获取接口,用户仅仅需调用对应的API就能够获取对应区域的道路坐标以及道路的限速信息. 详细的调用方法例如以下: https://roads.google ...
- 用XAML做网页!!—框架
原文:用XAML做网页!!-框架 上一篇中我进行了一下效果展示和概述,此篇开始将重现我此次尝试的步骤,我想大家通过阅读这些步骤,可以了解到XAML网页排版的方法. 下面就开始编写XAML,首先来定义一 ...
- WPF界面设计技巧(5)—自定义列表项呈现内容
原文:WPF界面设计技巧(5)-自定义列表项呈现内容 接续上次的程序,稍微改动一下原有样式,并添加一个数据模板,我们就可以达成下面这样的显示功能: 鼠标悬停于文件列表项上,会在工具提示中显示图像缩略图 ...
- 通过Java字节码发现有趣的内幕之String篇(上)(转)
原文出处: jaffa 很多时候我们在编写Java代码时,判断和猜测代码问题时主要是通过运行结果来得到答案,本博文主要是想通过Java字节码的方式来进一步求证我们已知的东西.这里没有对Java字节码知 ...
- How to debug with IntelliJ IDEA + Grails 2.3.x (转)
问题: 最近访问grails.org,看到grails framework已经发展到2.3.x了,不免想尝尝鲜.下载了最新的grails-2.3.x之后,创建了一个新的grails app. 添加Bo ...
- Linux下将UTF8编码批量转换成GB2312编码的方法
Linux下将UTF8编码批量转换成GB2312编码的方法 在sqlplus中导入UTF8编码的sql脚本就会出现乱码错误,这时就需要将UTF8编码转换成GB2312编码,下面为大家介绍下在Linux ...
- c++自带倒置数组函数
#include<stdio.h> #include <vector> #include <queue> #include<algorithm> usi ...
- 《JavaScript设计模式与开发实践》读书笔记之享元模式
1. 享元模式 享元模式是一种用于性能优化的模式,享元模式的核心是运用共享技术来有效支持大量细粒度的对象 1.1 传统的文件上传方法 以文件上传为例,文件上传功能可以选择依照队列,一个一个的排队上传, ...
- unity3d由于Camera.main.transform报空引用错误的解决方案
今天在导入character包后,引用了内置的第三人称素材,但是在启动的时候程序报空引用的错误: 引起错误的位置在: 错误原因是因为没有将摄像机的tag设置为maincamera,改为maincame ...