vim_study

vim学习笔记

启动vim:

vim -c file :在打开文件前,先执行指定的命令
vim -r file :恢复上次异常退出的文件;
vim -R file :以只读的方式打开文件,但是(可以强制保存<:q>)
vim -M file :以只读的方式打开文件,不可以强制保存。--重点******
vim + file :从文件的末尾开始;
vim +num file :从第num行开始;
vim +/string file :打开file,并将光标停留在第一个找到的string上
vim --remote file :用已有的vim进程打开指定的文件。如果你不想启用多个vim。

文档的操作
  • :e file --关闭当前编辑的文件,并开启新的文件。如果对当前文件的修改未保存,vi会警告
  • :e! file --放弃对当前文件的修改,编辑新的文件。
  • :e + file --开始新的文件,并从文件尾部开始编辑。
  • : e+n file --开始新的文件,并从第n行开始编辑。
  • : enew --编辑一个未命名的新文档。(CTRL-w n)
  • : e --重新加载当前文档
  • : e! --重新加载当前文档,并丢弃已做的改动。
  • : e#或ctrl+^ --回到刚才编辑的文件,很实用。
  • :f 或ctrl+g --改变编辑的文件名,这时再保存相当于另存为。

gf -- 打开以光标所在字符串为文件名的文件。
:w -- 保存修改。
:n1,n2w filename --选择性保存从某n1行到另n2行的内容
:wq --保存并退出
ZZ --保存并退出
:x --保存并退出
:q --退出当前窗口。
:saveas newfiename -- 另存为

vim的安装:建议使用Linux系统使用vim

  • 输入vim命令进入vim

  • 进去之后的模式是normal模式即普通模式

  • 使用:q可以退出vim

编辑:使用“i”进入编辑模式,开始输入文字

i表示(insert),a(append),o(open aline below)

  • 使用ESC又可以回到normal模式。使用:wq保存退出

  • i: 在光标前插入;一个小技巧:按8,再按i,进入插入模式,输入=, 按esc进入命令模式,就会出现8个=。 这在插入分割线时非常有用,如30i+就插入了36个+组成的分割线。

  • I: 在当前行第一个非空字符前插入;

  • gI: 在当前行第一列插入;

  • a: 在光标后插入;

  • A: 在当前行最后插入;

  • o: 在下面新建一行插入;

  • O: 在上面新建一行插入;

  • :r filename在当前位置插入另一个文件的内容。

  • :[n]r filename在第n行插入另一个文件的内容。

  • :r !date 在光标处插入当前日期与时间。同理,:r !command可以将其它shell命令的输出插入当前文档。

  • 改写插入:

  • c[n]w: 改写光标后1(n)个词。

  • c[n]l: 改写光标后n个字母。

  • c[n]h: 改写光标前n个字母。

  • [n]cc: 修改当前[n]行。

  • [n]s: 以输入的文本替代光标之后1(n)个字符,相当于c[n]l。

  • [n]S: 删除指定数目的行,并以所输入文本代替之。

注意,类似cnw,dnw,ynw的形式同样可以写为ncw,ndw,nyw。

命令 说明
i 在当前光标处进行编辑
I 在行首插入
A 在行末插入
a 在光标后插入编辑
o 在当前行后插入一个新行
O 在当前行前插入一个新行
cw 替换从光标所在位置到一个单词的结尾字符

命令行模式:

命令 说明
:q! 强制退出vim,不保存
:q 退出vim
:wq! 强制保存并退出vim
:w <文件路径> 另存为
:saveas <文件路径> 另存为
:x 保存并退出vim
:wq 保存并退出vim
:set nu 显示行号
:ce(center) 本行内容居中
:ri(right) 本行内容居右
:le(left) 本行内容居左
:set shiftwidth=10 设置缩进为10个字符,以此类推(输入Esc回到普通模式,再次尝试>>看缩进是否变化)
:vs 竖分屏
: sp 横分屏

“cat”这个命令可以查看文档下的英文内容,“注意”如果是中文就会出现乱码

使用normal模式下的 v命令,进入visual模式,v+ j/k/h/l 进行文本选中

对于选中的文本进行如下按键:

(1.1)d ------ 剪切操作

(1.2)y -------复制操作

(1.3)p -------粘贴操作

(1.4)^ --------选中当前行,光标位置到行首(或者使用键盘的HOME键)

(1.5)$ --------选中当前行,光标位置到行尾(或者使用键盘的END键)


  • 使用命令替换文中的内容 “: %s /替换前文本/替换后文本/g(全局替换)

Visual(可视模式)

  • Normal模式下使用V进入visual选择

  • 使用v选择行

  • 使用Ctrl+v块选择

vim编辑技巧

  • 如何快速纠正错误:进入vim之后使用a/i/o之一进入插入模式

  • ctrl+h删除上一个字符,ctrl+w删除上一个单词,ctrl+u删除当前行

终端编辑:

使用ctrl+A快速移动到开头,使用CTRL+E快速移动到结尾,使用CTRL+B往前移,使用CTRL+F往后移

快速切换insert和normal模式

使用CTRL+C代替ESC(但是可能会中断某些插件)或者"使用CTRL+["

快捷键:

gi“快速跳转到你最后一次编辑的地方并进入插入模式

**快速移动的方式

:bn 和 :bp → 你可以同时打开很多文件,使用这两个命令来切换下一个或上一个文件。(陈皓注:我喜欢使用:n到下一个文件)
NG → 到第 N 行 (陈皓注:注意命令中的G是大写的,另我一般使用 : N 到第N行,如 :137 到第137行)
gg → 到第一行。(陈皓注:相当于1G,或 :1)
G → 到最后一行。

快速移动方式

H, J,K,L左下上右

  • w/W移动到下一个word/WORD开头。e/E下一个word?WORD尾

b/B回到上一个word/WORD开头,可以理解为backword

word指的是以非空白符分割单词,WORD以空白符分割单词

normal 移动的快捷方式:

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

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

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

行间搜索移动

f{char}: 当前光标往行后搜索字符, 分号(;)下一个找到的字符,逗号(,)上一个找到的字符

F{char}: 当前光标往前搜索字符

0: 移动到行首第一个字符

^: 移动到第一个非空白字符

$: 移动到行尾

g_: 移动到行尾非空白字符

页面移动

gg: 文件开头

G: 文件结尾

H: 屏幕的开头(Head)

M: 屏幕的中间(Middle)

L: 屏幕的结尾(Lower)

crtl+u: 上翻页(upword)

ctrl+f: 下翻页(forword)

zz: 将光标所在的一行设置到屏幕的中间

syntax on"代码高亮

行间搜索移动:

同一行快速移动的方式其实是搜索一个字符并且移动到该字符

  • 使用f{char}可以移动到char字符上,t移动到char的前一个字符
  • 如果没有搜索到,可以用分号(;)逗号(,)继续搜该行下一个/上一个
  • 使用大写F就可以反方向搜索

水平移动:

快速移动到一行的行首和行尾:

  • 0 移动到行首第一个字符,^移动到第一个非空白字符
  • $ 移动到行尾,g_移动到行尾非空白字符

垂直移动:

使用括号()在句子间移动,可以用:help(来查看帮助)

使用{ }在段落之间移动

使用esay-motion插件移动

页面移动:

gg/G 移动到文件开头和结尾。可以使用ctrl+o快速返回

H/M/L跳转到"屏幕"的开头(Head),中间(Middle)和结尾(Lower)

ctrl+u.ctrl+f.上下翻页。(upword/forward)。zz把屏幕设置为中间


vim快速增删改查

数字+命令可多次执行该命令

删除:

x 删除一个字符

d[object] 删除一个[object]

[object]包括但不限于:

(a)w 单词(包含空白符)

iw 单词(不包含空白符)

$

0

...

dd 删除当前行

dt[char] 删除直到[char]的字符

修改:

r 替换当前字符

R 进入替换模式

s 删除当前字符并进入插入模式

S 删除当前行并进入插入模式

c[object] 删除一个[object]并进入插入模式

ct[char] 删除直到[char]的字符并进入插入模式

C 删除当前行光标后所有字符并进入插入模式

查询:

:set hls 搜索结果高亮

:set incsearch 增量搜索

/[string] 正向搜索

?[string] 反向搜索

其中:

n/N 下一个/上一个匹配

*/# 当前单词的正向/反向匹配

