1.vim全选,全部复制,全部删除
全选(高亮显示):按esc后,然后ggvG或者ggVG

全部复制:按esc后,然后ggyG

全部删除:按esc后,然后dG
 

解析:

gg:是让光标移到首行,在vim才有效,vi中无效 

v : 是进入Visual(可视)模式 

G :光标移到最后一行 

中内容以后就可以其他的操作了,比如: 
d  删除中内容 
y  复制中内容到0号寄存器 
"+y  复制中内容到+寄存器,也就是系统的剪贴板,供其他程序用 

 

2.按字符、行、块复制与粘贴、剪切

一、打开文件

         执行vim test命令打开test文件

         在命令模式下输入set nu,展示文本行号

二、按字符复制与粘贴、剪切

         在命令行模式下输入字符v(小写),便可以进入按字符选择模式,通过h、l、j、k键移动光标选择要进行复制的字符串。

         完成选择后按下y键进行复制(d键是剪切),将鼠标移动到最后一行,按下p执行粘贴操作就完成了对选择的字符串部分完成了按字符复制与粘贴操作。

三、按行复制与粘贴、剪切

          在命令行模式下输入字符V(大写),便可以进入按行选择模式,通过h、l、j、k键移动光标选择要进行复制的行号。

          选中行后按下y键进行复制(d键是剪切),然后将光标移动到要进行粘贴的位置,比如放在23行后,需要将光标移动到23行,按下p键进行粘贴操作

           2yy或y2y    #复制光标所在当前行及下一行,即2行,以此类推    *

四、按块复制与粘贴、剪切

           在命令行模式下按下组合键Ctrl+V进入到按块选择模式,通过h、l、j、k移动鼠标选择要进行复制的区域块

           选择了一个区域块,选择完成后按y进行复制(d键是剪切),将光标移动到要进行粘贴的地方(比如放到内容的最后),按下p执行粘贴。

补充:

「yw」:将光标所在之处到字尾的字符复制到缓冲区中。

「#yw」:复制#个字到缓冲区

「yy」:复制光标所在行到缓冲区。

「#yy」:例如,「6yy」表示拷贝从光标所在的该行“往下数”6行文字。

「p」:将缓冲区内的字符贴到光标所在位置。注意:所有与“y”有关的复制命令都必须与“p”配合才能完成复制与粘贴功能。

 

五.使用寄存器复制粘贴(每个字母都可当寄存器)

①"ayy:表示保存寄存器a里面(:reg a 可以查到)

"ap:粘贴a里面内容

"byy:标识保存寄存器b里面(:reg b 可以查到)

"bp:粘贴b里面内容

:reg b
Type Name Content
  l  "b   note8_ip = '192.168.31.109'^J
:reg a
Type Name Content
  l  "a   import uiautomator2 as u2^J

②复制系统剪贴板

(一)系统剪贴板“+可以在复制前加上“+复制到系统剪贴板

 

查看是否支持

方法一在终端输查看

vim --version | grep clipboard 

前面都是 - 号,说目前还不支持系统剪切板功能,如果都是 + 号支持,如果不支持安装vim-gtk

方法二在vim中查看

echo has("clipboard")

输入echo has("clipboard")是否支持为1是支持,为0不支持
如果为0需要安装库

sudo apt-get install vim-gtk

可以复制了,输入命令,可以复制其他系统了.

复制行

"+yy

复制全部

首先输入全选

ggvG

再复制

"=y

 

 

(二)方法二(推荐):

set clipboard^=unnamed,unnamedplus

全选复制

ggyG

在其他地方复制的,,也可以直输入p粘贴到vim,

注:这两种目前发现ssh不能复制

③其他一些寄存器比如“%当前文件名,“.上次插入的文本

3.撤销恢复

在使用VIM的时候,难免会有输错的情况,这个时候我们应该如何撤销,然后回到输错之前的状态呢?答案:使用u(小写,且在命令模式下)命令。

但如果有时我们一不小心在命令模式下输入了u,然后刚输入的一大片代码都不见了,这个时候我们应该如何恢复刚才的撤销操作呢?答案:使用Ctrl + r命令。

总结:

撤销:u

恢复撤销:Ctrl + r

 

4.文件显示(在命令模式下操作)

:set number    #显示行号    *
:set nonumber    #不显示行号

 

5.插入(在命令模式下操作,执行下面命令后即进入编辑模式)

i    #在当前光标位置插入   *
I    #在当前行首位置插入
a    #在当前光标后位置插入
A    #在当前行尾位置插入
o    #在当前行的下一行插入    *
O    #在当前行的上一行插入

