6命令模式
- 格式:doc
- 大小:135.00 KB
- 文档页数:12
简要说明vi三种模式及相互转换
vi编辑器具有三种不同的模式:命令模式、插入模式和底行模式。
1. 命令模式(Command Mode)
当打开一个文件时,vi默认处于命令模式。
在该模式下,键盘输入的字符将被解释为命令而不是文本。
命令模式下的一些常用命令有:i(进入插入模式)、x(删除光标所在位置的字符)、dd(删除当前行)、yy(复制当前行)、p(粘贴)等。
2. 插入模式(Insert Mode)
当用户想输入文本时,需要进入插入模式。
可以通过在命令模式下按下i、a、o、A、O等键进入插入模式。
在插入模式中,用户可以输入文本内容,并按ESC键返回命令模式。
3. 底行模式(Ex Mode)
底行模式(Colon Mode)是在命令模式下输入冒号(:)来进入的。
底行模式中可以执行一些文件操作命令,如保存、退出、查找、替换等。
底行模式下的常用命令有:w(保存文件)、q(退出)、wq(保存并退出)、/(查找)、:s/old/new/g(替换)等。
三种模式之间的转换如下:
在命令模式下按"i"键,可进入插入模式。
在命令模式下按冒号键 ":",进入底行模式。
在插入模式下按ESC键,回到命令模式。
在底行模式下按ESC键,回到命令模式。
一般模式∶ 移动游标的方法h 或 向左方向键(←)游标向左移动一个字元j 或 向下方向键(↓)游标向下移动一个字元k 或 向上方向键(↑)游标向上移动一个字元l 或 向右方向键(→)游标向右移动一个字元如果想要进行多次移动的话,例如向下移动 30 行,可以使用 "30j" 或 "30↓" 的组合按键, 亦即加上想要进行的次数(数字)后,按下动作即可![Ctrl] + [f]萤幕『向下』移动一页,相当于 [Page Down]按键 (常用)[Ctrl] + [b]萤幕『向上』移动一页,相当于 [Page Up] 按键 (常用)0这是数字『 0 』∶移动到这一行的最前面字元处 (常用)$移动到这一行的最后面字元处(常用)G移动到这个档案的最后一行(常用)gg移动到这个档案的第一行,相当于 1G 啊! (常用)n<Enter>n 为数字。
游标向下移动 n 行(常用)一般模式∶ 搜寻与取代/word 向游标之下寻找一个字串名称为 word 的字串。
例如要在档案内搜寻 vbird 这个字串,就输入 /vbird 即可! (常用):n1,n2s/word1/word2/g n1 与 n2 为数字。
在第 n1 与 n2 行之间寻找 word1 这个字串,并将该字串取代为 word2 !举例来说,在 100 到 200 行之间搜寻 vbird 并取代为 VBIRD 则∶『:100,200s/vbird/VBIRD/g』。
(常用):1,$s/word1/word2/g 从第一行到最后一行寻找 word1 字串,并将该字串取代为word2 !(常用):1,$s/word1/word2/gc 从第一行到最后一行寻找 word1 字串,并将该字串取代为word2 !且在取代前显示提示字元给使用者确认 (conform) 是否需要取代!(常用)一般模式∶ 删除、复制与贴上x, X 在一行字当中,x 为向后删除一个字元 (相当于 [del] 按键),X 为向前删除一个字元(相当于 [backspace] 亦即是倒退键) (常用)dd删除游标所在的那一整列(常用)ndd n 为数字。
vi编辑器的三种模式vi编辑器的三种模式通常来说,vi编辑器有三种模式,分别是⼀般指令模式、编辑模式与指令⾏命令模式。
这三种模式的作⽤分别是:⼀般指令模式(command mode)以 vi 打开⼀个⽂件就直接进⼊⼀般指令模式了(这是默认的模式,也简称为⼀般模式)。
在这个模式中,你可以使⽤上下左右按键来移动光标,你可以使⽤删除字符或删除整⾏来处理⽂件内容,也可以使⽤复制、黏贴来处理你的⽂件数据。
编辑模式(insert mode)编辑模式可以对内容进⾏编辑,按下i, I, o, O, a, A, r, R等任何⼀个字母之后即可进⼊编辑模式。
如果要回到⼀般指令模式时,则必须要按下Esc这个按键即可退出编辑模式。
命令⾏模式(command-line mode)在⼀般模式当中,输⼊:, /, ? 三个中的任何⼀个按钮,就可以将光标移动到最底下那⼀⾏。
在这个模式当中,可以提供你搜寻资料的动作,⽽读取、存盘、⼤量取代字符、离开 vi 、显⽰⾏号等等的动作则是在此模式中达成的!总之,三者的关系可以⽤下图来概况:各模式下的快捷键⼀般指令模式移动光标的⽅法h 或向左箭头键(←)光标向左移动⼀个字符j 或向下箭头键(↓)光标向下移动⼀个字符k 或向上箭头键(↑)光标向上移动⼀个字符l 或向右箭头键(→)光标向右移动⼀个字符hjkl 是排列在⼀起的,因此可以使⽤这四个按钮来移动光标。
如果想要进⾏多次移动的话,例如向下移动 30 ⾏,可以使⽤ “30j” 或 “30↓” 的组合按键,亦即加上想要进⾏的次数(数字)后,按下动作即可![Ctrl] + [f]屏幕向下移动⼀页,相当于 [Page Down]按键[Ctrl] + [b]屏幕向上移动⼀页,相当于 [Page Up] 按键[Ctrl] + [d]屏幕向下移动半页[Ctrl] + [u]屏幕向上移动半页n<space>n 表⽰数字,例如 20 。
按下数字后再按空格键,光标会向右移动这⼀⾏的 n 个字符。
Vi编辑器的基本使用方法vi 分为三种状态:命令模式(Command mode):控制光标的移动,字符、字或行的删除,移动复制某区段及进入插入模式和底行模式;插入模式(Insert mode):只有在此模式下才可以做文字输入,按「ESC」回到命令行模式;底行模式(Last line mode):将文件保存或退出vi,也可以设置编辑环境,如寻找字符串、列出行号等。
进入vi:在系统提示符号$下输入vi myfile,就进入vi 全屏幕编辑画面。
初态为:命令模式。
只有插入模式才能够输入文字。
1、插入模式的命令简介在「命令模式」下:按「i」切换进入插入模式后从光标当前位置开始输入文字;I 从光标所在的列的第一个非空白字符前面开始插入文字。
按「a」进入插入模式后从光标所在位置的下一个位置开始输入文字;A 从光标所在列最后面的地方开始新增资料。
按「o」进入插入模式后并插入新的一行,从行首开始输入文字;O 从光标所在列上方新增1 列并进入插入模式。
在「插入模式」下只能一直输入文字,如果输错了字则只能按「ESC」转到「命令模式」来删除。
2、命令模式的命令简介移动vi 用小写英文字母「h」、「j」、「k」、「光标移到该行的第#个位置,如:5l, 56l 删除「x」:每按一次,删除光标所在位置的“后面”一个字符「#x」:例如,「6x」表示删除光标所在位置的“后面”6个字符「X」:大写的X,每按一次,删除光标所在位置的“前面”一个字符「#X」:例如,「20X」表示删除光标所在位置的“前面”20个字符「dd」:删除光标所在行「#dd」:从光标所在行开始删除#行复制「yw」:将光标所在之处到字尾的字符复制到缓冲区中「#yw」:复制#个字到缓冲区「yy」:复制光标所在行到缓冲区「#yy」:例如,「6yy」表示拷贝从光标所在的该行“往下数”6行文字「p」:将缓冲区内的字符贴到光标所在位置。
注意:所有与“y”有关的复制命令都必须与“p”配合才能完成复制与粘贴功能替换「r」:替换光标所在处的字符「R」:替换光标所到之处的字符,直到按下「ESC」键为止恢复「u」:如果您误执行一个命令,可以马上按下「u」,回到上一个操作。
安卓常⽤的6种设计模式总结最近看到两篇博客,觉得很不错,记录⼀下由于项⽬变更的频繁性,作为⼀名程序员,我们需要掌握设计模式的必要性,就不⾔⽽喻~~,下⾯就是⼀些我⾃⼰学习的设计模式总结。
接下来,主要是针对⼏个⽐较常⽤模式进⾏讲解,主要是以下⼏种:观察者模式适配器模式代理模式⼯⼚模式单例模式命令模式1.观察者模式(Observer Pattern)释义:观察者模式定义了⼀种⼀对多的依赖关系,让多个观察者对象同时监听某⼀个主题对象,这个主题对象在状态上发⽣变化时,会通知所有观察者对象,使他们能够⾃动更新⾃⼰。
故事理解:观察者想知道公司所有MM的情况,只要加⼊公司的MM情报邮件组就⾏了,tom负责搜集情报,当发现新情报时,不⽤⼀个⼀个通知我们,直接发布给邮件组,我们作为订阅者(观察者)就可以及时收到情报啦。
常见实例:1.BaseAdapter.registerDataSetObserver和BaseAdapter.unregisterDataSetObserver两⽅法来向BaseAdater注册、注销⼀个DataSetObserver ; 2.使⽤ContentObserver去监听数据库变化。
适⽤场景:1.当对⼀个对象的改变需要同时改变其他对象,⽽不知道具体有多少对象有待改变;2.当⼀个对象必须通知其它对象,⽽它⼜不能假定其它对象是谁.观察者模式主要有观察者和被观察者2个对象,在该模式中,Observable表⽰被观察者,这个对象是⼀个抽象类,只能被继承。
Observer表⽰观察者,他是⼀个接⼝,所以观察者可以有多个,实现了该接⼝的类都是属于观察者。
这是⽹上⼀个⽣动细致的demo:被观察者:public class MyPerson extends Observable {private int age;private String name;private String sax;public int getAge() {return age;}public void setAge(int age) {this.age = age;setChanged();notifyObservers();}public String getName() {return name;}public void setName(String name) { = name;setChanged();notifyObservers();}public String getSax() {return sax;}public void setSax(String sax) {this.sax = sax;}@Overridepublic String toString() {return "MyPerson [age=" + age + ", name=" + name + ", sax=" + sax + "]";}}MyPerson是被观察者,类中调⽤了setChange()以及notifyObservers()两个⽅法,前者是告知数据改变,后者是发送信号通知观察者。
vi指令说明(完整版).vi 的操作模式==============vi 提供两种操作模式:输入模式(insert mode)和指令模式(command mode)。
当用户进入vi 后,即处在指令模式下,此刻键入之任何字符皆被视为指令。
在此模式下可进行删除、修改等动作。
若要输入数据,则需进入输入模式。
.输入模式=========如何进入输入模式a (append) 由光标之后加入数据。
A 由该行之末加入数据。
i (insert) 由光标之前加入数据。
I 由该行之首加入数据。
o (open) 新增一行于该行之下供输入数据之用。
O 新增一行于该行之上供输入数据之用。
如何离开输入模式《ESC》结束输入模式。
.指令模式=========光标之移动h 向左移一个字符。
j 向上移一个字符。
k 向下移一个字符。
l 向右移一个字符。
0 移至该行之首$ 移至该行之末。
^ 移至该行的第一个字符处。
H 移至窗口的第一列。
M 移至窗口的中间那列。
L 移至窗口的最后一列。
G 移至该档案的最后一列。
+ 移至下一列的第一个字符处。
- 移至上一列的第一个字符处。
( 移至该句之首。
(注一)) 移至该句之末。
{ 移至该段落之首。
(注二)} 移至该段落之末。
nG 移至该档案的第n 列。
n+ 移至光标所在位置之后的第n 列。
n- 移至光标所在位置之前的第n 列。
<Ctrl><g> 会显示该行之行号、文件名、档案中最末行之行号、游标所在行号占总行号之百分比。
注一:句子(sentence)在vi中是指以『!』、『.』或『?』结束的一串字。
注二:段落(paragraph)在vi中是指以空白行隔开的文字。
.窗口的移动===========<Ctrl><f> 窗口往下卷一页。
<Ctrl><b> 窗口往上卷一页。
<Ctrl><d> 窗口往下卷半页。
<Ctrl><u> 窗口往上卷半页。
VF6.0常用命令和主要程序命令一、主要命令:二、常用函数三、主要程序语句一、主要命令:1、CREATE作用:建立一个新的表。
格式:CREATE [<文件>|?](注意,命令字符可取前面四个字符,后面可省略不写,即CREA ,下同;中括号表示其中的参数是可选的;|管道符号表示两个参数只能选择一个,不能同时选择,下同。
)说明:文件指建立以.dbf为扩展名的VFP数据库文件,在命令后面加上一个问号表示系统会弹出对话框,要求用户输入想要建立的表名。
在命令中不加文件名或问号系统也会弹出对话框,要求用户输入想要建立的表名。
2、MODIFY STRUCTURE作用:显示表文件结构,并允许修改此表的结构。
格式:MODIFY STRUCTURE说明:只有在用USE命令打开表文件以后,才能显示或修改表文件的结构。
3、APPEND作用:在当前表的尾部(无论表中有无记录)追加记录(在当前表指当前正使用的表)。
格式:APPEND [BLANK]说明:在APPEND命令后面加上BLANK参数表示在当前表的尾部添加一条空白记录。
无BLANK参数时,表示在当前表的尾部添加一条记录并要求用户输入相应的字段内容。
4、INSERT作用:在表文件中间插入一个新记录。
格式:INSERT [BEFORE] [BLANK]说明:INSERT 在当前记录后插入一记录;INSERT BEFORE 在当前记录前插入一记录;INSERT BEFORE BLANK 在当前记录前插入一空记录。
5、BROWSE作用:主要用于打开浏览窗口,查阅表文件并同时进行修改。
格式:BROWSE6、USE作用:打开和关闭表文件。
格式:USE [<文件名>]USE说明:前一个命令用来打开<文件名>指定的表文件,该表如有备注型字段,则同时打开相应的备注文件(.fpt文件);后一个命令关闭当前打开的表文件。
7、LIST和DISPLAY作用:显示表(.dbf)的内容、结构或状态。
PHP命令行运行模式1. 执行PHP脚本:在命令行中输入"php script.php"即可执行PHP脚本,程序会按照脚本中编写的逻辑执行。
2. 不需要Web服务器:与在Web服务器上运行不同,命令行模式下不需要启动、配置和管理Web服务器即可运行PHP脚本,简化了环境搭建和部署过程。
3.脚本模式和交互模式:PHP命令行模式支持两种运行方式。
脚本模式下,可以直接运行一个PHP脚本,脚本执行完毕后就退出;交互模式下,可以直接在命令行中输入单行代码,并立即得到运行结果,方便进行实时测试和调试。
4. 命令行参数:在执行PHP脚本时,可以通过命令行参数来传递参数给脚本。
例如,可以在命令行中输入"php script.php arg1 arg2"来将"arg1"和"arg2"作为参数传递给脚本,脚本可以通过$_SERVER['argv']来获取这些参数。
5.脚本定时任务:借助命令行模式,可以方便地通过系统定时任务来调度和执行PHP脚本。
开发者可以编写脚本来实现一些定期执行的任务,如生成备份文件、日志清理等。
6.脚本调试和测试:命令行模式下非常适合进行脚本的调试和测试。
开发者可以直观地观察脚本的执行结果,并在需要时打印调试信息。
此外,可以通过命令行参数来模拟不同的输入情况,验证脚本的正确性。
7. 功能扩展:与Web服务器模式相比,命令行模式可以更容易地扩展PHP的功能。
PHP命令行模式可以加载和使用不同的扩展模块,使得开发者可以根据实际需求选择合适的扩展模块,以提供更多的功能支持。
8.并行处理:命令行模式下可以方便地进行并行处理。
开发者可以通过多进程或多线程的方式来同时执行多个PHP脚本,以提高处理能力和效率。
除了以上特点,还有一些值得注意的细节和常用的命令行工具:1. shebang:在Linux和Unix系统中,可以在PHP脚本的第一行添加shebang,指定使用哪个解释器来执行该脚本。
命令模式类图:代码:#include<iostream>using namespace std;class Light{public:Light(string s){cout<<"Light On "<<s<<endl;}~Light(){}void on(){cout<<"Light On"<<endl;}void off(){cout<<"Light Off"<<endl;}};class CeilingFan{public:static const int HIGH = 3;static const int MEDIUM = 2;static const int LOW = 1;static const int OFF = 0;string location;int speed;CeilingFan(string s){location = s;speed =OFF;cout<<"CeilingFan On "<<location<<endl;}~CeilingFan(){}void on(){cout<<"CeilingFan On"<<endl;}void off(){speed = OFF;cout<<"CeilingFan Off"<<endl;}void high(){speed = HIGH;}void medium(){speed = MEDIUM;}void low(){speed = LOW;}int getSpeed(){return speed;}};class GarageDoor{public:GarageDoor(string s){cout<<"GarageDoor On "<<s<<endl;}~GarageDoor(){}void up(){cout<<"GarageDoor Up"<<endl;}void down(){cout<<"GarageDoor down"<<endl;}};class Stereo{public:Stereo(string s){cout<<"Stereo On "<<s<<endl;}~Stereo(){}void on(){cout<<"Stereo On"<<endl;}void off(){cout<<"Stereo Off"<<endl;}void setCD(){cout<<"Stereo CD"<<endl;}void setV olume(int n){cout<<"Stereo V olume "<<n<<endl;}};class Command{public:Command(){}~Command(){}virtual void execute()=0;virtual void undo()=0;virtual string getClass()=0;};class NoCommand:public Command {public:NoCommand(){}~NoCommand(){}void execute(){}void undo(){}string getClass(){}};class LightOnCommand:public Command {public:Light* light;LightOnCommand(Light* l){light = l;}void execute(){light->on();}void undo(){light->off();}string getClass(){return "LightOnCommand";}~LightOnCommand(){}};class LightOffCommand:public Command {public:Light* light;LightOffCommand(Light* l){light = l;}void execute(){light->off();}void undo(){light->on();}string getClass(){return "LightOffCommand";}~LightOffCommand(){}};class CeilingFanOnCommand:public Command{public:CeilingFan* fan;CeilingFanOnCommand(CeilingFan* f){fan = f;}void execute(){fan->on();}void undo(){fan->off();}string getClass(){return "CeilingFanOnCommand";}~CeilingFanOnCommand(){}};class CeilingFanOffCommand:public Command {public:CeilingFan* fan;CeilingFanOffCommand(CeilingFan* f){fan = f;}void execute(){fan->off();}void undo(){fan->on();}string getClass(){return "CeilingFanOffCommand";}~CeilingFanOffCommand(){}};class CeilingFanHighCommand:public Command {public:CeilingFan* fan;int prevSpeed;CeilingFanHighCommand(CeilingFan* f){fan = f;}void execute(){prevSpeed = fan->getSpeed();fan->high();}void undo(){if(prevSpeed == fan->HIGH){fan->high();}else if(prevSpeed == fan->MEDIUM){fan->medium();}else if(prevSpeed == fan->LOW){fan->low();}}string getClass(){return "CeilingFanHighCommand";}~CeilingFanHighCommand(){}};class GarageDoorUpCommand:public Command {public:GarageDoor* door;GarageDoorUpCommand(GarageDoor* d){door = d;}void execute(){door->up();}void undo(){door->down();}string getClass(){return "GarageDoorUpCommand";}~GarageDoorUpCommand(){}};class GarageDoorDownCommand:public Command {public:GarageDoor* door;GarageDoorDownCommand(GarageDoor* d){door = d;}void execute(){door->down();}void undo(){door->up();}string getClass(){return "GarageDoorDownCommand";}~GarageDoorDownCommand(){}};class StereoOnWithCDCommand:public Command {public:Stereo* stereo;StereoOnWithCDCommand(Stereo* s){stereo = s;}void execute(){stereo->on();stereo->setCD();stereo->setV olume(11);}void undo(){stereo->off();}string getClass(){return "StereoOnWithCDCommand";}~StereoOnWithCDCommand(){}};class StereoOffCommand:public Command{public:Stereo* stereo;StereoOffCommand(Stereo* s){stereo = s;}void execute(){stereo->off();}void undo(){stereo->on();stereo->setCD();stereo->setV olume(11);}string getClass(){return "StereoOffCommand";}~StereoOffCommand(){}};class RemoteControl{public:Command* onCommands[7];Command* offCommands[7];Command* undoCommand;Command* noCommand;RemoteControl(){noCommand = new NoCommand();for(int i=0;i<7;i++){onCommands[i] = noCommand;offCommands[i] = noCommand;}undoCommand = noCommand;}int length(){int len=0;for(int i=0;i<7;i++){if(onCommands[i]!=noCommand)len++;}return len;}void setCommand(int slot,Command* onCommand,Command* offCommand) {onCommands[slot] = onCommand;offCommands[slot] = offCommand;}void onButtonWasPushed(int slot){if(onCommands[slot]!=NULL){onCommands[slot]->execute();undoCommand = onCommands[slot];}}void offButtonWasPushed(int slot){if(offCommands[slot]!=NULL){offCommands[slot]->execute();undoCommand = offCommands[slot];}}void undoButtonWasPushed(){undoCommand->undo();}void toString(){cout<<"\n------Remote Control--------\n";for(int i=0;i<this->length();i++){cout<<"[slot "<<i<<"] "<<onCommands[i]->getClass()<<" "<<offCommands[i]->getClass()<<"\n";}}};int main(){RemoteControl* remoteControl = new RemoteControl();// 所有装置创建在合适的位置Light* livingRoomLight = new Light("Living Room");Light* kitchenLight = new Light("Kitchen");CeilingFan* ceilingFan= new CeilingFan("Living Room");GarageDoor* garageDoor = new GarageDoor("");Stereo* stereo = new Stereo("Living Room");// 创建所有电灯命令对象LightOnCommand* livingRoomLightOn =new LightOnCommand(livingRoomLight);LightOffCommand* livingRoomLightOff =new LightOffCommand(livingRoomLight);LightOnCommand* kitchenLightOn =new LightOnCommand(kitchenLight);LightOffCommand* kitchenLightOff =new LightOffCommand(kitchenLight);// 创建掉扇开与关命令CeilingFanOnCommand* ceilingFanOn =new CeilingFanOnCommand(ceilingFan);CeilingFanOffCommand* ceilingFanOff =new CeilingFanOffCommand(ceilingFan);// 创建车库门上与下的命令GarageDoorUpCommand* garageDoorUp =new GarageDoorUpCommand(garageDoor);GarageDoorDownCommand* garageDoorDown =new GarageDoorDownCommand(garageDoor);// 创建音响开与关命令StereoOnWithCDCommand* stereoOnWithCD =new StereoOnWithCDCommand(stereo);StereoOffCommand* stereoOff =new StereoOffCommand(stereo);// 所有命令加载到遥控器插槽中remoteControl->setCommand(0, livingRoomLightOn,livingRoomLightOff);remoteControl->setCommand(1, kitchenLightOn,kitchenLightOff);remoteControl->setCommand(2, ceilingFanOn,ceilingFanOff);remoteControl->setCommand(3, stereoOnWithCD,stereoOff);// 用toString()方法打印遥控器每个插槽指定的命令remoteControl->toString();// 按下每个插槽开与关命令remoteControl->onButtonWasPushed(0);remoteControl->offButtonWasPushed(0);remoteControl->onButtonWasPushed(1);remoteControl->offButtonWasPushed(1);remoteControl->onButtonWasPushed(2);remoteControl->offButtonWasPushed(2);remoteControl->onButtonWasPushed(3);remoteControl->offButtonWasPushed(3);remoteControl->undoButtonWasPushed();return 0;}。