增加字符:

使用“i"插入模式编辑文本

使用a/i/o进入插入模式

快速删除:

vim在normal模式下使用"x"快速删除一个字符

使用"d"(delete)配合文本对象快速删除一个单词daw(d around word)

dw删除这一个单词 daw删除单词和周围空格 diw删除单词留下空格

dd删除一整个行

dt)表示删除括号内的所有内容

dt""快速删除双引号内的所有内容

d0快速删除到行首

d$快速删除到行尾

数字+d表示删除几行

数字+x表示删除几个字符


快速修改

常用的有三个,r(replace),c(change),s(substitute)

  • 在normal模式下使用r可以替换一个字符。s替换并进入插入模式 ,大写S可以替换整行并进入插入
  • 使用C配合文本对象,可以快速进行修改

vim查询

  • 使用/或者?进行前向或者方向搜索
  • 使用n/N跳转到下一个或者上一个匹配
  • 使用*或者#进行当前单词的前向和后向匹配

vim的搜索和替换

substitute命令允许我们查找并且替换掉文本,并且支持正则表达式

全局加上S 表示替换,g表示全局替换

替换::% s/要替换的/替换成的/g.c.n

c-r 撤销u命令

\ <精确单词>

:% s/self/this/g 表示在一个文件中用this全局替换掉self

  • g(global)表示全局范围内执行
  • c(confirm)表示确认,可以确认或者拒绝
  • n(number)报告匹配到的次数而不替换,可以用来查询匹配次数

:1,6 s/self/size/g(范围内的使用方式)


如何保存自己写的文档

在写完代码或者文档以后,使用<:w 文件名.txt>储存文件里(注意一般C盘里会生成swp的文件)所启动盘符的位置


如何使用vim新建文件

新建文件<:new 文件名.后缀>

新建完成后注意使用:w保存否则直接关闭不会产生文件,如果录入了内容,关闭时会提醒你保存


如何打开文件

一、 打开文件<:e 文件名>注意:可以使用tab键进行文件夹名称和文件名称的自动补全,可以多次按tab,直到找到需要的。

如何使用vim去打开一个文件

vim file1

二、

vi flname1 flname2
可以同时打开多个文件;
只打开一个文件时,操作结果和``":e"``命令相同。

三、 <:split> `文件``会将当前窗体分为多个区域,在新的区域打开文件。

四、 ":tabnew 文件名“," : tabe 文件名”

外部命令

:! cmd 执行外部命令。
:!! 执行上一次的外部命令。
:sh 调用shell,用exit返回vim。
:r !cmd 将命令的返回结果插入文件当前位置。
:m,nw !cmd 将文件的m行到n行之间的内容做为命令输入执行命令。

工作目录:

  • :pwd 显示vim的工作目录。
  • :cd path 改变vim的工作目录。
  • :set autochdir 可以让vim 根据编辑的文件自动切换工作目录。

文件之间的切换

先使用``":ls"``查看已经打开的文件列表和编号,
然后使用``":e#编号"``切换需要编辑的文件。
在``:ls``中各文件的编号在未离开vim前是不会变的;<br>这可以切换到a.txt进行编辑。



概念:

Buffer: 内存缓冲区

Window: Buffer的可视化分割区域

Tab: 组织Window为一个工作区

补全命令

:ls 列举当前缓冲区

:b [num] 跳转到[num]缓冲区

:b [name] 跳转到[name]缓冲区

:bpre/bnext/bfirst/blast 跳转到上一个/下一个/第一个/最后一个缓冲区

:e [name] 打开[name]文件

窗口分屏操作

窗口分屏

Ctrl(首先进行分屏操作)

垂直分割(:vs)

水平分割(: sp)

ctrl + w 在窗口之间切换和移动

以使用快捷键操作下面的内容:

C-w s 水平分割窗口

C-w v 垂直分割窗口

C-w w 循环切换窗口

C-w h/j/k/l 切换到←/↓/↑/→窗口

C-w H/J/K/L 移动当前窗口向←/↓/↑/→

C-w = 所有窗口等宽高

C-w _/| 当前窗口最大化高度/宽度

[num]C-w _/| 当前窗口高度设为[num]行/列

Tab(标签页)将窗口分组

:tabnew 新建标签页

:tabe [name] 在新标签页打开[name]文件

:tabc 关闭当前标签页和窗口

:tabo 只保留当前标签页并关闭其他的

C-w T 将当前窗口移动到新标签页

:tabn [num] 切换到[num]标签页,没有[num]表示下一个

[num]gt 同上

:tabp 切换到上一个标签页

gT 同上


修改文件名称

操作命令是:":f 新的文件名称"

:f` `新的文件名称

保存和退出

write命令
对文件进行保存
:w保存不退出
:q`退出文件:wq保存并退出``:q``! 不保存并退出``:x` `退出,如果文件更改则保存``shift + ``Z` `+``Z` `退出,如果文件更改则保存(按住Shift,再按两次z)


使用<:qa>可以退出到shell


另存为

:saveas 另存为名称.txt

Vim系统的帮助

vim帮助

  • 进入 vim 之后,是普通模式

  • 输入 : 进入 命令行 模式

  • 有命令不会就使用

    :help
    
    • 或者直接用功能键 F1

    • 比如说 :qa 不会

    • :help 这个 :qa

    • 输入 :help :qa

    • :help 的对象是 :qa,中间留了一个空格

    • 回车 之后执行命令

    注意可以用 :q 先退出当前帮助

    :help命令有两种写法

    • 完整 :help
    • 简写 :h
  • 正常模式

    (Normal mode)
    
    • 也叫默认模式。
    • 进入 vim 时默认的模式所有输入的键都直接对应着命令
    • 也被叫做命令模式.
  • 插入模式

    (Insert mode)
    
    • 任何键盘录入都会插入到当前文档中
  • 可视模式

    (Visual mode)
    
    • 很像正常模式
    • 但是移动命令会改变选中的一块高亮区域
    • 执行的命令会对选定范围进行
  • 选择模式

    (Select mode)
    
    • 可以用鼠标或光标键高亮选择文本
    • 任何输入都会替换选择的高亮文本
    • 并进入插入模式
  • 命令行模式

    (Command-Line mode)
    
    • 可以窗口下方执行一条命令
    • 一般是通过 : 执行单行命令
    • 通过 / 和 ? 进行搜索
  • Ex mode

    (多行命令执行模式)
    
    • Ex 指的是 Execute
    • Normal 正常模式下使用 gQ 进入
    • 使用 :visual 退出

查看当前文件的信息

使用:file 可以在状态栏看到当前文件的信息

如何使用键盘跳转vim所打开的文件中的链接

使用光标或者键盘那移动到链接上使用<ctrl + ] >就可以跳入链接。

使用 <ctrl + o >可以跳出链接,回到原位置


注意(退回到命令模式)

按 esc 或 ctrl+c 退回到命令模式

尽量使用 ctrl+c


重复的插入

使用i进入插入模式以后输入相关内容。

再使用ctrl + c退回到正常模式 按下.可以重复刚才的操作。

撤销插入的内容

使用 < u >可以撤销操作

  • 在正常状态下按 ctrl+r 可撤销撤销操作
  • i 在当前的光标之前插入

  • I 在本行文本的最前面插入

  • A 在本行 最后 插入

    • a 在当前光标之后插入

    • . 重做

    • u 撤销

    • ctrl+r 还原

插入:

i是在光标所在的字符之前插入需要录入的文本。

I 是在光标所在行的行首插入需要录入的文本。

a 是在光标所在的字符之后插入需要录入的文本。

A 是在光标所在行的行尾插入需要录入的文本。

o 是光标所在行的下一行行首插入需要录入的文本。

O 是光标所在行的上一行行首插入需要录入的文本。

s 删除光标所在处的字符然后插入需要录入的文本。

S 删除光标所在行,在当前行的行首开始插入需要录入的文本。

  • ia 都是 Insert mode commands

  • 插入位置

    • ibefore cursor 在光标前插
    • aafter cursor 在光标后插
  • 对应命令

    • i 意思是 insert
    • a 意思是 append

    • 区别:

    • i 在当前的光标之前插入

    • I 在本行文本的最前面插入

    • A 在本行文本 最后 插入

      • a 在当前光标之后插入
  • o 本行下方插入一个新行
  • O 本行上方插入一个新行

