1. vim三种模式切换
vi(vim)键盘图及其基本命令
进入vi
vi filename 打开或新建文件,并将光标置于第一行首。
vi +n filename 打开文件,并将光标置于第 n行首。
vi + filename 打开文件,并将光标置于最后一行首。
vi -r filename 在上次正用 vi编辑时发生系统崩溃,恢复文件
vi file1....filen 打开多个文件,依次编辑。
vi的工作模式
命令行模式 (command mode):控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入Insert mode下,或者到 last line mode。
插入模式(Insert mode):只有在 Insert mode 下,才可以做文字输入,按「ESC」键可回到命令行模式。
底行模式(last line mode):将文件保存或退出 vi,也可以设置编辑环境,如寻找字符串、列出行号等。
命令行模式
移动光标
k、j、h、l 功能分别等同于上、下、左、右箭头键。
Ctrl+b 在文件中向上移动一页(相当于 PageUp 键)
Ctrl+f 在文件中向下移动一页(相当于 PageDown 键)。
ctrl+u 屏幕往后移动半页。
ctrl+d 屏幕往前移动半页。
H 将光标移到屏幕的最上行(Highest)。
nH 将光标移到屏幕的第 n 行(如 2H: 将光标移到屏幕的第 2 行)。
M 将光标移到屏幕的中间(Middle)。
L 将光标移到屏幕的最下行(Lowest)
nL 将光标移到屏幕的倒数第 n 行(如 3L:将光标移到屏幕的倒数第 3 行)
w 在指定行内右移光标,到下一个字的开头
e 在指定行内右移光标,到一个字的末尾
b 在指定行内左移光标,到前一个字的开头
0 数字0,左移光标,到本行的开头
G 光标移动到文章的最后
nG 光标移动到文章的第 n行(如8G:移动到文章的第 8行)
$ 右移光标,到本行的末尾
^ 移动光标,到本行的第一个非空字符
替换和删除
rc 用 c 替换光标所指向的当前字符
nrc 用 c 替换光标所指向的前 n 个字符(如 5rc: 用 c 替换光标所指向的前 5 个字符)
x 删除光标所在位置后面的一个字符
nx 删除光标所在位置后面的 n 个字符(如 3x:删除光标所在位置后面的 3 个字符)
X 大写的 X,删除光标所在位置前面的一个字符
nX 删除光标所在位置前面的 n 个字符(如 3X : 删除光标所在位置前面的 3 个字符)
dd 删除光标所在行,并去除空隙
ndd 从光标所在行开始删除 n 行内容,并去除空隙(如 3dd: 删除 3 行内容,并去除空隙)
复制和粘贴
从正文中删除的内容(如字符、字或行)并没有真正丢失,而是被剪切并复制到了一个内存缓冲区中。用户可将其粘贴到正文中的指定位置。
p 小写字母 p,将缓冲区的内容粘贴到光标的后面
P 大写字母 P,将缓冲区的内容粘贴到光标的前面
如果缓冲区的内容是字符或字,直接粘贴在光标的前面或后面;如果缓冲区的内容为整行正文则粘贴在当前光标所在行的上一行或下一行。
有时需要复制一段正文到新位置,同时保留原有位置的内容。这种情况下,首先应当把指定内容复制(而不是剪切)到内存缓冲区。完成这一操作的命令是:
yy 复制当前行到内存缓冲区
nyy 复制 n 行内容到内存缓冲区(如 5yy: 复制 5 行内容到内存缓冲区)
搜索字符串
/str1 正向搜索字符串 str1
n 继续搜索,找出 str1 字符串下次出现的位置
?str2 反向搜索字符串 str2
撤销和重复
u 撤消前一条命令的结果
. 重复最后一条修改正文的命令
文本选中
v 字符选中命令
V 行选中命令
插入模式
进入插入模式
i 在光标左侧输入正文
a 在光标右侧输入正文
o 在光标所在行的下一行增添新行
O 在光标所在行的上一行增添新行
I 在光标所在行的开头输入正文
A 在光标所在行的末尾输入正文
退出插入模式
ESC 键或组合键Ctrl+[
底行模式
在vi 的底行模式下,可以使用复杂的命令。
退出命令
在命令模式下可以用 ZZ 命令退出 vi 编辑程序,该命令保存对正文所作的修改,覆盖原始文件。如果只需要退出编辑程序,而不打算保存编辑的内容,可用下面的命令:
: q 在未作修改的情况下退出
: q! 放弃所有修改,退出编辑程序
行号和文件保存
: n 将光标移到第 n 行
:set nu 显示行号
:set nonu 取消行号显示
底行模式下,可以规定命令操作的行号范围。数值用来指定绝对行号;字符“.”表示光标所在行的行号;字符“$”表示正文最后一行的行号;简单的表达式,例如“.+5”表示当前行往下的第 5 行。例如:
: .+5 将光标移到当前行之后的第5行
: $ 将光标移到正文最后一行
在底行模式下,允许从文件中读取正文,或将正文写入文件。例如:
:w 将编辑的内容写入原始文件,用来保存编辑的中间结果
:wq 将编辑的内容写入原始文件并退出编辑程序(相当于 ZZ 命令)
:w file 将编辑的内容写入 file 文件,保持原有文件的内容不变
:a,bw file 将第 a 行至第 b 行的内容写入 file 文件 (如:1,.w file 将第 1 行至当前行写入 file 文件)
:r file 读取 file 文件的内容,插入当前光标所在行的后面
:f file 将当前文件重命名为 file
字符串搜索
:/str/ 正向搜索,将光标移到下一个包含字符串 str 的行
:?str? 反向搜索,将光标移到上一个包含字符串 str 的行
正文替换
:s/str1/str2/ 用字符串 str2 替换行中首次出现的字符串 str1
:s/str1/str2/g 用字符串 str2 替换行中所有出现的字符串 str1
:.,$ s/str1/str2/g 用字符串 str2 替换正文当前行到末尾所有出现的字符串 str1
:1,$ s/str1/str2/g 用字符串 str2 替换正文中所有出现的字符串 str1
:g/str1/s//str2/g 功能同上
从上述替换命令可以看到:g 放在命令末尾,表示对搜索字符串的每次出现进行替换;不加 g,表示只对搜索字符串的首次出现进行替换;g 放在命令开头,表示对正文中所有包含搜索字符串的行进行替换操作。
删除正文
:d 删除光标所在行
:3d 删除第 3 行
:.,$d 删除当前行至正文的末尾
:/str1/,/str2/d 删除从字符串 str1 到 str2 的所有行
恢复文件
vi 在编辑某个文件时,会另外生成一个临时文件,这个文件的名称通常以 . 开头,并以 .swp 结尾。vi 在正常退出时,该文件被删除,若意外退出,而没有保存文件的最新修改内容,则可以使用恢复命令,也可以在启动 vi 时利用 -r 选项。
:recover 恢复文件
选项设置
为控制不同的编辑功能,vi 提供了很多内部选项。利用 :set 命令可以设置选项。基本语法为:
:set option 设置选项 option
常见的功能选项包括:
autoindent 设置该选项,则正文自动缩进
ignorecase 设置该选项,则忽略规则表达式中大小写字母的区别
number 设置该选项,则显示正文行号
ruler 设置该选项,则在屏幕底部显示光标所在行、列的位置
tabstop 设置按 Tab 键跳过的空格数。例如 :set tabstop=n,n 默认值为 8
mk 将选项保存在当前目录的 .exrc 文件中
shell切换
在编辑正文时,利用 vi 底行模式下提供的shell 切换命令,无须退出 vi 即可执行Linux 命令
:! command 执行完shell 命令 command 后回到vi
另外,在命令模式下,键入K ,可命令 vi 查找光标所在单词的手册页,相当于运行man命令。
2. linux中vim三种模式切换
vi是一款所有类Unix系统都内建的一款文本编辑器。随着Linux系统的发展,vi也被进一步开发变成了vim。vim 具有程序编辑的能力,字体是有颜色的,可以方便程序设计。如果你的Linux发行版只有vi,想使用vim,则需要安装。Ubuntu可以使用下面命令来安装vim编辑器。
sudo apt-get install vim
vi编辑器有三种模式,分别是命令模式,编辑模式,末行模式。当我们一开始打开vi的时候,它就处于命令模式。例如使用vi pipe.c这样就打开了pipe.c。打开以后,只能看,不能编辑,因为处于命令模式。在编辑模式的时候,我们才能够编辑文本。从文本模式无法直接切换到末行模式。需要按下ESC进入命令模式,然后按下:(英文冒号),就进入末行模式了。在末行模式下连按2次Esc就切换到了命令模式。或者是在末行模式下输入除了q以为的命令按下回车,也可切换到命令模式。在命令模式下进入编辑模式可以使用i,s,o,a按键。这就是三种模式之间的切换
3. vim工作模式切换
很简单的,会用esc就行了,刚开始vim文件的模式就是基本的模式,可以移动光标,查看文件,按i进入插入模式,就可以写东西了,然后按esc退到基本模式,按ctrl v就是视图模式,可以选择大块的内容,再按esc就退出视图模式回到基本模式,按冒号就是command模式,写个w就保存了内容。反正模式之间切换要先esc回到基本模式,然后再进入想要的模式。
4. vim的三种运行模式如何切换
Vim中打开文件乱码主要是文件编码问题。用户可以参考如下解决方法。
1、用vim打开.vimrc配置文件
2、在.vimrc中加入如下内容settermencoding=utf-8setencoding=utf8setfileencodings=utf8,ucs-bom,gbk,cp936,gb2312,gb18030说明:encoding是Vim内部使用的字符编码方式,一般设置为utf8。termencoding是Vim所工作的终端(或者Windows的Console窗口)的字符编码方式,一般设置为utf8。fileencodings是Vim自动探测fileencoding的顺序列表,启动时会按照它所列出的字符编码方式逐一探测即将打开的文件的字符编码方式。这些设置需要set命令来进行设置生效。3、执行:wq保存退出vim,再次用vim打开文件即可。
5. vim三种模式切换示意图
vim
vim是vi发展而来的文本编辑器,代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。和Emacs并列成为类Unix系统用户最喜欢的编辑器,vim功能强大,插件种类众多,具有高度的定制化。
优点
1. 编码效率提高
列选择,宏,多功能的移动,以及一些自动提示,和功能性的拓展,让vim比IDE还要高效。
2.可以变成多面手
C++,python,html,script都可以解决,否则一个环境要一个IDE,这样学习的成本反而比vim要高。
3.按键组合比较少
4.大多数操作系统自带,不需要安装
vim的缺点:
双模式的切换目前达不到流畅使用,觉得双模式阻碍了编辑速度。
6. vim怎么切换模式
在默认的emacs模式中,需要输入长命令时可以随时用ctrl-x ctrl-e开vim编辑当前命令行,命令行原本的内容会自动载入到vim里,编辑完后ZZ保存退出,vim中的内容会自动替换到当前命令行。基本上无缝衔接,比bash中半桶水的vim模式好用得多。
有的系统ctrl-x ctrl-e时会默认开emacs(比如mac)或者nano,把环境变量EDITOR和VISUAL (好像一定要大写) 设成vim即可。也就是把下面这两行加到.bashrc里。
export EDITOR=vim
export VISUAL=vim
7. vim编辑器五种模式切换的方法
删除单行内容
将光标移动到需要删除的行
按一下ESC键,确保退出编辑模式
按两次键盘上面的 d键,就可以删除了。
删除所有的行
下面是三种删除方式
第一种方式
按一下ESC键,确保退出编辑模式
按两次键盘上面的 g键,让光标移动到文本的首行
然后按键盘上面的 d和 G键。其中d键是小写,G键要切换成大写的。
这样就可以删除所有内容了。
第二种方式
按一下ESC键,确保退出编辑模式
按一下 :冒号键,(shift + ;)就可以输入 :冒号了。
然后输入 1,$d
vim编辑器如何删除一行或者多行内容vim编辑器如何删除一行或者多行内容
第三种方式
按一下ESC键,确保退出编辑模式
按一下 :冒号键, shift + ; 就可以输入 :冒号了。
然后输入 %d。 %表示文件中的所有行。
vim编辑器如何删除一行或者多行内容vim编辑器如何删除一行或者多行内容
删除多行
将光标移动到需要删除的行
按一下ESC键,确保退出编辑模式
在dd 命令前面加上要删除的行数。例如,如果要删除第4行以下的3行,请按下 3 dd
vim编辑器如何删除一行或者多行内容vim编辑器如何删除一行或者多行内容
删除给定范围的行
实例一
如果你想要删除指定范围的行,比如从第3行到第5行,按ESC,然后输入下面的 命令,然后回车。
vim编辑器如何删除一行或者多行内容vim编辑器如何删除一行或者多行内容
实例二
删除最后一行,按ESC,然后输入下面的命令,然后回车。
vim编辑器如何删除一行或者多行内容vim编辑器如何删除一行或者多行内容。
8. vim 切换模式
dos格式文件传输到unix系统时,会在每行的结尾多一个^M,当然也有可能看不到,但是在vi的时候,会在下面显示此文件的格式,比如"dos.txt"[dos]120L,2532C字样,表示是一个[dos]格式文件,如果是MAC系统的,会显示[MAC],因为文件格式的原因有时会导致我们的unix程序,或者shell程序出现错误,那么需要把这些dos文件格式转换成unix格式,方法是 vidos.txt:setfileformat=unix:w 这样文件就转换成unix格式文件了,一般在windows机器上编写好了文件传到unix下就可能会出现这样的情况. 用命令:setff? 可以看到dos或unix的字样. 用:setff=unix把它强制为unix格式,也可以用sed这样的工具来做: sed's/^M//'filename>tmp_filename 其中^M是同时Ctrl+V+M按出来的,表示回车。
9. vim的三种模式
VIM的自动补全功能让你有效的避免输入错误,快速的完成变量名、类名、方法名的输入,善用之可以极大的提高软件开发的工作效率。需要提前说明的是,下面介绍的所有快捷键必须让VIM位于插入模式(即"i"Insert And Replace"模式)。VIM的自动补全方式一共有三种
已知单词
这是VIM中最基本的功能,当你键入某个单词的前几个字母,然后按<C-p>,VIM会自动搜索所有当前打开的缓冲区中的单词完成自动补全。<C-p>表示VIM从当前光标位置向前搜索,你也可以按<C-n>,表示从当前光标位置向前搜索。通常我们可以忽略<C-n>和<C-p>的区别。为了方便记忆,我选择按<C-p>,因为p代表previous,<C-p>表示补全之前(previous)已经键入的单词. 下面两个图分别是<C-n>和<C-p>的效果图,区别在于在自动补全菜单弹出时默认高亮的单词
另外,如果你打开的文件太多,那么自动补全可能会列出一大串来自其他缓冲区中的单词,这时可以使用<C-x><C-p>或者<C-x><C-n>让VIM仅仅列出当前缓冲区的单词。
关键词字典
前面讲到,通过<C-x><C-p>可以使VIM仅仅根据当前缓冲区的内容补全单词,其中,<C-x>表示让VIM进入插入模式的一个子模式,通过EX命令"help ins-complete"可以查阅所有以<C-x>开头的快捷键说明,但这不是本文的重点,不再累述。基于关键字字典补全的快捷键为<C-x><C-k>, ‘k’表示"keyword",即关键字。当<C-x><C-k>按下时,VIM会从"dictionary"全局变量中搜索字典文件,进行自动补全的工作。词典的另一个作用是可以做拼写检查,快捷键是<C-x><C-S>。关于如何利用VIM做拼写检查,将另行撰文介绍。
执行 ":set dictionary+=[字典文件]" 设置字典文件的路径,执行<C-x><C-k>进行自动补全。
Omnicompletefunc
自版本7.0开始,VIM开始提供自动补全的回调函数,通过下面的快捷键触发:
<C-x><C-o>: 调用omnifunc定义的函数
<C-x><C-u>: 调用completefunc定义的函数
omnifunc和completefunc两个回调函数没有本质上的区别,但是在惯例上,omnifunc定义的函数的与特定的文件类型绑定的,不同的文件类型会定义不同的omnifunc。<C-x><C-o>中的’o',即’omnifunc’。而completefunc通常是给第三方插件或者说用户自定义使用的,<C-x><C-u>中的’u',即"User Defined"的意思。
如何编写omnifunc或者completefunc的方法,可通过"help complete-functions"查阅,本文重点在于介绍两个重要的插件,就使用了这两个函数实现C/C++语言的自动补全功能:
supertab
VIM的哲学就是尽量的减少用户需要键入的次数,因此<C-x>开头的快捷键也显得过于麻烦,"help ins-completion"参考手册中有一个例子函数,CleverTab(),在用户按下<Tab>键时,自动判断是否需要调用补全功能还是插入一个<Tab>字符,但是这还不能满足我们日常软件开发的需要,因此supertab插件是对VIM的自动补全功能的重要补充。在缺省情况下supertab就能很好的工作,不需要特别的设置。需要特别说明的是,这个插件是对下面介绍的插件OmniCppComplete的一个有效的补充。主要是因为如果不安装supertab,那么在进行自动补全的时候,需要按<C-x><C-o>进行触发。
OmniCppComplete
如前所述,当你在编写C/C++代码时,如果需要VIM为你自动补全函数名、类名等,需要依赖正确的omnifunc(或者completefunc)的实现,而OmniCppComplete正是应这个需求而出现的。安装好这个插件后,也不需要做任何设置,只需要生成相应的tag文件即可正常工作。需要注意的是,在生成tag文件时,需要使用下面的参数达到最好的效果:
ctags --sort=yes --c++-kinds=+p --fields=+iaS --extra=+q
下面是使用OmniCppComplete的效果图:
本文重点在于介绍VIM的自动补全功能,因此对于C、C++语言中自动补全功能并未作深入的探讨。众所周知,VIM中对C++语言的自动补全有一些缺陷,目前有一些插件如clang_complete、gccsense能够更好的完成C/C++语言的自动补全功能,将另行撰文介绍。多说一句,其实在大多数情况下,利用这些基本的自动补全功能也够用了。特别是针对历史遗留代码居多的大规模项目,这些最基本的功能反而是最有效率的。
10. vim有哪几种模式怎么切换
在vi中按u可以撤销一次操作
u 撤销上一步的操作
Ctrl+r 恢复上一步被撤销的操作
注意:
如果你输入“u”两次,你的文本恢复原样,那应该是你的Vim被配置在Vi兼容模式了。
重做
如果你撤销得太多,你可以输入CTRL-R(redo)回退前一个命令。换句话说,它撤销一个撤销。要看执行的例子,输入CTRL-R两次。字符A和它后面的空格就出现了:
young intelligent turtle
有一个特殊版本的撤销命令:“U”(行撤销)。行撤销命令撤销所有在前一个编辑行
上的操作。 输入这些命令两次取消前一个“U”:
A very intelligent turtle
xxxx 删除very
A intelligent turtle
xxxxxx 删除turtle
A intelligent
用“U”恢复行
A very intelligent turtle
用“u”撤销“U”
A intelligent
“U”命令自己改变自己,“u”命令撤销操作,CTRL-R命令重做操作。这有点乱,但不用
担心,用“u”和CTRL-R命令你可以切换到任何状态。
流行的文本编辑器通常都有前进和后退功能,可以在文件中曾经浏览过的位置之间来回移动。在 vim 中使用 Ctrl-O 执行后退,使用 Ctrl-I 执行前进。