gi:跳到最后一次编辑并插入

注意: i(insert) a(append) o(open a line below)

6.删除(在命令模式下操作)

「x」:每按一次,删除光标所在位置的“后面”一个字符。

「#x」:例如,「6x」表示删除光标所在位置的“后面”6个字符。

「X」:大写的X,每按一次,删除光标所在位置的“前面”一个字符。

「#X」:例如,「20X」表示删除光标所在位置的“前面”20个字符。

「dd」:删除光标所在行。

「#dd」:从光标所在行开始删除#行

daw(dw):删除一个单词+空格(d around word)

diw:删除一个单词不包括空格

dt):删除括号里面的所有内容 (引号是:dt")

输入模式下

• ctrl+h 删除上一个字符

• ctrl+w 删除上一个单词 

• ctrl+u 删除当前行

需求1:针对上面的vim_test文件,删除第7-19行

在ESC模式下,输入

:7,19d

7.查找(在命令模式下操作)

/word    #word是你要查找的字符,然后按n查找下一个,按N查找上一个    *
## 查找前可以先如下进行配置  ##
:set hlsearch    #设置高亮    *
:set incsearch    #设置实时搜索,边输入边搜索    *
:set ignorecase    #设置忽略大小写
:set noignorecase    #设置大小写严格匹配

shuif + 3 (光标对着单词)可以跳到上一个单词

shif+8(光标对着单词)可以跳到下一个相同单词

 

行间搜索:

f{char}跳转到下一个字符

t{char} 跳转下一个字符前一个

F{char} 跳转前一个字符

; (分号)下一个同样字符(搜索后)

, (逗号)最后一个字符(搜索后)

vim 查找关键词的数量

:%s/关键词//gn

8.替换(在命令模式下操作)

1. 替换当前行的第一个匹配词,
:s/word/new_word    #word是要替换的字符,new_word是替换后的字符
2. 替换当前行的所有匹配词
:s/word/new_word/g    #word是要替换的字符,new_word是替换后的字符    *
3. 替换所有行的所有匹配词
:%s/word/new_word/g    #word是要替换的字符,new_word是替换后的字符    *

%s/word/new_word/g

4.查询要替换次数

1,6 s /str//n  :用来查询匹配的1到6行字符出现次数

g(global)表示全局,

c(confirm),确认,可以确认或者拒绝修改,

n(number)报告替换次数而不替换,可以用来查询匹配的次数

5.正则表达式替换

% s/\<word\>/new_word/g  匹配单词以开头结尾这样的

 

使用替换命令来添加注释和去注释

1. 一般python文件注释符为#,执行完底行会显示一共有几行插入了注释
:起始行号,结束行号s/^/注释符/g    *
2. 去除注释之后底行显示的是共去除了几行注释
:起始行号,结束行号s/^注释符//g    *

 

9.移动(在命令模式下操作)

:line_number  #line_number是指要移动的行号,如:50指移动到第50行    *

gg :移动文件开头
G    #直接移动到文件末尾    *

Ctrl+o快速返回

^: 行首(带缩进)

$ : 行尾

0: 将光标移到当前行的行首(不带缩进)

Ctrl+f 向前翻屏

Ctrl+b  向后翻屏

Ctrl+d  向前翻半屏

Ctrl+u  向后翻半屏

H 移动屏幕开头

M 移动屏幕中间

L 移动屏幕结尾

normal 移动的快捷方式:(大写以空白符分割)

  • w/W: 移动到下一个word/WORD 开头

  • e/E: 移动到下一个 word/WORD 结尾

  • b/B: 移动到上一个 word/WORD 开头  (backword)

 

10.Vim 打开文件同时定位到某一行(linux命令)
使用vim 打开文件时,默认情况下光标会停留在文件开头,有时候文件比较大,翻阅和查找都比较麻烦,怎样在打开的时候直接定位到某一行呢?

vim +n filename :打开文件,并将光标置于第n行首

 

vim +/pattern filename:打开文件,并将光标置于第一个与pattern匹配的串处

11.vim批量缩进

:10,100>
第10行至第100行缩进
:20,80<
第20行至第80行反缩进

12.vim 中批量添加注释

 

vim 中批量添加注释

方法一 :块选择模式

批量注释:

Ctrl + v 进入块选择模式,然后移动光标选中你要注释的行,再按大写的 I 进入行首插入模式输入注释符号如 // 或 #,输入完毕之后,按两下 ESC,Vim 会自动将你选中的所有行首都加上注释,保存退出完成注释。

取消注释:

Ctrl + v 进入块选择模式,选中你要删除的行首的注释符号,注意 // 要选中两个,选好之后按 d 即可删除注释,ESC 保存退出。

方法二: 替换命令

批量注释。

使用下面命令在指定的行首添加注释。

使用名命令格式: :起始行号,结束行号s/^/注释符/g(注意冒号)。

取消注释:

使用名命令格式: :起始行号,结束行号s/^注释符//g(注意冒号)。

例子:

1、在 10 - 20 行添加 // 注释

:10,20s#^#//#g

2、在 10 - 20 行删除 // 注释

:10,20s#^//##g

3、在 10 - 20 行添加 # 注释

:10,20s/^/#/g

4、在 10 - 20 行删除 # 注释

:10,20s/#//g

 

13.分屏

vs 竖分配(打开一个文件并分屏: vs 文件名)

sp 横分屏

q退出

14.选择

1.Normal模式下使用v进入visual选择
2.使用V选择行
3.使用ctrl+v进行方块选择

vi+符号:例如vi]选中方括号里面内容

