VIM一次复制多次粘贴
目录
tab设置为4个空格
在.vimrc中添加以下代码后,重启vim即可实现按TAB产生4个空格:
-
set ts=4 (注:ts是tabstop的缩写,设TAB宽4个空格)
-
set expandtab
对于已保存的文件,可以使用下面的方法进行空格和TAB的替换:
TAB替换为空格:
-
:set ts=4
-
:set expandtab
-
:%retab!
空格替换为TAB:
-
:set ts=4
-
:set noexpandtab
-
:%retab!
加!是用于处理非空白字符之后的TAB,即所有的TAB,若不加!,则只处理行首的TAB。
去掉~文件
默认情况下,使用VIM编辑文件FILE之后,会多出几个文件,其中~结尾的是文件旧版本的备份文件,un~结尾的文件是用于在修改文件后重新编辑时也能实现之前步骤的undo功能。
如何禁止生成这几个文件呢?
找到VIM的配置文件,比如VIM8.1的配置文件_vimrc(一般在VIM安装目录下),在其中添加
-
set noundofile
-
set nobackup
复制粘贴
剪切命令
1.剪切文本:用v选中文本之后按d就表示剪切,之后按p进行粘贴。
- 剪切一行:dd
- 剪切当前行光标所在的位置到行尾:d$
- 剪切当前行光标所在的位置到行首:d^
- 剪切三行:3dd,即从当前行+下两行被剪切了。
2.剪切1-10行到20行
:1,10 m 20
一次复制,多次粘贴
解决方案:在使用p
的是时候使用"0p
,这样就能无限制的一直粘贴了。
原因:寄存器位置0
的地方存放的就是最近复制的内容。(使用:reg
可以查看寄存器存储列表)
复制到系统剪贴板
为了将vim中的内容复制到其他程序,用鼠标或者进入visual模式选中需要复制到内容后,
依次连续输入“ ,+ , Y , 即按住shift后依次按键盘上的” + 和 y ,将当前行前后所有内容复制
依次连续输入“ ,+ , y , 即按住shift后先按键盘上的” + ,最后松开shift再按 y ,仅将选定的内容复制。
复制到指定剪贴板
vim提供12个剪贴板,它们的名字分别为vim有11个粘贴板,分别是0、1、2、...、9、a、“。如果开启了系统剪贴板,则会另外多出两个:+和*。
使用:reg命令,可以查看各个粘贴板里的内容。
要将vim的内容复制到某个粘贴板,需要退出编辑模式,进入正常模式后,选择要复制的内容,然后按"Ny完成复制,其中N为粘贴板号(注意是按一下双引号然后按粘贴板号最后按y),例如要把内容复制到粘贴板a,选中内容后按"ay就可以了。
要将vim某个粘贴板里的内容粘贴进来,需要退出编辑模式,在正常模式按"Np,其中N为粘贴板号。比如,可以按"5p将5号粘贴板里的内容粘贴进来,也可以按"+p将系统全局粘贴板里的内容粘贴进来。
如何选择一个单词
如果你在单词的开始,用 ve 就可以选择这个单词,v 是进入可视模式,e 是跳到单词结尾。
如果你在单词的中间,想选中当前单词,用 vaw。v 是进入可视模式,aw 是“一个词(a word)”。
打开文件
重新载入文件
有时候要使用VIM打开了一些文件,但是在其他地方把次文件改动了,例如使用git进行checkout等操作,需要重新载入此文件。
1 重新载入当前文件:
-
:e
-
:e! #放弃当前修改,强制重新载入
2 重新载入所有打开的文件:
:bufdo e 或者 :bufdo :e!
:bufdo命令表示把后面的命令应用到所有buffer中的文件。
用多个标签页打开多个文件
启动 Vim 时用 "vim -p filename ...",例如vim -p file1 file2 file3
在新标签页以只读方式打开文件
tab sview /path/to/file
在当前标签页打开文件
view /path/to/file
删除空行
如果需要删除文章中的空行,可以使用一下语句:
:g/^\s*$/d
简单解释一下:
g :全区命令
/ :分隔符
^\s*$ :匹配空行,其中^表示行首,\s表示空字符,包括空格和制表符,*重复0到n个前面的字符,$表示行尾。连起来就是匹配只有空字符的行,也就是空行。
/d :删除该行
在linux查看编辑二进制文件
可分如下几步进行:
(1) 首先以二进制方式编辑这个文件: vim -b datafile
(2) 现在用 xxd 把这个文件转换成十六进制: :%!xxd
文本看起来像这样:
-
0000000: 1f8b 0808 39d7 173b 0203 7474 002b 4e49 ....9..;..tt.+NI
-
0000010: 4b2c 8660 eb9c ecac c462 eb94 345e 2e30 K,.`.....b..4^.0
-
0000020: 373b 2731 0b22 0ca6 c1a2 d669 1035 39d9 7;'1.".....i.59.
现在你可以随心所欲地阅读和编辑这些文本了。 Vim 把这些信息当作普通文本来对待。修改了十六进制部分并不导致可显示字符部分的改变,反之亦然。
(3) 最后,用下面的命令把它转换回来: :%!xxd -r
只有十六进制部分的修改才会被采用。右边可显示文本部分的修改忽略不计。
xxd是linux的一个命令,vim可以通过”!”来调用外部命令,其功能就是进行十六进制的dump或者反之。
将vim置于后台
- 直接按 ctrl + z可以将当前的vim置于后台
-
当你需要打开之前的vim的时候,使用jobs命令看当前有哪些vim在后台,最后用“fg 序号”命令,将需要的vim置于前台
查找时忽略大小写
指令设定
-
:set ic (ignore case)
-
:set noic
输入了上述指令, 当每次的查找操作都会受到当前设定的影响,不过每次在退出vim编辑后,再重新打开以后的设置仍旧失效。
注:编辑状态下的设置相当于临时修改了 vim 的环境变量,当重新使用vim时,其又会默认的 .viminfo 文件中读入默认的环境变量设置 。
查找符号设定
-
/\CWord : 区分大小写的查找
-
/\cword : 不区分大小写的查找
这个操作针对当前的查找有效, 所以不必考虑下次查找操作是否会受到影响.
用列表形式显示所有搜索到的内容
从文件开头开始查找当前光标下的关键字,如果当前光标不在要搜索的关键字下,可以先用 / 或者 ? 搜索,跳转到关键字后,再用 [I 命令。
书签
替换
范围描述
:"%"
|表示命令作用于全部行:.
|表示当前行:1,5
|表示在1到5行范围内搜索:1,$
|表示当前行到末尾行:1,$-5
|表示当前行到倒数第五行之前:4
|表示在第4行搜索
正则表达式
非贪婪匹配
使用.\{-}而不是.*,例如,
%s/style=".\{-}"//g
其他
替换时想在替换后的内容中加入换行,可以使用\r。例如:%s/\n/;\r/g
显示
高亮指定单词
将光标移动到所找单词.
1: shift + “*” 向下查找并高亮显示
2: shift + “#” 向上查找并高亮显示
3: “g” + “d” 高亮显示光标所属单词,“n” 查找!
分屏
同步滚动
-
开启
-
:set scb
-
-
关闭
-
:set noscb
列编辑
- 进入列模式下: 移动光标到要注释区块的第一行,Unix下按Ctrl+v,Windows版本的VIM则按Ctrl+Q
- 选择所需要的列:光标移动到要注释区块的最后一行(若干个j,或者直接输入行号再按G,或者按G到最后一行)
- 针对列的操作: 例如
- 删除 输入d ;
- 替换 输入c ;
- 需要输入则 按Shift+i,然后输入内容
- 然后退出保存 :按两次ESC
执行脚本
在vim中执行脚本的语句是
:source /path/to/vim/script
举例来说,比如有一个vim脚本为~/script
-
for i in range(1, 4)
-
echo "count is" i
-
endfor
只要在vim中
:source ~/script
就可以执行这个脚本了
执行Shell命令
!command
不退出vim,并执行shell命令command,将命令输出显示在vim的命令区域,不会改变当前编辑的文件的内容。执行:!ls -al命令,如下图所示:
r !command
将shell命令command的结果插入到当前行的下一行。例如:r !date。读取系统时间并插入到当前行的下一行。如下图所示:
起始行号,结束行号!command
将起始行号和结束行号指定的范围内的内容让shell命令command处理,并将处理结果替换起始行号和结束行号指定范围中的内容。例如 :1,4 !sort,将第1行到第4行的内容进行排序。如下图所示:
可以只指定起始行,例如:1 !tr [a-z] [A-Z],将第1行的小写字母转为大写字母。如下图所示:
除可以指定行号外,也可以用.表示当前光标所在行。例如:. !tr [a-z] [A-Z],将当前行的小写转为大写。如下图所示:
起始行号,结束行号 w !command
将起始行号和结束行号所指定范围的内容作为命令command的输入,不会改变当前编辑的文件的内容。
例如:1,4 w !sort,将第1行到第4行的内容进行排序,但排序的结果并不会直接输出到当前编辑的文件中,而是显示到vim敲命令的区域。如下图所示:
特殊的可以用下面的命令: 1 w !bash,将会把第1行的内容作为bash命令来执行并显示结果,而且不会改变当前编辑的文件的内容。同样的 : . w !bash将当前行的内容作为bash命令来执行。
Windows下将gvim添加到右键菜单
第一步:
删掉注册表中的HKEY_CLASSES_ROOT//shellex/ContextMenuHandlers/gvim*
第二步:
注册表下,HKEY_CLASSES_ROOT/*/shell下添加项,命名为"用vim编辑"
, 再对"用vim编辑"右键,新建项,命名为"command
",在"command"的右边窗口第一个文件(也是唯一一个),将其数值数据设定为"D:\\Program Files (x86)\\Vim\\vim74\\gvim.exe" -p --remote-tab-silent "%1",其中数值数据包括双引号;上面的数值名称不用修改,点击确定可以退出。
其中“D:\\Program Files (x86)\\Vim\\vim74\\gvim.exe”这个要视gvim的安装目录不同而做出相应的修改。
参考文献
vim 搜索_vim技巧:用列表形式显示所有搜索到的内容,去掉搜索内容的高亮