注意跳转到行首是使用^,跳转到行尾是使用$

跳到某行

首行是

尾行是

2G 跳到第2行

3G 跳到第3行

4G 跳到第4行

gg 跳到第一行

G 跳到最后一行

set显示行号

:set number 是显示行号
set 是命令,可以设置各种属性

number 是 :set 的参数 option

使用:set nonumber关闭number,不显示行号

简写

:se nu

se nonu

显示相对行号

:set relativenumber

相对行号简写

set relativenumber 简写 se rnu

set norelativenumber 简写 se nornu

使用命令的模式跳转

:30 跳到 第30行

:40 跳到 第40行

:999 跳到末尾,如果总长度没有999.的话

查看当前文件有多少行

:f[file]

或者 ctrl + g

配置文件

首先打开原来的配置文件,~代表用户文件夹

vi ~/.vimrc

可以用/statusline找到状态条的写法

各种实用开关

  • set number 显示行号
  • set relativenumber 显示相对行号
  • set cursorline 光标所在的当前行高亮
  • set cursorcolumn 光标所在的当前列高亮
  • set nocompatible 使用 vim 模式,不与 Vi 兼容
  • syntax on 打开语法高亮
  • set showmode 在底部显示,当前所处模式
  • set showcmd 命令模式下,在底部显示键入指令
  • set mouse-=a 纯键盘操作
  • set encoding=utf-8 使用 utf-8 编码
  • set autoread 硬盘文件变化后,自动读取
  • 把上述这些存储到 ~/.vimrc 之后,以后这些配置就会自动起作用了
  • 也可以去 github 搜索 .vimrc 找到关于配置的更多信息

复制

命令是 :y对应的单词是yank

  • 找到一行 然后进行yy操作

  • 观察:reg发现这一行已经进入了寄存器

  • 找到一个合适的地方

    p

    • 可以把寄存器里面的内容放到当前行下面

vim 分屏操作

使用组合键 ctrl + w s 这个命令就是上下分割当前打开的文件

按住冒号:,接着输入sp,在键入文件名,如下:

:sp file

上面这个命令将会上下分割当前文件和新打开的file

同样使用组合键 ctrl + w ,然后按下v

ctrl +w v

上面这个命令将会左右分割当前的文件

按住冒号 : ,接着输入vsp,在键入文件名称,如下

:vsp file

上面的这个命令将会左右分割当前打开的文件 和新打开的文件file

分屏以后如何在文件之间切换光标,和移动分屏:

1、切换左右分屏的光标:

ctrl + w h

将当前光标定位到左边的屏幕

ctrl + w l

将当前的光标定位到右边的屏幕

2、移动左右分屏:

ctrl + w H

将当前的分屏移动到左边

ctrl + w L

将当前的分屏移动感到右边

3.切换上下分屏的光标 :

Ctrl + w j

将当前的光标移动到下面的分屏

Ctrl + w k

将当前光标移动到上面的分屏

4.移动上下分屏:

Ctrl + w J

将当前的分屏移动到下面的分屏

Ctrl + w K

将当前的分屏移动到上面的分屏

如何关闭分屏呢?

Ctrl + w c

上面这个命令是关闭当前的分屏

Ctrl + w q

上面的这个命令也是关闭当前的分屏,如果是最后一个分屏将会退出 VIM 。

vim分屏打开不同的文件

vim -On [FILE_1] [FILE_2] ...
vim -on [FILE_1] [FILE_2] ...

-O:垂直分割(vertical)
-o: 水平分割(默认horizontal)
n: 表示分几个屏,可以缺省不写,默认按后面要分割的文件数来决定分几个屏
[FILE_1][FILE_2]: 需要打开文件

查找文本中匹配的目标字符串

查找字符串</{目标内容}>

查到以后,输入键盘上的 n 会去寻找下一个匹配,N 会去寻找上一个匹配。

:set noic
该命令用来区分大小写的查询。

该命令用来区分大小写的查询。

删除多行文本

:n1,n2d

n1和n2指的是起始行号和结束行号,d是删除关键字

vim处理文本的替换

:{作用范围}s/{目标}/{替换}/{替换的标志}
:s/zempty/handsome/g

将会把当前光标所在行的 zempty 替换成 handsome

:%s/zempty/handsome/g

将会把全文中的 zempty 替换成 handsome

:n1,n2s/zempty/handsome/g

这里的 n1 和 n2 值得是行号,将会替换掉 n1 到 n2 的所有 zempty 为 handsome.

vim的复制、粘贴、删除

三个重要的快捷键 d , y , p

d 是删除的意思,通常搭配一个字符 ( 删除范围 ) 实现删除功能,常用的如下:

dw 删除一个单词

dnw 删除 n 个单词,

dfa 删除光标处到下一个 a 的字符处( fa 定位光标到 a 处 )

dnfa 删除光标处到第 n 个 a 的字符处

dd 删除一整行

ndd 删除光标处开始的 n 行

d$ 删除光标到本行的结尾

dH 删除屏幕显示的第一行文本到光标所在的行

dG 删除光标所在行到文本的结束

y 是复制的意思,通常搭配一个字符(复制范围)实现复制的功能,常用的如下:

yw` 复制一个单词,还有 `ynw
yfa` 复制光标到下一个 a 的字符处,还有`ynfa
yy` 复制一行,还有 `nyy

y$ 复制光标到本号的结尾

yH 复制屏幕显示的第一行文本到光标所在的行

yG 复制光标所在行到文本的结束

pP是黏贴的意思,当执行完复制或者黏贴的命令以后,VIM 会把文本寄存起来。

p 在光标后开始黏贴

P 大写的 P 光标前开始粘贴

撤销操作和恢复

u 撤销刚才的操作

ctrl + r 恢复撤销操作

删除字符操作和替换

x 删除光标当前所在的字符

r 替换掉光标当前所在的字符

R 替换掉从光标开始以后的所有字符,除非 <ESC > 退出,或者 jj (代替 上文有提到)退出。

重复命令1

VIM 的重复命令

. 该命令是重复上一个操作的命令
n重复某个命令 n 次,
如 10p复制 10 次,10dd 删除十次。

代码提示功能

在编辑模式下 ,快捷键 Ctrl+n 或者 Ctrl+p 会有代码提示功能,我们可以实现快速录入的效果。

宏录制和使用

VIM 的宏录制

假设需要操作的文本如下,需要将如下文本的每一行的行首插入入一个 tab 键。

hello
hello world
hello world , vim
宏录制的录制操作

先将光标移动到第一行,在普通模式下按下 q 键(宏录制是 q 键启动的),在按一个 a (字母随意),表示该宏注册为 a ,按下 I 在行首插入一个 tab 键,按下jj或者 退出编辑模式,按下 j 将光标移动到下一行行首,最后按下 q 键完成录制操作(宏录制是 q 键结束的)。
总结上面例子的操作流程:
q → a → I → tab → jj → j → q
上面的例子成功地把在行首插入 tab 的功能录制了下来,那么如何应用到其他行呢?

宏录制的使用

上述的例子,在正常模式下,按 @a执行宏录制的一系列动作,将会在第二行执行插入 tab 。
@@ 是对上一次宏使用的重复操作。n@a 就会执行 n 次一系列的动作。使用宏录制可以一次执行一系列的操作,可以针对一些重复度较高的操作进行宏录制。

可视化模式下 v 的特殊操作

当操作的文本光标在 “”,‘’ ,(),{} ,[(双引号,单引号,小括号,大括号,中括号)
当中的时候,可以通过 va"选中 ”“ 内的所有内容包括双引号 ,vi" 选中 "" 内的所有内容,不包括 ""。va,vi 会快速选择区域,va 后面会紧跟一个区域结束标志,a 会选中结束符标志,i 就不会。例子如下:

"hello world [VIM is so strong],{we all can master vim skill}"

假设当前光标定位在上面的文本 M 处:
va] 操作将会选中以下文本(加粗部分):
“hello world[VIM is so strong]*,{we all can master vim skill}“
vi] 操作将会选中如下的区域,没有包含 []:
“hello world [
VIM is so strong*],{we all can master vim skill}“

vim如何与外界粘贴复制

\1. 用vim 打开一个文件,然后执行命令:reg 查看是否有 + 或者 × 号 或者执行:version 命令 查看是否有+clipboard

