一、vi编辑器有3种基本工作模式分别是:命令模式、文本输入模式、和末行模式。第一:命令行 模式:该模式是进入vi编辑器后的默认模式。任何时候,不管用户处于何种模式,按下ESC键即可进入命令模式。在该模式下,用户可以输入vi命令,用户管理自己的文档。此时从键盘上输入的任何字符都被当作编辑命令来解释。若输入的字符是合法的vi命令,则vi在接受用户命令之后完成相应的动作。但需要注意的是,所输入的命令并不回显在屏幕上。若输入的字符不是vi命令,vi会响铃报警。第二:文本输入模式:在命令模式下输入命令i、附加命令a、打开命令o、修改命令c、取代命令r或替换命令s都可以进入文本输入模式。在该模式下,用户输入的任何字符都被vi当作文件内容保护起来,并将其显示在屏幕上。在文本输入过程中,若想回到命令模式下,按ESC键即可。第三:末行模式:末行模式也称ex转义模式。在命令模式下,用户按“:”键即可进入末行模式下,此时vi会在显示窗口的最后一行(通常也是屏幕的最后一行)显示一个“:”作为末行模式的说明符,等待用户输入命令。多数文件管理 命令都是在此模式下执行的(如把编辑缓冲区的内容写到文件中等)。末行命令在执行完后,vi自动回到命令模式。如果要从命令模式转换到编辑模式,可以键入a或者i。如果需要从文本模式返回,则按ESC即可。在命令模式下输入“:”即可切换到末行模式,然后输入命令。实例演示首先我们使用命令 vi filename 打开一个文件,这个时候进入到的是命令模式接下来我们按i,然后键盘随便输入写内容。然后按ESC重新进入到命令模式。在命令模式的情况下,我们按:,进入到了末行模式。我们输入wq!,然后回车,强行保存退出。下次我们再打开对应文件(可用less filename命令打开),即可看到内容已经更改。补充:(1)末行模式下:q! 【强制退出不保存】 q【退出不保存】 wq【退出并保存后面也可以加个!】(2)如果你不想保存直接退出有可以在命令模式下使用“ctrl+z”快捷键 或者按住“shift”键,输入两个z即可退出。更多命令进入vi的命令:vi filename :打开或新建文件,并将光标置于第一行首vi +n filename :打开文件,并将光标置于第n行首vi + filename :打开文件,并将光标置于最后一行首vi +/pattern filename:打开文件,并将光标置于第一个与pattern匹配的串处vi -r filename :在上次正用vi编辑时发生系统崩溃,恢复filenamevi filename….filename :打开多个文件,依次进行编辑屏幕翻滚类命令:Ctrl+u:向文件首翻半屏Ctrl+d:向文件尾翻半屏Ctrl+f:向文件尾翻一屏Ctrl+b;向文件首翻一屏nz:将第n行滚至屏幕顶部,不指定n时将当前行滚至屏幕顶部。插入文本类命令:i :在光标前I :在当前行首a:光标后A:在当前行尾o:在当前行之下新开一行O:在当前行之上新开一行r:替换当前字符R:替换当前字符及其后的字符,直至按ESC键s:从当前光标位置处开始,以输入的文本替代指定数目的字符S:删除指定数目的行,并以所输入文本代替之ncw或nCW:修改指定数目的字nCC:修改指定数目的行删除命令:ndw或ndW:删除光标处开始及其后的n-1个字do:删至行首d$:删至行尾ndd:删除当前行及其后n-1行x或X:删除一个字符,x删除光标后的,而X删除光标前的Ctrl+u:删除输入方式下所输入的文本搜索及替换命令:/pattern:从光标开始处向文件尾搜索pattern?pattern:从光标开始处向文件首搜索patternn:在同一方向重复上一次搜索命令N:在反方向上重复上一次搜索命令:s/p1/p2/g:将当前行中所有p1均用p2替代:n1,n2s/p1/p2/g:将第n1至n2行中所有p1均用p2替代:g/p1/s//p2/g:将文件中所有p1均用p2替换撤销回退命令:u 撤销上一步的 *** 作Ctrl+r 恢复上一步被撤销的 *** 作选项设置:all:列出所有选项设置情况term:设置终端类型ignorance:在搜索中忽略大小写list:显示制表位 (Ctrl+I)和行尾标志($)number:显示行号report:显示由面向行的命令修改过的数目terse:显示简短的警告信息warn:在转到别的文件时若没保存当前文件则显示NO write信息nomagic:允许在搜索模式中,使用前面不带“\”的特殊字符 nowrapscan:禁止vi在搜索到达文件两端时,又从另一端开始mesg:允许vi显示其他用户用write写到自己终端上的信息末行模式命令::n1,n2 co n3:将n1行到n2行之间的内容拷贝到第n3行下:n1,n2 m n3:将n1行到n2行之间的内容移至到第n3行下:n1,n2 d :将n1行到n2行之间的内容删除:w :保存当前文件:e filename:打开文件filename进行编辑:x:保存当前文件并退出:q:退出vi:q!:不保存文件并退出vi:wq:保存并退出:!command:执行shell命令command:n1,n2 w!command:将文件中n1行至n2行的内容作为command的输入并执行之,若不指定n1,n2,则表示将整个文件内容作为command的输入:r!command:将命令command的输出结果放到当前行寄存器 *** 作:“?nyy:将当前行及其下n行的内容保存到寄存器?中,其中?为一个字母,n为一个数字“?nyw:将当前行及其下n个字保存到寄存器?中,其中?为一个字母,n为一个数字“?nyl:将当前行及其下n个字符保存到寄存器?中,其中?为一个字母,n为一个数字“?p:取出寄存器?中的内容并将其放到光标位置处。这里?可以是一个字母,也可以是一个数字ndd:将当前行及其下共n行文本删除,并将所删内容放到1号删除寄存器中。
emacs 快捷键众多,可以自己定义的快捷键很多,自定义快捷键能打造更适合自己的编辑器,宏定义是emacs比较强大的功能,自定义宏然后绑定快捷键之后就更加爽了。开启宏记录 C-x (
关闭宏记录 C-x )
执行刚刚录制的宏 C-x e
循环执行n次刚刚录制的宏 C-u n C-x e
给刚刚记录的宏记录编辑一个名字 M+x name-last-kbd-marco
把刚刚起名字的宏记录写入到文件里面 M+x insert-kbd-marco
先建立一个记录宏记录的文件,我是建立了~/.emacs.d/my_macro.el文件并把宏记录写入到里面。
在init.el中添加 (load-file "~/.emacs.d/my_macro.el")就能加载了,再用(global-set-key (kbd "...." ) '....)就能用绑定快捷键到一个相应名字的宏 *** 作了。
学习C/C++的朋友有没有想过完完全全的在Linux环境下开发软件!?我想过,可能是因为个人对Windows平台有些偏见,或者说个人不是非常喜欢在Windows下写程序的感觉,总觉得有那么一层膜隔阂着我们,不像Linux,可以做强大的服务器,在终端下只需要使用简简单单的命令便能完成相当复
杂的事情,是不是感觉很高深!?还有很多很多开源项目,Emacs也算一个吧!!!
呵呵,谈到在Linux下编程,我们不得不提这两款编辑器:vi/vim和Emacs(确切的说Emacs的功能已经远远超出了编辑器,使用它我们可能收
发邮件,玩游戏,排版等等)。Emacs的强大不得不让我们对设计出该编辑器的大师们发出崇高的敬意和赞叹,Emacs强大之处不仅仅局限于编辑功能,还
提供的许多自定义选项,还有我们可以不需要动鼠标便可完成日常工作(对于大多数人来说这可能不太现实),下面我只是简要的介绍如何使用Emacs编译/运
行C/C++程序,文中相关命令可以参考本人其他博文。
Emacs有很多版本,如Gnu Emacs、XEmac等等。而且Emacs在各个平台下均能表现的非常出色,前提是你要熟悉它。
首先,再次说明本人所使用的 *** 作系统是rhel 6.2,已经安装GNU Emacs 23.1.1和gcc version
4.4.6,注意Emacs只是一个编辑器,在我们程序员看来(其实我们也可以将其看作IDE,如果使用的比较熟练的话),最起码对于我这种菜鸟来说,还
不能十分熟练的玩转Emacs,它实在是太强大了,以至于有很多知识需要去记忆(不仅仅是快捷键)。
OK,不啰嗦了,下面进入正题:
1.启动Emacs,在终端输入“emacs&”命令后回车(你也可以输入“emacs”命令,不过当你在使用Emacs的时候,当前终端
就不为你工作了;并且如果你熟练使用Emacs的话也可以输入“emacs
-nw”命令以启动非X视窗下的Emacs),至于后面为什么要加一个“&”符,这是Linux里面的基本知识,加上“&”符后会在当前
终端下产生一个子进程以运行Emacs而不会对当前终端的工作造成任何影响,这里我们键入“emacs –nw”命令,启动界面如图1所示;
图1 键入“emacs –nw”命令后,Emacs的启动界面
2.打开/新建文件,进入Emacs界面后,键“C-x
C-f”以打开/创建一个新的文件(如图2所示),建议以C/C++语言里所规定的扩展名来指定创建的文件的扩展名,虽然在Linux下面我们不是十分强
调文件的扩展名,但是如果你选择正当的扩展名的话,将有助于高亮代码,并且Emacs会根据我们创建的文件的扩展名以进行不同语言(要知道,Emacs不
只是为了C/C++程序员设计的)编码风格的缩进;
图2 键“C-x C-f”,输入文件名以打开/创建一个新的文件
3.编辑文件,键“C-x C-s”存盘,本人测试的代码如下:
[cpp] view plain copy
#include
int main( ) {
std::cout <<"Hello, Emacs!!!"
<<std::endl
}
4.编译文件,这里我介绍两种方法。
法1:常规方法,参考Learning Gnu
Emacs,我们可以这样做:键“M-x”,此时在minibuffer中会显示“M-x”字样,输入“compile”命令后默认会显示
“Compile command: make -k”字样,此时把“make -k”删除后,运行相关编译命令(如现在我们应该键入“g++
test.cpp –o test”),如图3所示;
图3 minibuffer下键入“g++ test.cpp –o test”命令以编译源文件
法2:我想大多C/C++程序员会选择第二种编译方法,同样的,键“M-x”,输入“eshell”或“shell”命令,进入“eshell”或
“shell”缓冲区,这里我们键入的命令是“eshell”,然后同样的键入“g++ test.cpp –o
test”命令以编译源文件,如图4所示;
图4 eshell下键入“g++test.cpp –o test”命令以编译源文件
5.运行编译后的可执行文件,同样的按照第4步中的打开eshell缓冲区,输入相关命令即可执行编译后文件,这里我们应该输入“./test”命令,如图5所示。
图5 输入“./test”命令以执行编译后文件
注意:当我们进入其他缓冲区后,再想切换到编辑过的缓冲区可以键入“C-b
buffername”以切换到目的缓冲区。注意编辑(修改)后的缓冲区的名字格式为“*buffername*”,如上面我们切换到
“test.cpp”缓冲区应该buffername应为“test.cpp”,在我们打开“eshell”缓冲区之前我们已将其保存过了,切换到
“test.cpp”后再想切换到之前打开的“eshell”缓冲区的buffername应为“*eshell*”,这个缓冲区我们修改过了;
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)