【Linux】(vi、vim) gvim 的使用学习

Title: gvim学习

  • 前言

    实习后发现都是用 linux的;用linux很少在IDE里编程而是直接用 vim 进行编程。

    由于vim太丑,在初期我都倔强的用gedit;后来同事说,你得学着用vim,这样才显得专业 ( ̄▽ ̄)"…

    随着vim快捷键逐渐熟悉,慢慢明白vim的方便之处了~

    一般都用 gvim,好看点.

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 最基础+最核心

记住加粗的就行了…

  1. 进入文本编辑模式

    i ,从此行开始编辑;

    还有别的按法,如I,此行非空位置开始写;;
    o,在下一行换行开始写新的一行;
    O,从上一行换行开始写新的一行;
    a,从下个字符开始写;
    A,从此行末尾开始写;
    r,进入replace mode,但只覆盖后面1个字;
    R,进入replace mode,一直覆盖后面的字;

  2. 退回到命令行状态

    Esc.

  3. 保存 —— :w

    强制保存 :w!
    :w filename 另存为;
    :file1,file2 w [file3] 文件合并为…
    追加文件 :r file

  4. 关闭文件 —— :q

    强制退出不保存 :q!,也可以用 ZQ
    保存后退出 :wq,也可以用 ZZ

  5. 撤销是u;重做redo是ctrl+r

  6. 复制是y,或者ctrl+c;粘贴是"鼠标中键",或p(但p仅限于此文本内复制内容进行粘贴,“鼠标中键”支持跨文本粘贴);
    s 是剪切;

  7. 跳转到文本第一行 gg

  8. 跳转到文本末尾 G

  9. 跳到第几行 :lines

  10. 查找 /内容
    然后按 n,是下一个;
    N,是上一个;
    按两下',回到上一次跳转的位置(来回跳);

    /str\c表示不区分大小写.

  11. 自动补全

    向上查找来补全:ctrl+p

    向上查找来补全:ctrl+n

3.2 Vim的显示格式设置

每次设置太麻烦了,可以在~/.vimrc 中写,每次打开vim会自动执行;.vimrc中的注释用";在.vimrc中配置vim显示格式的话,就不需要敲冒号:了~

  1. 显示行号 :set nu
    取消显示行号 :set nonu

    要是打全,nu写number也行.

  2. 换主题 :colorscheme 款式
    我比较喜欢 desert 款式,( ̄▽ ̄)"

    没有set哈…

  3. 改字体和大小 :set guifont=款式\风格\大小
    默认字体是 :set guifont=Monospace\\10 ,风格就是加粗、斜体什么的.
    我个人喜欢 :set guifont=Monospace\\13,不然要瞎了…

  4. 识别当前语言类型为C语言来高亮 :set syntax=c
    但这个没啥用,因为其他语言需要自己网上下好高亮的语法配置文件…

  5. 设置缩进的宽度

    :set tabstop=4
    :set shiftwidth=4
    默认是8.

  6. 高亮当前行(找光标也方便)

    :set cursorline

3.3 阅读文本的小习惯

  1. 双击括号的一边,如:{},可以直接跳转到另一边;
  2. 可以用右键,来选中文本;
    选中文本后,即为进入 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;啥意思呢,是这样的:

    1. vim里的正则有个特点,很多“元字符”都是需要“手动转义”后才能具有正则的含义只有最常用的——^表行首、$表行尾、 .表1个任意字符、*表任意数量的前者字符——它们俩是不需要加转义符\,就很麻烦。这就是vim正则表达式的默认正则模式:magic mode. 手动声明,就是在正则表达式前加前缀\m

      例子:查找以 “str0"或"str1” 开头的串,正则为 /\m\<str\(0\|1\).* (其中\m可省略…)

    2. 那如果你的正则表达式语法熟练,又要用到很多元字符,一个个加转义符号超级烦,可以使用 very magic mode,在正则表达式前加前缀\v

      例子:查找以 “str0"或"str1” 开头的串,正则为 /\v<str(0|1).*

      对比一下magic mode,发现区别了吧~( ̄▽ ̄)"

    3. 所有元字符除了^$外,都按文本来翻译,就是 nomagic mode,在正则表达式前加前缀\M

    4. 只有反斜杠\才表示转义,不然统统当文本处理的正则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	#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 好的例子(个人用到的)

  • 把长空格都变成换行

    \v {1,}/\r/g	#vim中的very magic mode,把长空格都变成换行.(贪婪)
    
  • 自定义格式化文本高级替换

    从第i行到文本末尾,把 “str” 文本内容替换为 “…str…”,一行有多个就全换.

    :i,$s/str/\=printf("...%s...", submatch(0))/g	
    
  • 7
    点赞
  • 88
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值