如果存在:

   则可以使用 “+y 将vim 里面的内容复制到系统剪贴板或者 +p 将系统剪贴板里面的内容复制到vim 里面

 如果不存在:

   则需要安装vim-gnome, 然后就可以用以上命令粘贴复制

\2. 可以在 /etc/vim/.vimrc 里面设置 clipboard=unnamedplus 这样就可以直接使用 y p命令直接粘贴复制了

vim[命令](Vim使用笔记 - JollyWing - 博客园 (cnblogs.com))

  • :pwd 显示vim的工作目录。

  • :cd path 改变vim的工作目录。

  • :set autochdir 可以让vim 根据编辑的文件自动切换工作目录。

  • 执行外部命令:


  • :! cmd 执行外部命令。(这里的命令指的是例如Windows的命令提示符)

  • :!! 执行上一次的外部命令。

  • :sh 调用shell,用exit返回vim。

  • :r !cmd 将命令的返回结果插入文件当前位置。

  • :m,nw !cmd 将文件的m行到n行之间的内容做为命令输入执行命令。

快速删除

  • :使用 a/i/o等命令进入插入模式
  • :ctrl + h 删除上一个字符
  • :ctrl + w 删除上一个单词
  • :ctrl + u 删除当前行(这个与
    是一样的效果)
  • :
  • :
  • :
  • :快速切换模式的快捷键 :ctrl + c 或者 ctrl + [ 这两个可以
  • :A keyboard is recommended here poker2

quick travel

h,j,k,l(左,下,上,右)

  • :
  • :
  • :
  • :
  • :
  • :
  • :
  • :
  • :
  • :
  • :
  • :

vim的文本概念:

什么是vim的text object

vim的文本对象(text object)

[number][text object]

number表示次数,command是命令, d(elete), c(hange), y(ank)

text object是要操作的文本对象, 比如单词w,句子s,段落p

主要使用的有iw, inner word, 如果使用viw,那么v进入选择模式,iw选择当前单词

aw 表示around word,不但会选中当前单词,还会包含当前单词之后的空格。

vim里文本的对象概念,比如一个单词,一段句子,一个段落

文本对象的操作方法:比如(删除一个单词:dw)

例如:iw表示inner word,如果键入viw命令,那么首先v将进入选择模式,然后iw将选中当前单词。

aw表示 a word ,它不但会选中当前单词,还会包含当前单词之后的空格。

增加练习题:在vim尝试使用文本对象快速增删改查。

vim 的复制粘贴与寄存器的使用

  1. 全部删除:按esc键后,先按gg(到达顶部),然后dG.
  2. 全部复制:按esc键后,先按gg,然后ggyG.
  3. 全选高亮显示:按esc键后,先按gg,然后ggvG或者ggVG.
  4. 单行复制:按esc键后,然后yy.

normal模式下的复制粘贴分别是使用y(yank)和p(put),剪贴d和p

例如配合文本对象:比如使用yiw复制一个单词,yy复制一行

Insert模式下的复制粘贴

vimrc设置autoindent,可以自动缩进,但粘贴python代码会格式混乱

这个时候使用:set paste 和:set nopaste解决

:set clipboard=unnamed 直接使用系统剪切板

"+y/p 复制粘贴系统剪切板内容

" 可以调用vim 寄存器,可以自行命名,如"ay 即复制至寄存器a

输入ctrl+r,再按 +, 可在insert模式插入系统剪贴板内容

:e! 重新加载当前打开文件

:set paste

:set nopaste

"+ p 粘贴系统中的

insert 模式下 ctrl +粘贴系统剪切板

vim里操作的是寄存器 而不是系统剪贴板。

这里默认使用d删除或者y复制的内容都放到了“无名寄存器”

用X删除一个字符放到无名寄存器,然后p粘贴,可以调换俩字符

vim宏(macro)

vim使用q来录制,同时也是q结束录制

使用q{register}选择要保存的寄存器,把录制的命令保存其中

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

例子:选取一段文本(比如个所有的段落加上双引号)首先使用q开始录制,使用a作为寄存器的名称。出现@a以后

使用I在段落首部写入“——然后使用A在段落尾部写入”

完成操作以后按下q结束录制

选中下一行,使用@a执行操作

如果要全部都执行,就全部选中段落。

:‘<,'>normal @a

这样就是给所有的段落加上了双引号。

比如给所有行加上双引号,先按qa进入宏模式,然后输入I跳到行首输入“然后按ESC,然后再按A跳到行尾输入”,然后按ESC,然后按q结束宏录制。然后按V选中想要操作的行,然后按:进入命令行模式,接着输入normal @a

使用V和G选中所用行,使用:进入命令模式输入:'<,'>normal I"回车就会在所有的行首加上双引号。同理把I改成A也可以在行尾加入。

vim的补全

vim补全大法

什么是补全

  • 补全是根据当前环境上下文有编辑器【猜】你想输入的东西

  • 比如补全一个单词、文件名、或者代码中的函数名、变量名

  • vim中提供了多种补全功能,还有由插件拓展功能实现代码补全

vim中常见的补全

vim中有很多种补全方式

| 命令 | 补全类型 |

| ------ | ---------- |

| <C-n> | 补全关键字 |

|<C-x><C-n>|当前缓冲区关键字|

|<C-x><C-i>|包含文件关键字|

|<C-x><C-j>|标签关键字|

|<C-x><C-k>|字典查找|

|<C-x><C-l>|整行补全|

|<C-x><C-f>|文件名补全|

|<C-x>|全能(Omin)补全|

常见的三种补全类型

  • 使用Ctrl+n和Ctrl+p补全单词

  • 使用Ctrl+x,Ctrl+f补全文件名

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

给vim更换配色

使用:colorscheme显示当前的主题配色,默认是default

  • 用:colorscheme <ctrl + d>显示所有配色

    {blue default desert evening koehler murphy peachpuff shine torte
    darkblue delek elflord industry morning pablo ron slate zellner}

  • 找到用中意的配色后,用:colorscheme配色名,就可以修改颜色

  • 网上下载配色:

    (https://github.com/flazz/vim-colorschemes)

    安装之后就有大量的主题可以更换了

    下载到本地,解压。

    hybrid.vim 文件移动到 ~/.vim/colors(如果没有这个目录的话,使用mkdir ~/.vim/colors -p先创建。)

    回到第一步,进行切换主题

    可以下载多个配色到 ~/.vim/colors即可随时更换

    如果需要持久化配置,则需要写的 vimrc

配置vim

Windows配置:

我的配置文件位置“C:\Users\26411\AppData\Local\nvim”

windows下如何找到init.vim的配置文件:

**打开 Neovim,使用 <:echo stdpath ('config')>可以查看该目录的具体位置。

vim & neovim 的默认配置文件
一般来说:
vim的默认配置文件地址:~/.vim/vimrc (如果没有就自己创建)
Neovim的默认配置文件地址:~/.config/nvim/init.vim (如果没有就自己创建)

windows下如何找到init.vim的配置文件:

**打开 Neovim,使用 <:echo stdpath ('config')>可以查看该目录的具体位置。

在以上文件中的配置,只会对当前用户文件生效,也就是 “~/” 目录下
在命令行中输入nvim --version得到以下结果

PS C:\Users\26411> nvim --version
NVIM v0.7.0
Build type: RelWithDebInfo
LuaJIT 2.1.0-beta3
Compiled by runneradmin@fv-az320-113

Features: -acl +iconv +tui
See ":help feature-compile"

system vimrc file: "$VIM\sysinit.vim"
fall-back for $VIM: "C:/Program Files/nvim/share/nvim"

Run :checkhealth for more info
PS C:\Users\26411>

如何编写自己的vim配置文件

Linux/Unix下新建一个隐藏文件vim ~/.vimrc

  • windows系统vim $MYVIMRC,通过环境变量编辑配置文件
  • nvim在windows系统下的配置文件路径:C:\Users\26411.config\nvim\init.vim
  • ~/.config/nvim/init.vim

常用的vim配置

  • 常用设置,比如:set nu设置行号,colorscheme hybrid设置主题

  • 常用的vim映射,比如 noremap w : w保存文件

  • 自定义vimscript函数和插件配置

  • 通过把常用的设置写入到.vimrc里避免每次打开vim重新设置

  • 比如设置行号set nu ; 设置主题 colorscheme hybird

vim映射

相关内容上网查询(慕课网)这里不做叙述。

vim映射就是把一个操作映射到另一个操作

使用map就可以实现映射。比如:map - x 然后按 - 就会删除字符

:map viw 告诉vim按下空格的时候选中整个单词

:map dd可以使用ctrl + d 执行dd删除一行

:vmap \ U 把在visual模式下选中的文本大小(u/U转换大小写)

网络小书《笨方法学Vimscript》中关于映射的章节。

安装vim插件

首先安装vim的插件管理器

junegunn/vim-plug: Minimalist Vim Plugin Manager (github.com)

找到vim插件管理器的配置文件

image-20220807090942728

找到需要的内容复制粘贴到init.vim的配置文件里。

然后找到需要的插件

放入配置文件以后退出vim重新进入

使用PlugInstall安装插件然后重启

image-20220807090719160

插件放入到call Plug#begin()

和call plug#end()之间

之后在使用PlugInstall安装插件

如何搜索插件:在GitHub或者vimawesome.com上查找

vim配色方案:

image-20220807093704274

文件目录树

如何切换盘符::NERDTree D:\

vim插件

相关内容在网上自己找到需要的插件,然后安装使用(配置快捷键和特殊功能)

安装

:PlugInstall

卸载插件

:PlugClean

注释或者删除掉配置文件中需要删除的插件然后在vim中使用:PlugClean。

插件设置文件vim的引用

source ~/.vim/snippits.vim(配置文件的位置)

  • 输入vim命令进入vim

  • 进去之后的模式是normal模式即普通模式

  • 使用:q可以退出vim

编辑:使用“i”进入编辑模式,开始输入文字

i表示(insert),a(append),o(open aline below)

  • 使用ESC又可以回到normal模式。使用:wq保存退出
命令 说明
i 在当前光标处进行编辑
I 在行首插入
A 在行末插入
a 在光标后插入编辑
o 在当前行后插入一个新行
O 在当前行前插入一个新行
cw 替换从光标所在位置到一个单词的结尾字符

命令行模式:

命令 说明
:q! 强制退出vim,不保存
:q 退出vim
:wq! 强制保存并退出vim
:w <文件路径> 另存为
:saveas <文件路径> 另存为
:x 保存并退出vim
:wq 保存并退出vim
:set nu 显示行号
:ce(center) 本行内容居中
:ri(right) 本行内容居右
:le(left) 本行内容居左
:set shiftwidth=10 设置缩进为10个字符,以此类推(输入Esc回到普通模式,再次尝试>>看缩进是否变化)
:vs 竖分屏
: sp 横分屏

“cat”这个命令可以查看文档下的英文内容,“注意”如果是中文就会出现乱码

使用normal模式下的 v命令,进入visual模式,v+ j/k/h/l 进行文本选中

对于选中的文本进行如下按键:

(1.1)d ------ 剪切操作

(1.2)y -------复制操作

(1.3)p -------粘贴操作

(1.4)^ --------选中当前行,光标位置到行首(或者使用键盘的HOME键)

(1.5)$ --------选中当前行,光标位置到行尾(或者使用键盘的END键)


  • 使用命令替换文中的内容 “: %s /替换前文本/替换后文本/g(全局替换)

Visual(可视模式)

  • Normal模式下使用V进入visual选择

  • 使用v选择行

  • 使用Ctrl+v块选择

vim编辑技巧

  • 如何快速纠正错误:进入vim之后使用a/i/o之一进入插入模式

  • ctrl+h删除上一个字符,ctrl+w删除上一个单词,ctrl+u删除当前行

终端编辑:

使用ctrl+A快速移动到开头,使用CTRL+E快速移动到结尾,使用CTRL+B往前移,使用CTRL+F往后移

快速切换insert和normal模式

使用CTRL+C代替ESC(但是可能会中断某些插件)或者"使用CTRL+["

快捷键:

gi“快速跳转到你最后一次编辑的地方并进入插入模式

**快速移动的方式

:bn 和 :bp → 你可以同时打开很多文件,使用这两个命令来切换下一个或上一个文件。(陈皓注:我喜欢使用:n到下一个文件)
NG → 到第 N 行 (陈皓注:注意命令中的G是大写的,另我一般使用 : N 到第N行,如 :137 到第137行)
gg → 到第一行。(陈皓注:相当于1G,或 :1)
G → 到最后一行。

快速移动方式

H, J,K,L左下上右

  • w/W移动到下一个word/WORD开头。e/E下一个word?WORD尾

b/B回到上一个word/WORD开头,可以理解为backword

word指的是以非空白符分割单词,WORD以空白符分割单词

normal 移动的快捷方式:

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

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

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

行间搜索移动

f{char}: 当前光标往行后搜索字符, 分号(;)下一个找到的字符,逗号(,)上一个找到的字符

F{char}: 当前光标往前搜索字符

0: 移动到行首第一个字符

^: 移动到第一个非空白字符

$: 移动到行尾

g_: 移动到行尾非空白字符

页面移动

gg: 文件开头

G: 文件结尾

H: 屏幕的开头(Head)

M: 屏幕的中间(Middle)

L: 屏幕的结尾(Lower)

crtl+u: 上翻页(upword)

ctrl+f: 下翻页(forword)

zz: 将光标所在的一行设置到屏幕的中间

syntax on"代码高亮

行间搜索移动:

同一行快速移动的方式其实是搜索一个字符并且移动到该字符

  • 使用f{char}可以移动到char字符上,t移动到char的前一个字符
  • 如果没有搜索到,可以用分号(;)逗号(,)继续搜该行下一个/上一个
  • 使用大写F就可以反方向搜索

水平移动:

快速移动到一行的行首和行尾:

  • 0 移动到行首第一个字符,^移动到第一个非空白字符
  • $ 移动到行尾,g_移动到行尾非空白字符

垂直移动:

使用括号()在句子间移动,可以用:help(来查看帮助)

使用{ }在段落之间移动

使用esay-motion插件移动

页面移动:

gg/G 移动到文件开头和结尾。可以使用ctrl+o快速返回

H/M/L跳转到"屏幕"的开头(Head),中间(Middle)和结尾(Lower)

ctrl+u.ctrl+f.上下翻页。(upword/forward)。zz把屏幕设置为中间


vim快速增删改查

数字+命令可多次执行该命令

删除:

x 删除一个字符

d[object] 删除一个[object]

[object]包括但不限于:

(a)w 单词(包含空白符)

iw 单词(不包含空白符)

$

0

...

dd 删除当前行

dt[char] 删除直到[char]的字符

修改:

r 替换当前字符

R 进入替换模式

s 删除当前字符并进入插入模式

S 删除当前行并进入插入模式

c[object] 删除一个[object]并进入插入模式

ct[char] 删除直到[char]的字符并进入插入模式

C 删除当前行光标后所有字符并进入插入模式

查询:

:set hls 搜索结果高亮

:set incsearch 增量搜索

/[string] 正向搜索

?[string] 反向搜索

其中:

n/N 下一个/上一个匹配

*/# 当前单词的正向/反向匹配

增加字符:

使用“i"插入模式编辑文本

使用a/i/o进入插入模式

快速删除:

vim在normal模式下使用"x"快速删除一个字符

使用"d"(delete)配合文本对象快速删除一个单词daw(d around word)

dw删除这一个单词 daw删除单词和周围空格 diw删除单词留下空格

dd删除一整个行

dt)表示删除括号内的所有内容

dt""快速删除双引号内的所有内容

d0快速删除到行首

d$快速删除到行尾

数字+d表示删除几行

数字+x表示删除几个字符


快速修改

常用的有三个,r(replace),c(change),s(substitute)

  • 在normal模式下使用r可以替换一个字符。s替换并进入插入模式 ,大写S可以替换整行并进入插入
  • 使用C配合文本对象,可以快速进行修改

vim查询

  • 使用/或者?进行前向或者方向搜索
  • 使用n/N跳转到下一个或者上一个匹配
  • 使用*或者#进行当前单词的前向和后向匹配

vim的搜索和替换

substitute命令允许我们查找并且替换掉文本,并且支持正则表达式

全局加上S 表示替换,g表示全局替换

替换::% s/要替换的/替换成的/g.c.n

c-r 撤销u命令

\ <精确单词>

:% s/self/this/g 表示在一个文件中用this全局替换掉self

  • g(global)表示全局范围内执行
  • c(confirm)表示确认,可以确认或者拒绝
  • n(number)报告匹配到的次数而不替换,可以用来查询匹配次数

:1,6 s/self/size/g(范围内的使用方式)


如何保存自己写的文档

在写完代码或者文档以后,使用<:w 文件名.txt>储存文件里(注意一般C盘里会生成swp的文件)所启动盘符的位置


如何使用vim新建文件

新建文件<:new 文件名.后缀>

新建完成后注意使用:w保存否则直接关闭不会产生文件,如果录入了内容,关闭时会提醒你保存


如何打开文件

一、 打开文件<:e 文件名>注意:可以使用tab键进行文件夹名称和文件名称的自动补全,可以多次按tab,直到找到需要的。

如何使用vim去打开一个文件

vim file1

二、

vi flname1 flname2
可以同时打开多个文件;
只打开一个文件时,操作结果和``":e"``命令相同。

三、 <:split> `文件``会将当前窗体分为多个区域,在新的区域打开文件。

四、 ":tabnew 文件名“," : tabe 文件名”

外部命令

:! cmd 执行外部命令。
:!! 执行上一次的外部命令。
:sh 调用shell,用exit返回vim。
:r !cmd 将命令的返回结果插入文件当前位置。
:m,nw !cmd 将文件的m行到n行之间的内容做为命令输入执行命令。


文件之间的切换

先使用``":ls"``查看已经打开的文件列表和编号,
然后使用``":e#编号"``切换需要编辑的文件。
在``:ls``中各文件的编号在未离开vim前是不会变的;<br>这可以切换到a.txt进行编辑。



概念:

Buffer: 内存缓冲区

Window: Buffer的可视化分割区域

Tab: 组织Window为一个工作区

补全命令

:ls 列举当前缓冲区

:b [num] 跳转到[num]缓冲区

:b [name] 跳转到[name]缓冲区

:bpre/bnext/bfirst/blast 跳转到上一个/下一个/第一个/最后一个缓冲区

:e [name] 打开[name]文件

窗口分屏操作

窗口分屏

Ctrl(首先进行分屏操作)

垂直分割(:vs)

水平分割(: sp)

ctrl + w 在窗口之间切换和移动

以使用快捷键操作下面的内容:

C-w s 水平分割窗口

C-w v 垂直分割窗口

C-w w 循环切换窗口

C-w h/j/k/l 切换到←/↓/↑/→窗口

C-w H/J/K/L 移动当前窗口向←/↓/↑/→

C-w = 所有窗口等宽高

C-w _/| 当前窗口最大化高度/宽度

[num]C-w _/| 当前窗口高度设为[num]行/列

Tab(标签页)将窗口分组

:tabnew 新建标签页

:tabe [name] 在新标签页打开[name]文件

:tabc 关闭当前标签页和窗口

:tabo 只保留当前标签页并关闭其他的

C-w T 将当前窗口移动到新标签页

:tabn [num] 切换到[num]标签页,没有[num]表示下一个

[num]gt 同上

:tabp 切换到上一个标签页

gT 同上


修改文件名称

操作命令是:":f 新的文件名称"

:f` `新的文件名称

保存和退出

write命令
对文件进行保存
:w保存不退出
:q`退出文件:wq保存并退出``:q``! 不保存并退出``:x` `退出,如果文件更改则保存``shift + ``Z` `+``Z` `退出,如果文件更改则保存(按住Shift,再按两次z)


使用<:qa>可以退出到shell


另存为

:saveas 另存为名称.txt

Vim系统的帮助

vim帮助

  • 进入 vim 之后,是普通模式

  • 输入 : 进入 命令行 模式

  • 有命令不会就使用

    :help
    
    • 或者直接用功能键 F1

    • 比如说 :qa 不会

    • :help 这个 :qa

    • 输入 :help :qa

    • :help 的对象是 :qa,中间留了一个空格

    • 回车 之后执行命令

    注意可以用 :q 先退出当前帮助

    :help命令有两种写法

    • 完整 :help
    • 简写 :h
  • 正常模式

    (Normal mode)
    
    • 也叫默认模式。
    • 进入 vim 时默认的模式所有输入的键都直接对应着命令
    • 也被叫做命令模式.
  • 插入模式

    (Insert mode)
    
    • 任何键盘录入都会插入到当前文档中
  • 可视模式

    (Visual mode)
    
    • 很像正常模式
    • 但是移动命令会改变选中的一块高亮区域
    • 执行的命令会对选定范围进行
  • 选择模式

    (Select mode)
    
    • 可以用鼠标或光标键高亮选择文本
    • 任何输入都会替换选择的高亮文本
    • 并进入插入模式
  • 命令行模式

    (Command-Line mode)
    
    • 可以窗口下方执行一条命令
    • 一般是通过 : 执行单行命令
    • 通过 / 和 ? 进行搜索
  • Ex mode

    (多行命令执行模式)
    
    • Ex 指的是 Execute
    • Normal 正常模式下使用 gQ 进入
    • 使用 :visual 退出

查看当前文件的信息

使用:file 可以在状态栏看到当前文件的信息

如何使用键盘跳转vim所打开的文件中的链接

使用光标或者键盘那移动到链接上使用<ctrl + ] >就可以跳入链接。

