Title: gvim学习
-
前言
实习后发现都是用 linux的;用linux很少在IDE里编程而是直接用 vim 进行编程。
由于vim太丑,在初期我都倔强的用gedit;后来同事说,你得学着用vim,这样才显得专业…
随着vim快捷键逐渐熟悉,慢慢明白vim的方便之处了~
1 介绍
-
是什么
vim是linux里的文本编辑器,但是比“记事本”(linux里是gedit)多了很多功能,而且支持很多功能、命令、快捷键,用熟了以后会大大提高文本编辑的便捷性。
-
特点
vim里进行文本查看、编辑是不同的模式:命令行模式(仅查看、输入各种功能命令)、编辑模式.
在 编辑模式,和gedit是一样的,写文本;
在 命令行模式,可以使用vim提供的各色功能,方便的完成自己想要实现的目的——正则表达式的字符串替换、查找、分屏等。( ̄▽ ̄)"- 在命令行模式,分成直接按键盘字母(大写小写功能不同)来使用快捷键功能、输入冒号
:
加指令来启动指令功能,两种办法,
另外,除去vim下的 命令模式(command-mode)、插入模式(insert-mode),vim还有 正常模式(normal-mode)——啥也没选中的正常情况、可视模式(visual-mode)——选中了一些文本的高亮情况,感觉专门称呼为一个"mode"有点随便哈…
- 在命令行模式,分成直接按键盘字母(大写小写功能不同)来使用快捷键功能、输入冒号
-
vi、vim、gvim的关系
vi是早期版本,功能有限;
vim是vi的功能丰富、特性增强版;
vim中加入gui以及更多的特性功能,就产生了gvim;
本篇全文都默认是gvim哈!
-
如何安装
gvim
?用
apt-get install vim-gtk
2 快捷键一栏图
Vim 的快捷键一栏图
-
网图1
-
网图2
3 个人使用习惯
3.1 最基础+最核心
记住加粗的就行了…
-
进入文本编辑模式
按
i
,从此行开始编辑;还有别的按法,如
I
,此行非空位置开始写;;
o
,在下一行换行开始写新的一行;
O
,从上一行换行开始写新的一行;
a
,从下个字符开始写;
A
,从此行末尾开始写;
r
,进入replace mode,但只覆盖后面1个字;
R
,进入replace mode,一直覆盖后面的字; -
退回到命令行状态
按
Esc
. -
保存 ——
:w
强制保存
:w!
:w filename
另存为;
:file1,file2 w [file3]
文件合并为…
追加文件:r file
-
关闭文件 ——
:q
强制退出不保存
:q!
,也可以用ZQ
保存后退出:wq
,也可以用ZZ
-
撤销是
u
;重做redo是ctrl+r
-
复制是
y
,或者ctrl+c
;粘贴是"鼠标中键",或p
(但p
仅限于此文本内复制内容进行粘贴,“鼠标中键”支持跨文本粘贴);
s
是剪切; -
跳转到文本第一行
gg
-
跳转到文本末尾
G
-
跳到第几行
:lines
-
查找
/内容
然后按n
,是下一个;
按N
,是上一个;
按两下'
,回到上一次跳转的位置(来回跳);/str\c
表示不区分大小写. -
自动补全
向上查找来补全:
ctrl+p
向上查找来补全:
ctrl+n
3.2 Vim的显示格式设置
每次设置太麻烦了,可以在~/.vimrc
中写,每次打开vim会自动执行;.vimrc
中的注释用"
;在.vimrc
中配置vim显示格式的话,就不需要敲冒号:
了~
-
显示行号
:set nu
取消显示行号:set nonu
要是打全,nu写number也行.
-
换主题
:colorscheme 款式
我比较喜欢desert
款式,( ̄▽ ̄)"没有set哈…
-
改字体和大小
:set guifont=款式\风格\大小
默认字体是:set guifont=Monospace\ \10
,风格就是加粗、斜体什么的.
我个人喜欢:set guifont=Monospace\ \13
,不然要瞎了… -
识别当前语言类型为C语言来高亮
:set syntax=c
但这个没啥用,因为其他语言需要自己网上下好高亮的语法配置文件… -
设置缩进的宽度
:set tabstop=4
:set shiftwidth=4
默认是8. -
高亮当前行(找光标也方便)
:set cursorline
显示光标行位置:set cursorcolumn
显示光标列位置 -
手动缩进功能的开启
set fdm=marker
-
自动对齐
set autoindent
3.3 阅读文本的小习惯
- 双击括号的一边,如:
{
、}
,可以直接跳转到另一边; - 可以用右键,来选中文本;
选中文本后,即为进入 vim的visual mode,此时按shift + v
可以选中目标的全行;按ctrl + v
可以选中目标的全列;
3.4 Vim的重要使用技巧⭐️
-
vim分屏
在vim内,用
:sp filename
实现上下分屏,用:vsp filename
实现左右分屏;用
ctrl+w, r
实现上下分屏的位置互换;用
ctrl+w,w
实现光标轮流到下一个分屏;用
ctrl+w,s
实现在当前文本内进行分屏;光标的移动,用
ctrl+w, ↑
去上分屏,去其他方向则同理;关闭此窗口,用
ctrl+w, c
,c是close;如果是ctrl + q
还有退出vim的作用。关闭其他窗口,只保留此窗口,用
ctrl+w,o
,o是only; -
统计一个文档中某个字符串出现多少次
:%s/string/&/gn # string is what I want to search
-
搜索字符串时,关闭大小写敏感
/内容\c
,主要是后面这个\c
,原来是这个意思…( ̄▽ ̄)" -
复制粘贴相关
y
是复制;p
是粘贴;
yy
是复制一行;
dd
是删除一行;
3.5 Vim 下的正则
-
前言
vim下的正则和perl内有不同,只能说相近吧,使用时注意…
此网站不错:vim Regular Expressions -
基本格式
正则表达式中,
/
是表达式分界符,也可以用#
、?
代替,其内夹着个正则表达式;
末尾加i
表忽略大小写、g
是全局匹配、m
是多行匹配。 -
重要特点
vim的正则表达式语法和perl等有些许不同,其次有个重要特点,分成了四个mode: magic mode, very magic mode, no magic mode, very nomagic mode;啥意思呢,是这样的:
-
vim里的正则有个特点,很多“元字符”都是需要“手动转义”后才能具有正则的含义,只有最常用的——
^
表行首、$
表行尾、.
表1个任意字符、*
表任意数量的前者字符——它们俩是不需要加转义符\
的,就很麻烦。这就是vim正则表达式的默认正则模式:magic mode. 手动声明,就是在正则表达式前加前缀\m
例子:查找以 “str0"或"str1” 开头的串,正则为
/\m\<str\(0\|1\).*
(其中\m
可省略…) -
那如果你的正则表达式语法熟练,又要用到很多元字符,一个个加转义符号超级烦,可以使用 very magic mode,在正则表达式前加前缀
\v
例子:查找以 “str0"或"str1” 开头的串,正则为
/\v<str(0|1).*
对比一下magic mode,发现区别了吧~( ̄▽ ̄)"
-
所有元字符除了
^
、$
外,都按文本来翻译,就是 nomagic mode,在正则表达式前加前缀\M
-
只有反斜杠
\
才表示转义,不然统统当文本处理的正则mode,是是 very nomagic mode,在正则表达式前加前缀\V
详细可以参见此blog:VIM学习笔记 4种Magic模式 —— 知乎 YYQ
-
-
通用的正则元字符与转义字符
^ #匹配字符串的“开头”;vim中则表行首; $ #匹配字符串的“末尾”;vim中则表行尾; < #匹配单词首。 > #匹配单词尾。 \b #匹配一个单词的边界。 \d #匹配任意数字。 \D #匹配任意非数字字符。 x? #匹配一个可选的 x 字符 (i.e.匹配 1次或 0次)。 x* #匹配0次或者多次 x 字符。 x+ #匹配1次或者多次 x 字符。 x{n} #匹配n个 x字符 x{n,m} #匹配 x 字符,至少 n 次,至多 m 次。 (a|b|c) #要么匹配 a,要么匹配 b,要么匹配 c。 (x) #一般情况下表示一个记忆组 (remembered group)。你可以利用 re.search 函数返回对象的 groups() 函数获取它的值。 . #匹配任意单个字符,换行符\n不算 \s #匹配所有空白符,包括换行 \S #匹配所有非空白符 \w #匹配 字母|数字|下划线 \d\D #表示任意字符,包括换行符 \s\S #也表示任意字符,包括换行符 # 以下是几个转义符 \n #1个换行符(真正的换行符实践后应该是\r,没懂) \r #1个回车符 \t #1个制表符 \f #1个换页符s # 以下vim不支持,perl才支持 # 以下是判断逻辑,需要和 () 联用, # 来截取特定情境下的串,如(?!a|b),不要字符a或字符b. # e.g. 我需要截取 aaabbbccc 中的bbb,则正则表达式为:(?<=aaa).*(?=ccc) ?!pattern #需要后面 不跟pattern的 ?!<pattern #需要前面 不跟pattern的 ?=pattern #需要后面 跟pattern的 ?<=pattern #需要前面 跟着pattern的 ?i #后面字符忽略大小写 ?-i #前面字符忽略大小写
-
vim下特有的正则元字符与转义字符
\a # 字母 \A # 除了字母都行 \i # 小写字母 \I # 除了小写字母都行 \u # 大写字母 \U # 除了大写字母都行 \x # 十六进制字符 \X # 除了十六进制字符都行 \c # 大小写不明干 \C # 大小写敏感
-
方括号[] 、圆括号()、花(尖)括号{} 的区别
方括号表示一个字符的可能:[0-3],这1个字符可以是0~3之间的任意一个数字;[(a)],表这1个字符可以是 ‘(’ 或 ‘a’ 或 ‘)’.
圆括号可表一个连续串的可能:(abc|efg|kkk),要么匹配到连续串abc、要么是efg、要么是kkk;(abc)?,表示要么匹配到完整的连续串abc,要么算了;
花(尖)括号 表示重复次数:{n,m}
-
贪婪匹配 和 懒惰匹配
同一个正则表达式,基于贪心(匹配越长越好)、懒惰(越短越好)效果不同,实施时的区分方式为:
懒惰:在元字符后加
?
;贪婪:不加
?
;
3.6 Vim下的文本替换
-
替换的基本使用
:s
,s是subtitute的意思,有 “只在此行”替换、“全文替换” 两种用法。:s #只在此行替换 :s/str1/str2/ #在此行把str1换成str2; (只替换首个) :s/str1/str2/g #在此行把str1换成str2; (替换所有) :i,js/str1/str2/g #i到j行内,把str1换成str2; (替换所有) :%s #替换全文 :%s/str1/str2/g #全文替换,把str1统统换成str2;
3.9999 好的例子(个人用到的)
-
查找字符串出现的次数
%s/串/&/gn
-
把长空格都变成换行
\v {1,}/\r/g #vim中的very magic mode,把长空格都变成换行.(贪婪)
-
自定义格式化文本高级替换
从第i行到文本末尾,把 “str” 文本内容替换为 “…str…”,一行有多个就全换.
:i,$s/str/\=printf("...%s...", submatch(0))/g
-
全文本查找含有
123331233
字符串的 行,并删除其他行。:g!/字符串/d
- 用
:g
来实现全文查找,并删除其他行,:g
后接的是“条件”; !
是条件取反,表示“不含有”;d
是删除行命令.
- 用
未整理
-
代码折叠功能:
-
先开启此功能:
:set fdm=marker
不能有空格fdm是foldmethod,是折叠方法。
主要的选择的折叠方法有:manual、indent、syntax、marker.介绍一下:
- manual,默认方法,手动用
zf
创建,然后手动控制打开或关闭折叠。关闭vim窗口,不会记录折叠的设置情况。 - indent,按照缩进,自动设计折叠。
- syntax,按照语法自动进行折叠,例如C中的花括号
{}
,但其他语言不一定支持哈。 - marker,用
zf
命令创建“折叠”后,vim会追加花括号{{{内容}}}
,来创建“折叠”信息。关闭vim后,下次打开还保留了折叠信息。
- manual,默认方法,手动用
-
简单使用:
选中代码,
zf
,创建折叠
zo,光标处,打开折叠;zO打开光标处所有折叠;
zc,光标处,关闭折叠;zC关闭光标处所有折叠;
zv,光标处折叠打开至此行可见;
zi,全部折叠打开或开启;
zd,删除光标下的所有嵌套折叠;
zr,全局递减foldlevel;zm,全局增加foldlevel;这俩不灵了说明按过头了,最大为99. foldlevel越大,说明打开的折叠层数越大,越展开。其他,见此处:[[VIM]VIM/GVIM中代码的折叠和打开](
-