15.修改

normal下:

r字符:(replace)光标对着单词如ra修改成a

s:(substitute)删除后编辑

cw:(change)删除单词进行插入

Cw:删除正行进行插入

ct):删除括号里面文字进行插入(ci)也可以)

 

16.多文件操作

ls 显示缓冲区

:ls
  1 #    "111.py"                       第 4 行

e 文件名:打开另一个文件,会发现两个缓冲区

 :ls
  1 #    "111.py"                       第 4 行
  2 %a   "222.py"                       第 23 行

缓冲区切换:

bprevious:跳到前一个文件

bnest:跳到下一个文件

bfirst:跳到第一个文件

blast:跳到后一个文件

b文件名(tab补全):可以跳到指定文件

如何切换窗口?

命令 用途
<ctrl-w>w 在窗口循环切换
<ctrl-w>h 切换左边的窗口
<ctrl-w>j 切换下边的窗口
<ctrl-w>k 切换到上边窗口
<ctrl-w>l 切换右边的窗口

如何重排窗口

重排窗口改变窗口大小:h window-resize查看文档

命令 用途
<ctrl-w>= 使窗口等宽,等高
<ctrl-w>_ 最大化活动窗口的宽度
<ctrl_w>| 最大化窗口的宽度
[N]<ctrl-w>_ 把活动窗口高度设置[n]行
[n]<ctrl-w>| 把活动窗口高度设置为[n]列

17. 宏

如何使用宏

宏的使用分为录制和回放,是不是有种拍电影的感觉
Vim使用q来录制,同时也是q结束录制
使用q{register}选择要保存的寄存器,把录制的命令保存其中

使用@{register}回放寄存器中保存的一系列命令

比如,在每行加入双引号

1.输入qa

2.输入 大I 开头插入" ,esc,再输入大A,结尾输入"

3.q退出录制

4.sift+v选中要操作得到行,G是移动末尾

5.全部替换

'<,'>normal @a

也可以不用宏操作

1.先选中要操作的几行

2.输入 '<,'>normal I"

3.再选中操作的行

4.输入 '<,'>normal A"

就完成了

 

18.补全

Vim中有很多种补全的方式

命令 补全类型
<ctrl, n> 普通关键字
<ctr,x><ctr,n> 当前缓冲区关键字
<ctr,x><ctr,i> 包含文件关键字
<ctr,x><ctr,]> 标签文件关键字
<ctr,x><ctr,k> 字典查找
<ctr,x><ctr,l> 整行补全
<ctr,x><ctr,f> 文件名补全
<ctr,x><ctr,o> 全能(omni)补全

记不住不用担心,根据笔者经验,最常用的就三种

使用ctrl+nctrl+p补全单词

使用ctrl+x ctrl+f补全文件名

使用ctrl+x ctrl+o 补全代码,需要开启文件类型检查,安装插件

 

补充插入本文件文件名

r! echo %

插入结果:UIAutomator.py

补充插入本文件文件绝对路径

r! echo %:p

插入结果:/home/yys/UIAutomator.py

19.映射

递归映射:有重复键映射会被代替

normal下:

map <c-d> dd:dd映射成ctr+d删除一行

unmap <c-d> dd:取消dd映射成ctr+d删除一行

如果长久起作用放在.vimrc里面

Vim常用模式normal/visual/insert 都可以定义映射

nmap/vmap/imap定义映射只在normal/visual/insert分别有效

在insert模式:

插入时删除一行

imap <c-d> <esc>ddi

非递归映射
Vim提供了非递归映射,这些命令不会递归解释
使用*map 对应的nnoremap/vnore