使用 <ctrl + o >可以跳出链接,回到原位置


注意(退回到命令模式)

按 esc 或 ctrl+c 退回到命令模式

尽量使用 ctrl+c


重复的插入

使用i进入插入模式以后输入相关内容。

再使用ctrl + c退回到正常模式 按下.可以重复刚才的操作。

撤销插入的内容

使用 < u >可以撤销操作

  • 在正常状态下按 ctrl+r 可撤销撤销操作
  • i 在当前的光标之前插入

  • I 在本行文本的最前面插入

  • A 在本行 最后 插入

    • a 在当前光标之后插入

    • . 重做

    • u 撤销

    • ctrl+r 还原

插入:

i是在光标所在的字符之前插入需要录入的文本。

I 是在光标所在行的行首插入需要录入的文本。

a 是在光标所在的字符之后插入需要录入的文本。

A 是在光标所在行的行尾插入需要录入的文本。

o 是光标所在行的下一行行首插入需要录入的文本。

O 是光标所在行的上一行行首插入需要录入的文本。

s 删除光标所在处的字符然后插入需要录入的文本。

S 删除光标所在行,在当前行的行首开始插入需要录入的文本。

  • ia 都是 Insert mode commands

  • 插入位置

    • ibefore cursor 在光标前插
    • aafter cursor 在光标后插
  • 对应命令

    • i 意思是 insert
    • a 意思是 append

    • 区别:

    • i 在当前的光标之前插入

    • I 在本行文本的最前面插入

    • A 在本行文本 最后 插入

      • a 在当前光标之后插入
  • o 本行下方插入一个新行
  • O 本行上方插入一个新行

