不枉初心,砥砺前行

皮皮祥的博客

欢迎留言,评论

导航

VIM一次复制多次粘贴

目录

tab设置为4个空格

去掉~文件

复制粘贴

剪切命令

一次复制,多次粘贴

复制到系统剪贴板

复制到指定剪贴板

如何选择一个单词

打开文件

重新载入文件  

用多个标签页打开多个文件

在新标签页以只读方式打开文件

在当前标签页打开文件

删除空行

在linux查看编辑二进制文件

将vim置于后台

查找时忽略大小写

指令设定

查找符号设定

用列表形式显示所有搜索到的内容

书签

替换

范围描述

正则表达式

非贪婪匹配

其他

显示

高亮指定单词

分屏

同步滚动

列编辑

执行脚本

执行Shell命令

!command

r !command

起始行号,结束行号!command 

起始行号,结束行号 w !command 

Windows下将gvim添加到右键菜单

参考文献


tab设置为4个空格

在.vimrc中添加以下代码后,重启vim即可实现按TAB产生4个空格:

  1.  
    set ts=4  (注:ts是tabstop的缩写,设TAB宽4个空格)
  2.  
    set expandtab

对于已保存的文件,可以使用下面的方法进行空格和TAB的替换:
TAB替换为空格:

  1.  
    :set ts=4
  2.  
    :set expandtab
  3.  
    :%retab!

空格替换为TAB:

  1.  
    :set ts=4
  2.  
    :set noexpandtab
  3.  
    :%retab!

加!是用于处理非空白字符之后的TAB,即所有的TAB,若不加!,则只处理行首的TAB。

去掉~文件

      默认情况下,使用VIM编辑文件FILE之后,会多出几个文件,其中~结尾的是文件旧版本的备份文件,un~结尾的文件是用于在修改文件后重新编辑时也能实现之前步骤的undo功能。

      如何禁止生成这几个文件呢?

      找到VIM的配置文件,比如VIM8.1的配置文件_vimrc(一般在VIM安装目录下),在其中添加

  1.  
    set noundofile
  2.  
    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 重新载入当前文件:

  1.  
    :e
  2.  
    :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

文本看起来像这样:

  1.  
    0000000: 1f8b 0808 39d7 173b 0203 7474 002b 4e49 ....9..;..tt.+NI
  2.  
    0000010: 4b2c 8660 eb9c ecac c462 eb94 345e 2e30 K,.`.....b..4^.0
  3.  
    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置于前台

查找时忽略大小写

指令设定

  1.  
    :set ic (ignore case)
  2.  
    :set noic

输入了上述指令, 当每次的查找操作都会受到当前设定的影响,不过每次在退出vim编辑后,再重新打开以后的设置仍旧失效。

注:编辑状态下的设置相当于临时修改了 vim 的环境变量,当重新使用vim时,其又会默认的 .viminfo 文件中读入默认的环境变量设置 。

查找符号设定

  1.  
    /\CWord : 区分大小写的查找
  2.  
    /\cword : 不区分大小写的查找

这个操作针对当前的查找有效, 所以不必考虑下次查找操作是否会受到影响.

用列表形式显示所有搜索到的内容

从文件开头开始查找当前光标下的关键字,如果当前光标不在要搜索的关键字下,可以先用 / 或者 ? 搜索,跳转到关键字后,再用 [I 命令。

书签

Vim书签标记

替换

范围描述

:"%"  |表示命令作用于全部行
:.    |表示当前行
: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” 查找!

分屏

Vim屏幕分割(分屏)功能介绍-Vim入门教程(19)

同步滚动

  1.  
    开启
  2.  
    :set scb
  3.  
     
  4.  
    关闭
  5.  
    :set noscb

列编辑

  1. 进入列模式下: 移动光标到要注释区块的第一行,Unix下按Ctrl+v,Windows版本的VIM则按Ctrl+Q
  2. 选择所需要的列:光标移动到要注释区块的最后一行(若干个j,或者直接输入行号再按G,或者按G到最后一行)
  3. 针对列的操作: 例如
  4.       删除 输入d ;
  5.       替换 输入c ;
  6.       需要输入则 按Shift+i,然后输入内容
  7. 然后退出保存 :按两次ESC

执行脚本

在vim中执行脚本的语句是 

:source /path/to/vim/script 

举例来说,比如有一个vim脚本为~/script 

  1.  
    for i in range(1, 4) 
  2.  
    echo "count is" i 
  3.  
    endfor 

只要在vim中 
:source ~/script 
就可以执行这个脚本了 

执行Shell命令

!command

不退出vim,并执行shell命令command,将命令输出显示在vim的命令区域,不会改变当前编辑的文件的内容。执行:!ls -al命令,如下图所示:

vim1

r !command

将shell命令command的结果插入到当前行的下一行。例如:r !date。读取系统时间并插入到当前行的下一行。如下图所示:

vim2

起始行号,结束行号!command 

将起始行号和结束行号指定的范围内的内容让shell命令command处理,并将处理结果替换起始行号和结束行号指定范围中的内容。例如 :1,4 !sort,将第1行到第4行的内容进行排序。如下图所示:

vim3

可以只指定起始行,例如:1 !tr [a-z] [A-Z],将第1行的小写字母转为大写字母。如下图所示:

vim4

除可以指定行号外,也可以用.表示当前光标所在行。例如:. !tr [a-z] [A-Z],将当前行的小写转为大写。如下图所示:

vim5

起始行号,结束行号 w !command 

将起始行号和结束行号所指定范围的内容作为命令command的输入,不会改变当前编辑的文件的内容。

      例如:1,4 w !sort,将第1行到第4行的内容进行排序,但排序的结果并不会直接输出到当前编辑的文件中,而是显示到vim敲命令的区域。如下图所示:

vim6

特殊的可以用下面的命令: 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 tab设置为4个空格

VIM:去掉~文件

Vim一次复制,多次粘贴

gvim中复制到系统剪贴板

vim 如何选择一个单词

VIM使用小技巧-重新载入文件

VIM技巧2 – 删除空行 (正则表达式)

vim查看编辑二进制文件

vim剪切命令

将vim置于后台

强悍的 vim —— 查找时忽略大小写

在vim中执行脚本

Windows下将gvim添加到右键菜单

Vim 查找&替换

vim 搜索_vim技巧:用列表形式显示所有搜索到的内容,去掉搜索内容的高亮

VIM中执行Shell命令(炫酷)

一文搞懂vim复制粘贴

vim用多个标签页打开多个文件

vim 分屏操作

Open a file in a tab in vim in readonly mode

VIM 替换 \n 换行符

How can I make my match non greedy in vim?

posted on 2023-09-02 17:12  皮皮祥  阅读(117)  评论(0编辑  收藏  举报