Vim文本编辑器 常用指令大全 提升编程效率必备法宝之一

经常处理文本以及经常需要写代码的人,都会有自己比较常用的编辑器,本人喜欢用Vim,理由就是Vim编辑器灵活,并且可以达到纯键盘操作,使用纯熟情况下,根本不需要鼠标操作,听起来是不是很酷的?不过别高兴太早,想达到那个境界必须的指令是需要学习+记忆+练习的。总结指令如下:

1(motion)

fx 向后 移动到搜索字母上,x 可以是任意一个字母

tx 向后 移到搜索字母的左边 (这真的很有用)

Fx 向前 移到搜索字母上  

Tx 向前 移到搜索字母的左边

; 重复上面四种命令 ,也是重复命令 不过方向取反

. 重复上一个操作

以上命令都是在本行移动

,. 当前行 ,%当前文件

gd to definition of the current word

 

w:上一个词。b:下一个词。(nonword的特殊字符作为word的边界,如.,-

W 上一个词 B 下一个词 (以空格作为word的边界)又称长单词

e: 下个词的最后一个字母 ge 上个词的最后一个字母

0:移动光标到当前行首。

gm 移动到行正中

$:移动光标到行尾。

2$ 下一行行尾

^:移动光标到当前行的第一个字母位置。

) ( 移动光标到上/下一个句子。

{ } pre/next paragraph

[{ ]} begin/end of block

[[ ][ 代码块的开头和结尾 假设{}位于第一列的情况下成立

[( ]) 括号范围内前后移动

gD 跳转到局部变量的定义处

gg:到文件首 G:到文件尾

numG:移动光标到指定的行(num)(比如 10G 就是到第 10 )

H:移动光标到屏幕上面M:移动光标到屏幕中间L:移动光标到屏幕下面 当前屏幕的操作

nH 光标到当前屏幕的第n

nL 光标到当前屏幕的倒数第n

zt scroll to top

zz scroll to middle 有用 把当前编辑行置于屏幕中间

zb scroll to bottom

ctr+B/b ctr+F/f pre/next page

ctr+U/u ctr+D/d pre/next half page

ctr+e ctr+y /下滚一行

*:读取光标处的单词,并且移动光标到它再次出现的地方。

#:读取光标处的单词,并且移动光标到它上次出现的地方。

g* 它不完全匹配光标所在处的单词,而是匹配包含该单词的所有字符串

g# 它不完全匹配光标所在处的单词,而是匹配包含该单词的所有字符串

 

2.searching

+ - 下一行的开始 上一行的开始(非空)

% matching parenthesis

/text:从当前光标处开始搜索字符串 text,并且到达 text 出现的地方。必须使用回车来开始这个搜索命令。如果想重复上次的搜索的话,按 n

?text:和上面类似,但是是反方向。

/\搜索完整的text单词

/ab\{3,5} b匹配3-5

\{0,1}匹配01 \=一样

\{0,} 匹配0次或多次 \*一样

\{1,} 匹配1次或多次 \+一样

\{3} 匹配3

/ab\{-1,3} 将会匹配abbb中的ab 意思是尽可能的避免重复

/a.\{-}b 其中{-}匹配前面的项一次或0 尽可能地少 一般这个模式本身只可能匹配到0 因此 这个命令 只会匹配到axbxb中的axb

/a.*b 则会尽可能多的匹配 因而对于axbxb 会匹配整个的axbxb

/the\nword 匹配以the结束而且下一行以word开始的行

\_s 匹配空格或断行

/the\_sword the word 之间有空格或断行

/\d\u{3}\d\{3} 匹配一个数字 三个大写字母 单个数字

/joe/s-2 所查找之处往前两个字符

搜索完按n重复上次查找 N逆向上次查找

3n 向下搜索第三个

ma`a mark/jump to a 'a 转到标记所在的行头(行头)

`.:到你上次编辑文件的修改点。这个命令很有用,而且你不用自己去标记它

'. 到上次修改的行

`` 在上次编辑的地方与本次的地方来回跳转(仅限使用命令的跳转)

`0 上次编辑的地方

ctr+O ctr+I 往前或往后跳 编辑的地方

 

 

 

 

 

3.replaceing

:s/old/new 将当前行中old替换为new 只替换一次

:s/old/new/n search and replace n times

:s/old/new/g 将当前行中的old替换为new,全部替换

:.,$ s/old/new/g 将当前行至文件末尾中的old替换为new,全部替换

:.,$ s/old/new 将当前行中至文件末尾中的old替换为new,每行至替换一次

:1,$ s/old/new  :% s/old/new 将文件所有行中的old替换为new,每行只替换一次

:1,$ s/old/new/g  :% s/old/new/g 将文件中的所有行的old替换为new,全部替换

%是目前编辑的文章 #是前一次编辑的文章

:?^chapter?-1,/^chapter/+2 s=grey=gray=g 将上个chapter与下一个chapter之间的所有的grey替换为gray,用=替换/ 来避免过多的/

:g/foobar/s/bar/baz/g 搜索foobar 然后替换为foorbaz 不会影响到jailbars

:g/\(foo\)\(bar\)/s/\2/\1baz/g

特殊的序列 & 所有查找时匹配到的东西

\[1-9] 19号用\(\)括起来的东西

\u 下一个字符被变成大写

\U 以后 所有的字符都 变成大写 知道遇到\e

\l 下一个字符变成小写

\L 以后的字符都变成小写

 

 

:.,.+4 从当前行到下面第四行

:`t,`b 从上一个标记t到下一个标记b

~ 改变当前字母的大小写类型

ggguG : 将当前编辑文件内容全部转换成小写

g~m 切换大小写 动作m跨越的行

guw 变小写

gUw 变大写

xp 当前字母和后一个字母的位置进行替换

ddp 两行互换位置

 

4.inserting

输入一个长词的一部分,按住 Ctrl,再按 Nn)如果 VIM 会一直循环它找到的匹配的字符串。

i:在当前字符的左边插入 a:在当前字符的右边插入

I:在当前行首(第一个非空字符)插入 A:在当前行尾插入

gI 在行首插入

o:在当前行下面插入一个新行O:在当前行上面插入一个新行

R ENTER REPLACE MODE 替换

S 替换掉光标所在行 再进入编辑模式

5.formatting

:> 本行缩进

:< 取消本行缩进

<<>> 左移或右移当前段落一个移动宽度(shiftwidth

:>n 缩进连本行在内的n

:取消连本行在内的n行的缩进

c{motion}:删除 motion 命令跨过的字符,并且进入插入模式。比如:c$,这将会删除从光标位置到行尾的字符并且进入插入模式。ct!,这会删除从光标位置到下一个叹号(但不包括),然后进入插入模式。被删除的字符被存在了剪贴板里面,并且可以再粘贴出来。

d{motion}:和上面差不多,但是不进入插入模式。

3、有效的移动大段的文本

模式:

v:按字符选择。经常使用的模式,所以亲自尝试一下它。

V:按行选择。这在RGB(0x20,0x6a,0x4f)多行的文本的时候特别有用。

CTR+v:按块选择。采用xbeta_Vimrc文件时

ctr+q 按块选择。

4、在可视选择模式下剪切和拷贝

一旦你高亮了选区,你或许想进行一些操作:

d:剪贴选择的内容到剪贴板。

y:拷贝选择的内容到剪贴板。

c:剪贴选择的内容到剪贴板并且进入插入模式。

在非可视选择模式下剪切和拷贝

如果你很清楚的知道你想拷贝或者剪切什么,那你根本就不需要进入可视选择模式。这样也会节省时间:

d{motion}:剪切 motion 命令跨过的字符到剪贴板。比如,dw 会剪切一个词而 dfS 会将从当前光标到下一个S 之间的字符剪切至剪贴板。

y{motion}:和上面类似,不过是拷贝。

y2fa 表示拷贝从当前光标到光标后面的第二个a 字符之间的内容。

:12y 表示拷贝第12 行到光标所在行之间的内容。

:24y 表示拷贝光标所在行到第24 行之间的内容。

c{motion}:和 d{motion} 类似,不过最后进入插入模式。 cw 改变一个词

cc change line d$ 删除从现在光标所在位置 (包括)至行尾

cw change word cw  dw 由区别 前者不去最后的一个空格 后者去

rc 将光标下的字符替换为c

R replace beginning at cursor

dd:剪切当前行。 yw 复制的内容包括word之后的空白字符

ndd delete n lines

ndw delete n words

dw delete a word

yy拷贝当前行。

Y 拷贝当前行。

Vyp 复制一行

cc 剪切当前行并且进入插入模式。

D 代表 d$ 删除到行尾的内容

C 代表 d$ 修改到到行尾的内容。

x 代表dl 删除当前光标下的字符

X 代表dh 删除当前光标左边的字符

daw 删除一个单词 (包括其后的空格

cis 删除一个句子

cas 删除一个句子 (包括后面的空白

diw 删除光标上的单词

daw 删除光标上的单词 (包括空白字符

dx删除时 同时被删除的内容被保存起来

s 代表cl 修改当前光标下的字符

S 代表cc 修改当行

J jion two lines

r 替换之后 不进入插入模式

gum gUm 小写/大写 动作m跨越的文本

m 左移/右移 动作m跨越的行

n<< n>> n行左移或右移一个缩进位

5、粘贴

p 粘贴到光标后

大写P 粘贴到光标前

6、使用多重剪贴板

很多编辑器都只提供了一个剪贴板。VIM 有很多。剪贴板在 VIM 里面被称为寄存器(Registers)。你可以列出当前定义的所有寄存器名和它们的内容,命令为“:reg”。最好使用小写字母来作为寄存器的名称,因为大写的有些被 VIM 占用了。

使用寄存器的命令为双引号 

比如:我们要拷贝当前行到寄存器 k。你应该按 kyy(你也可以使用 V”ky。为什么这样也可以呢?)现在当前行应该已经存在了寄存器 k 里面直到你又拷贝了一些东西进入寄存器 k。现在你可以使用命令 kp 来粘贴寄存器 k 里面的内容到你想要的位置。

7、避免重复

. (小数点符号) 需要在normal下去执行 将会重复上一个修改命令。

u 撤销上次操作

U 撤销一行的操作 不管几次

ctr+R 恢复撤销

CTR+Y 重做

8、使用数字

3j 将会把光标向下移动三行。

10dd 将会删除十行。

y3″ 将会拷贝从当前光标到第三个出现的引号之间的内容到剪贴板。

:w save(:wq save and quit) ZZ保存后退出

:q quit(:q! quit anyway)

:only 关闭除当前窗口外的其它窗口

:qall 关闭所有的窗口 如果有为保存的文件 则自动跳到为保存的文件

:wall 全部保存

:e x edit file x

:e x 放弃修改重新载入当前的文件x

:n new window

:h vim help

:xx jump to line #xx

ctr+N CTR+P auto-complete next/prev keyword 插入模式下的单词自动完成

ctr+x+l 自动补全整行内容

ctr+x+f auto-complete file name 搜索可匹配的文件名并完成

缩写:

:abbr sprt system.out.println

在编辑状态下输入sprt后再输入其他非字母符号会自动扩展

ctr+W 在多个窗口间切换

:set nu  :set number 显示行号

:set nonu  :set nonumber 消除行号

:set ruler 设置vim在右下角显示光标的位置

:set incsearch 自动匹配

:set hlsearch 搜索时自动匹配

:set nohlsearch

:set ignorecase 忽略大小写

:set wrapscan 设置循环搜索

:set textwidth=30 设置自动换行 并将 最大长度设为30

:set background=dark

:set background=light

:set patchmode=.org 编辑data.txt  保存原始文件为data.txt.org

:reg 查看剪切板中的内容

gf 打开光标处的文件名

pwd 获取当前工作目录

多窗口:

:vsp :sp vertically/horizontally split 纵向或横向分屏

:ctrl+w-w 切换窗口

:close 关闭窗口 可以阻止关闭最后一个VIM窗口

:only 关闭除了当前窗口之外的所有的窗口

ctrl+w++ 增加当前窗口的高度

:diffs split and diff 分屏比较

ctr+W p to last accessed window 移动到上个屏幕

ctr+W w to next window

:12 go to 12th line

:r file append file into vim/vi

:f file change current filename to file

:w save changes and stay in file

:q quit and ignore changes

:q! force quit and ignore changes `

:wq quit and save

:nw file write file to the nth lines

:e filename edit new file

:r filename insert the new file to the position of the current cursor

:0r filename 将文件filename的内容插入到文件的开头

:.,$w filename 将当前正在编辑的文件中的当前行至最后一行写到新的文件filename

:.,$w >>filename 将当前正在编辑的文件中的当前行至最后一行写到追加到已有的文件filename

z redraw the screen

zz put the cursor to middle

zt 光标到所在行到屏幕顶端

zb 光标所在行到屏幕下端

qm 录制宏到寄存器m

@m 执行寄存器中的宏

一些设置

:set go=

隐藏菜单

:set shiftwidth=4 一次移动4个单位 用于<</span>>命令 移动的宽度

5>> 光标后5行向右移动一个tab

:12,24> 1224行的数据都向右移动一个tab

:12,24>> 1224行的数据都向右移动两个tab

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/293660.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IT与业务之间的鸿沟根源

目前世界经济进入到数字经济时期&#xff0c;IT与业务的融合已经不是什么新鲜的话题&#xff0c;其实从计算机的诞生的那一天开始&#xff0c;IT与业务融合的问题就已经开始了。1、经常听到一种观点&#xff1a;IT与业务之间的鸿沟这归结于谁领导谁的问题。&#xff08;1&#…

Java里面Unreachable code

今天写了一段Java代码&#xff0c;不小心出了“Unreachable code”错误&#xff0c;开始的时候MyEclipse一直提示我要我重命名一个对象&#xff0c;但我重命名了也不好用&#xff0c;最后才看到这个“Unreachable code”错误&#xff0c;在网上调查了一下&#xff0c;这个错误翻…

EIGRP stub SIA

转载于:https://blog.51cto.com/liushuo890/1202399

C++Vector使用方法

C内置的数组支持容器的机制&#xff0c;可是它不支持容器抽象的语义。要解决此问题我们自己实现这种类。在标准C中&#xff0c;用容器向量&#xff08;vector&#xff09;实现。容器向量也是一个类模板。标准库vector类型使用须要的头文件&#xff1a;#include <vector>。…

岛国人气美少女竟然每晚跟 3 个人通宵打麻将?

1 桥本怕不是四川人?▼2 借口总比困难多▼3 突然觉得自己是大厨▼4 连自己都不放过▼5 这就是纹身的烦恼▼6 这又是什么黑暗料理&#xff08;via.坏蛋王师傅&#xff09;▼7 哦吼&#xff0c;是在下输了▼7 哦吼&#xff0c;是在下输了▼你点的每个赞&#xff0c;我都认…

java获取ResultSet长度

2019独角兽企业重金招聘Python工程师标准>>> public class Test { public static void main(String[] args) throws SQLException { Connection conn WLMGlobal.connMgr_stat_instance().getConnection(); Statement stmt conn.createStatement(Result…

浅谈协同过滤推荐算法

在现今的推荐技术和算法中&#xff0c;最被大家广泛认可和采用的就是基于协同过滤的推荐方法。本文将带你深入了解协同过滤的秘密。 1 什么是协同过滤 协同过滤是利用集体智慧的一个典型方法。要理解什么是协同过滤 (Collaborative Filtering, 简称 CF)&#xff0c;首先想一个简…

C# wpf编程CM框架快速入门项目实例

01—事件连接这会自动将控件上的事件关联到ViewModel上的方法。常规约定&#xff1a;<Button x:Name"Save">这将导致按钮的单击事件调用ViewModel上的“Save”方法。简短语法&#xff1a;<Button cal:Message.Attach"Save">这将再次导致按钮的…

Android之两个应用之间的通信与调用

Android 里面的两个APK通信的方式有哪些&#xff1f; 自己网上查了查&#xff0c;总结了一下&#xff1a; 1. 广播&#xff0c;最简单的方法&#xff0c;这个实现起来比较简单 2. AIDL&#xff0c;功能强大&#xff0c;支持一对多并发通信&#xff0c;支持实时通信。 3. 网…

NSString 字符串 操作 常用

//将NSData转化为NSString NSString* str [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];//将NSString 转化为NSData (NSString.h)- (NSData *)dataUsingEncoding:(NSStringEncoding)encoding; //载一个字符串中删除一个字符或字符串[_di…

[HTML5]3D标签云

index.html <html> <head> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <title>3D标签云</title> <link rel"stylesheet" type"text/css" href"http://webapplee-word…

正则表达式匹配字符串的问题

如何用正则表达式做模糊查询&#xff1f;&#xff1f; 是可以的比如“.*?name.*?”就可以匹配找出所有含有"name"的字符串&#xff0c;就像mysql查询用"where .. like %name%"一样的。并且正则可以更灵活&#xff0c;如果你写的".*?name\d{2}.*?&…

java.lang.IllegalStateException: attempt to re-open an already-closed object

这个错误出现的原因是因为我在一个数据库操作的时候&#xff0c;在循环读取数据的时候&#xff0c;把datebase给close了&#xff0c;会出现这样的错误&#xff0c;还有一直情况就是我们在写数据库操作的时候&#xff0c;需要调用到其它函数的相关操作&#xff0c;当其它函数操作…

sas常用选项

System options&#xff1a; obs&#xff1a;表示需要处理的最后一行observation&#xff0c;如果指定其为max&#xff0c;就表示处理到最后一条observation firstobs&#xff1a;表示需要从第几行observation开始处理&#xff0c;默认是1observation msglevel&#xff1a;默认…

我的2021年终总结:初为人父,从头再来

【年终总结】| 作者/Edison最近公司开始一股年终总结浪潮&#xff0c;看着同事们写大作文式的“内卷”总结&#xff0c;我不禁在想我这一年做了什么&#xff0c;那么也就有了这篇总结推文&#xff0c;当然它也是我每年的习惯。传送门&#xff1a;Edison的2020年终总结1也谈2021…

Java 基础【09】你的多继承纳?

Java省略了许多很少用到&#xff0c;缺乏了解&#xff0c;混淆功能的C &#xff0c;在我们的经验中带来更多的悲伤大于收益 。 -----James Gosling James Gosling 这个人大家应该很熟悉&#xff0c;就是最初设计Java 语言的的程序…

开源项目导入eclipse的一般步骤[转]

下载到开源项目后&#xff0c;我们还是希望导入到eclipse中还看&#xff0c;这样要方便点&#xff0c;一般的步骤是这样的 打开源代码目录&#xff0c; 如果看到里面有.calsspath .project文件&#xff0c;那么说明这个项目本来就是eclipse开发的&#xff0c;那么在eclipse中-&…

死锁活锁

死锁&#xff1a; 是指两个或两个以上的进程在执行过程中&#xff0c;因争夺资源而造成的一种互相等待的现象&#xff0c;若无外力作用&#xff0c;它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁&#xff0c;这些永远在互相等待的进程称为死锁进程。 由于资源…