注意跳转到行首是使用^,跳转到行尾是使用$

跳到某行

首行是

尾行是

2G 跳到第2行

3G 跳到第3行

4G 跳到第4行

gg 跳到第一行

G 跳到最后一行

set显示行号

:set number 是显示行号
set 是命令,可以设置各种属性

number 是 :set 的参数 option

使用:set nonumber关闭number,不显示行号

简写

:se nu

se nonu

显示相对行号

:set relativenumber

相对行号简写

set relativenumber 简写 se rnu

set norelativenumber 简写 se nornu

使用命令的模式跳转

:30 跳到 第30行

:40 跳到 第40行

:999 跳到末尾,如果总长度没有999.的话

查看当前文件有多少行

:f[file]

或者 ctrl + g

配置文件

首先打开原来的配置文件,~代表用户文件夹

vi ~/.vimrc

可以用/statusline找到状态条的写法

各种实用开关

  • set number 显示行号
  • set relativenumber 显示相对行号
  • set cursorline 光标所在的当前行高亮
  • set cursorcolumn 光标所在的当前列高亮
  • set nocompatible 使用 vim 模式,不与 Vi 兼容
  • syntax on 打开语法高亮
  • set showmode 在底部显示,当前所处模式
  • set showcmd 命令模式下,在底部显示键入指令
  • set mouse-=a 纯键盘操作
  • set encoding=utf-8 使用 utf-8 编码
  • set autoread 硬盘文件变化后,自动读取
  • 把上述这些存储到 ~/.vimrc 之后,以后这些配置就会自动起作用了
  • 也可以去 github 搜索 .vimrc 找到关于配置的更多信息

复制

命令是 :y对应的单词是yank

  • 找到一行 然后进行yy操作

  • 观察:reg发现这一行已经进入了寄存器

  • 找到一个合适的地方

    p

    • 可以把寄存器里面的内容放到当前行下面

vim 分屏操作

使用组合键 ctrl + w s 这个命令就是上下分割当前打开的文件

按住冒号:,接着输入sp,在键入文件名,如下:

:sp file

上面这个命令将会上下分割当前文件和新打开的file

同样使用组合键 ctrl + w ,然后按下v

ctrl +w v

上面这个命令将会左右分割当前的文件

按住冒号 : ,接着输入vsp,在键入文件名称,如下

:vsp file

上面的这个命令将会左右分割当前打开的文件 和新打开的文件file

分屏以后如何在文件之间切换光标,和移动分屏:

1、切换左右分屏的光标:

ctrl + w h

将当前光标定位到左边的屏幕

ctrl + w l

将当前的光标定位到右边的屏幕

2、移动左右分屏:

ctrl + w H

将当前的分屏移动到左边

ctrl + w L

将当前的分屏移动感到右边

3.切换上下分屏的光标 :

Ctrl + w j

将当前的光标移动到下面的分屏

Ctrl + w k

将当前光标移动到上面的分屏

4.移动上下分屏:

Ctrl + w J

将当前的分屏移动到下面的分屏

Ctrl + w K

将当前的分屏移动到上面的分屏

如何关闭分屏呢?

Ctrl + w c

上面这个命令是关闭当前的分屏

Ctrl + w q

上面的这个命令也是关闭当前的分屏,如果是最后一个分屏将会退出 VIM 。

vim分屏打开不同的文件

vim -On [FILE_1] [FILE_2] ...
vim -on [FILE_1] [FILE_2] ...

-O:垂直分割(vertical)
-o: 水平分割(默认horizontal)
n: 表示分几个屏,可以缺省不写,默认按后面要分割的文件数来决定分几个屏
[FILE_1][FILE_2]: 需要打开文件

查找文本中匹配的目标字符串

查找字符串</{目标内容}>

查到以后,输入键盘上的 n 会去寻找下一个匹配,N 会去寻找上一个匹配。

:set noic
该命令用来区分大小写的查询。

该命令用来区分大小写的查询。

删除多行文本

:n1,n2d

n1和n2指的是起始行号和结束行号,d是删除关键字

vim处理文本的替换

:{作用范围}s/{目标}/{替换}/{替换的标志}
:s/zempty/handsome/g

将会把当前光标所在行的 zempty 替换成 handsome

:%s/zempty/handsome/g

将会把全文中的 zempty 替换成 handsome

:n1,n2s/zempty/handsome/g

这里的 n1 和 n2 值得是行号,将会替换掉 n1 到 n2 的所有 zempty 为 handsome.

vim的复制、粘贴、删除

三个重要的快捷键 d , y , p

d 是删除的意思,通常搭配一个字符 ( 删除范围 ) 实现删除功能,常用的如下:

dw 删除一个单词

dnw 删除 n 个单词,

dfa 删除光标处到下一个 a 的字符处( fa 定位光标到 a 处 )

dnfa 删除光标处到第 n 个 a 的字符处

dd 删除一整行

ndd 删除光标处开始的 n 行

d$ 删除光标到本行的结尾

dH 删除屏幕显示的第一行文本到光标所在的行

dG 删除光标所在行到文本的结束

y 是复制的意思,通常搭配一个字符(复制范围)实现复制的功能,常用的如下:

yw` 复制一个单词,还有 `ynw
yfa` 复制光标到下一个 a 的字符处,还有`ynfa
yy` 复制一行,还有 `nyy

y$ 复制光标到本号的结尾

yH 复制屏幕显示的第一行文本到光标所在的行

yG 复制光标所在行到文本的结束

pP是黏贴的意思,当执行完复制或者黏贴的命令以后,VIM 会把文本寄存起来。

p 在光标后开始黏贴

P 大写的 P 光标前开始粘贴

撤销操作和恢复

u 撤销刚才的操作

ctrl + r 恢复撤销操作

删除字符操作和替换

x 删除光标当前所在的字符

r 替换掉光标当前所在的字符

R 替换掉从光标开始以后的所有字符,除非 <ESC > 退出,或者 jj (代替 上文有提到)退出。

重复命令1

VIM 的重复命令

. 该命令是重复上一个操作的命令
n重复某个命令 n 次,
如 10p复制 10 次,10dd 删除十次。

代码提示功能

在编辑模式下 ,快捷键 Ctrl+n 或者 Ctrl+p 会有代码提示功能,我们可以实现快速录入的效果。

宏录制和使用

VIM 的宏录制

假设需要操作的文本如下,需要将如下文本的每一行的行首插入入一个 tab 键。

hello
hello world
hello world , vim
宏录制的录制操作

先将光标移动到第一行,在普通模式下按下 q 键(宏录制是 q 键启动的),在按一个 a (字母随意),表示该宏注册为 a ,按下 I 在行首插入一个 tab 键,按下jj或者 退出编辑模式,按下 j 将光标移动到下一行行首,最后按下 q 键完成录制操作(宏录制是 q 键结束的)。
总结上面例子的操作流程:
q → a → I → tab → jj → j → q
上面的例子成功地把在行首插入 tab 的功能录制了下来,那么如何应用到其他行呢?

宏录制的使用

上述的例子,在正常模式下,按 @a执行宏录制的一系列动作,将会在第二行执行插入 tab 。
@@ 是对上一次宏使用的重复操作。n@a 就会执行 n 次一系列的动作。使用宏录制可以一次执行一系列的操作,可以针对一些重复度较高的操作进行宏录制。

可视化模式下 v 的特殊操作

当操作的文本光标在 “”,‘’ ,(),{} ,[(双引号,单引号,小括号,大括号,中括号)
当中的时候,可以通过 va"选中 ”“ 内的所有内容包括双引号 ,vi" 选中 "" 内的所有内容,不包括 ""。va,vi 会快速选择区域,va 后面会紧跟一个区域结束标志,a 会选中结束符标志,i 就不会。例子如下:

"hello world [VIM is so strong],{we all can master vim skill}"

假设当前光标定位在上面的文本 M 处:
va] 操作将会选中以下文本(加粗部分):
“hello world[VIM is so strong]*,{we all can master vim skill}“
vi] 操作将会选中如下的区域,没有包含 []:
“hello world [
VIM is so strong*],{we all can master vim skill}“

vim如何与外界粘贴复制

\1. 用vim 打开一个文件,然后执行命令:reg 查看是否有 + 或者 × 号 或者执行:version 命令 查看是否有+clipboard

如果存在:

   则可以使用 “+y 将vim 里面的内容复制到系统剪贴板或者 +p 将系统剪贴板里面的内容复制到vim 里面

 如果不存在:

   则需要安装vim-gnome, 然后就可以用以上命令粘贴复制

\2. 可以在 /etc/vim/.vimrc 里面设置 clipboard=unnamedplus 这样就可以直接使用 y p命令直接粘贴复制了

vim[命令](Vim使用笔记 - JollyWing - 博客园 (cnblogs.com))

  • :pwd 显示vim的工作目录。

  • :cd path 改变vim的工作目录。

  • :set autochdir 可以让vim 根据编辑的文件自动切换工作目录。

  • 执行外部命令:


  • :! cmd 执行外部命令。(这里的命令指的是例如Windows的命令提示符)

  • :!! 执行上一次的外部命令。

  • :sh 调用shell,用exit返回vim。

  • :r !cmd 将命令的返回结果插入文件当前位置。

  • :m,nw !cmd 将文件的m行到n行之间的内容做为命令输入执行命令。

快速删除

  • :使用 a/i/o等命令进入插入模式
  • :ctrl + h 删除上一个字符
  • :ctrl + w 删除上一个单词
  • :ctrl + u 删除当前行(这个与
    是一样的效果)
  • :
  • :
  • :
  • :快速切换模式的快捷键 :ctrl + c 或者 ctrl + [ 这两个可以
  • :A keyboard is recommended here poker2

quick travel

h,j,k,l(左,下,上,右)

  • :
  • :
  • :
  • :
  • :
  • :
  • :
  • :
  • :
  • :
  • :
  • :

vim的文本概念:

什么是vim的text object

vim的文本对象(text object)

[number][text object]

number表示次数,command是命令, d(elete), c(hange), y(ank)

text object是要操作的文本对象, 比如单词w,句子s,段落p

主要使用的有iw, inner word, 如果使用viw,那么v进入选择模式,iw选择当前单词

aw 表示around word,不但会选中当前单词,还会包含当前单词之后的空格。

vim里文本的对象概念,比如一个单词,一段句子,一个段落

文本对象的操作方法:比如(删除一个单词:dw)

例如:iw表示inner word,如果键入viw命令,那么首先v将进入选择模式,然后iw将选中当前单词。

aw表示 a word ,它不但会选中当前单词,还会包含当前单词之后的空格。

增加练习题:在vim尝试使用文本对象快速增删改查。

vim 的复制粘贴与寄存器的使用

  1. 全部删除:按esc键后,先按gg(到达顶部),然后dG.
  2. 全部复制:按esc键后,先按gg,然后ggyG.
  3. 全选高亮显示:按esc键后,先按gg,然后ggvG或者ggVG.
  4. 单行复制:按esc键后,然后yy.

normal模式下的复制粘贴分别是使用y(yank)和p(put),剪贴d和p

例如配合文本对象:比如使用yiw复制一个单词,yy复制一行

Insert模式下的复制粘贴

vimrc设置autoindent,可以自动缩进,但粘贴python代码会格式混乱

这个时候使用:set paste 和:set nopaste解决

:set clipboard=unnamed 直接使用系统剪切板

"+y/p 复制粘贴系统剪切板内容

" 可以调用vim 寄存器,可以自行命名,如"ay 即复制至寄存器a

输入ctrl+r,再按 +, 可在insert模式插入系统剪贴板内容

:e! 重新加载当前打开文件

:set paste

:set nopaste

"+ p 粘贴系统中的

insert 模式下 ctrl +粘贴系统剪切板

vim里操作的是寄存器 而不是系统剪贴板。

这里默认使用d删除或者y复制的内容都放到了“无名寄存器”

用X删除一个字符放到无名寄存器,然后p粘贴,可以调换俩字符

vim宏(macro)

vim使用q来录制,同时也是q结束录制

使用q{register}选择要保存的寄存器,把录制的命令保存其中

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

例子:选取一段文本(比如个所有的段落加上双引号)首先使用q开始录制,使用a作为寄存器的名称。出现@a以后

使用I在段落首部写入“——然后使用A在段落尾部写入”

完成操作以后按下q结束录制

选中下一行,使用@a执行操作

如果要全部都执行,就全部选中段落。

:‘<,'>normal @a

这样就是给所有的段落加上了双引号。

比如给所有行加上双引号,先按qa进入宏模式,然后输入I跳到行首输入“然后按ESC,然后再按A跳到行尾输入”,然后按ESC,然后按q结束宏录制。然后按V选中想要操作的行,然后按:进入命令行模式,接着输入normal @a

使用V和G选中所用行,使用:进入命令模式输入:'<,'>normal I"回车就会在所有的行首加上双引号。同理把I改成A也可以在行尾加入。

vim的补全

vim补全大法

什么是补全

  • 补全是根据当前环境上下文有编辑器【猜】你想输入的东西

  • 比如补全一个单词、文件名、或者代码中的函数名、变量名

  • vim中提供了多种补全功能,还有由插件拓展功能实现代码补全

vim中常见的补全

vim中有很多种补全方式

| 命令 | 补全类型 |

| ------ | ---------- |

| <C-n> | 补全关键字 |

|<C-x><C-n>|当前缓冲区关键字|

|<C-x><C-i>|包含文件关键字|

|<C-x><C-j>|标签关键字|

|<C-x><C-k>|字典查找|

|<C-x><C-l>|整行补全|

|<C-x><C-f>|文件名补全|

|<C-x>|全能(Omin)补全|

常见的三种补全类型

  • 使用Ctrl+n和Ctrl+p补全单词

  • 使用Ctrl+x,Ctrl+f补全文件名

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

给vim更换配色

使用:colorscheme显示当前的主题配色,默认是default

  • 用:colorscheme <ctrl + d>显示所有配色

    {blue default desert evening koehler murphy peachpuff shine torte
    darkblue delek elflord industry morning pablo ron slate zellner}

  • 找到用中意的配色后,用:colorscheme配色名,就可以修改颜色

  • 网上下载配色:

    (https://github.com/flazz/vim-colorschemes)

    安装之后就有大量的主题可以更换了

    下载到本地,解压。

    hybrid.vim 文件移动到 ~/.vim/colors(如果没有这个目录的话,使用mkdir ~/.vim/colors -p先创建。)

    回到第一步,进行切换主题

    可以下载多个配色到 ~/.vim/colors即可随时更换

    如果需要持久化配置,则需要写的 vimrc

配置vim

Windows配置:

我的配置文件位置“C:\Users\26411\AppData\Local\nvim”

windows下如何找到init.vim的配置文件:

**打开 Neovim,使用 <:echo stdpath ('config')>可以查看该目录的具体位置。

vim & neovim 的默认配置文件
一般来说:
vim的默认配置文件地址:~/.vim/vimrc (如果没有就自己创建)
Neovim的默认配置文件地址:~/.config/nvim/init.vim (如果没有就自己创建)

windows下如何找到init.vim的配置文件:

**打开 Neovim,使用 <:echo stdpath ('config')>可以查看该目录的具体位置。

在以上文件中的配置,只会对当前用户文件生效,也就是 “~/” 目录下
在命令行中输入nvim --version得到以下结果

PS C:\Users\26411> nvim --version
NVIM v0.7.0
Build type: RelWithDebInfo
LuaJIT 2.1.0-beta3
Compiled by runneradmin@fv-az320-113

Features: -acl +iconv +tui
See ":help feature-compile"

system vimrc file: "$VIM\sysinit.vim"
fall-back for $VIM: "C:/Program Files/nvim/share/nvim"

Run :checkhealth for more info
PS C:\Users\26411>

如何编写自己的vim配置文件

Linux/Unix下新建一个隐藏文件vim ~/.vimrc

  • windows系统vim $MYVIMRC,通过环境变量编辑配置文件
  • nvim在windows系统下的配置文件路径:C:\Users\26411.config\nvim\init.vim
  • ~/.config/nvim/init.vim

常用的vim配置

  • 常用设置,比如:set nu设置行号,colorscheme hybrid设置主题

  • 常用的vim映射,比如 noremap w : w保存文件

  • 自定义vimscript函数和插件配置

  • 通过把常用的设置写入到.vimrc里避免每次打开vim重新设置

  • 比如设置行号set nu ; 设置主题 colorscheme hybird

vim映射

相关内容上网查询(慕课网)这里不做叙述。

vim映射就是把一个操作映射到另一个操作

使用map就可以实现映射。比如:map - x 然后按 - 就会删除字符

:map viw 告诉vim按下空格的时候选中整个单词

:map dd可以使用ctrl + d 执行dd删除一行

:vmap \ U 把在visual模式下选中的文本大小(u/U转换大小写)

网络小书《笨方法学Vimscript》中关于映射的章节。

安装vim插件

首先安装vim的插件管理器

junegunn/vim-plug: Minimalist Vim Plugin Manager (github.com)

找到vim插件管理器的配置文件

image-20220807090942728

找到需要的内容复制粘贴到init.vim的配置文件里。

然后找到需要的插件

放入配置文件以后退出vim重新进入

使用PlugInstall安装插件然后重启

image-20220807090719160

插件放入到call Plug#begin()

和call plug#end()之间

之后在使用PlugInstall安装插件

如何搜索插件:在GitHub或者vimawesome.com上查找

vim配色方案:

image-20220807093704274

文件目录树

如何切换盘符::NERDTree D:\

vim插件

相关内容在网上自己找到需要的插件,然后安装使用(配置快捷键和特殊功能)

安装

:PlugInstall

卸载插件

:PlugClean

注释或者删除掉配置文件中需要删除的插件然后在vim中使用:PlugClean。

插件设置文件vim的引用

source ~/.vim/snippits.vim(配置文件的位置)

posted @ 2022-10-12 23:41  junze101  阅读(43)  评论(0编辑  收藏  举报