VIM编辑器学习精简教程

Wesley13
• 阅读 451

VIM编辑器学习精简教程技术

maybe yes 发表于2015-11-13 10:26

原文链接 : http://blog.lmlphp.com/archives/154/The_streamlined_tutorial_of_learning_vim_editor  来自 : LMLPHP后院

当今的互联网公司,都流行一个风气,就是 Linux 下编程。前几年大都数程序员还都是 Windows 下编程,这几年都转过来了吗,不知道他们是失业了呢,还是坚强并痛苦的转过来了,有些担心。

先谈谈作为一个程序员对 Windows 下编程和 Linux 下编程的看法。我个人认为,Linux 纵然优秀开源,但是桌面 UI 还不够成熟稳定,各种软件也都做的比较鸡肋,使用起来是不如 Windows 的(没办法,不愿意花钱买 Mac)。由于我个人对 Eclipse 和 Zend Studio 比较熟练,虽然 Vim 也比较熟练,但还是认为在 Windows 下使用 IDE 开发速度快的多的多。如果是我个人做项目,使用自己的框架,首选 Windows + IDE。也许有人会反驳,说 Windows 跑个 Shell 都不行,开发不是很麻烦吗?其实我说的只是编程。作为一个程序员,熟练掌握 Vim 不是仅仅为了编程,更多的为了运维和管理服务器 ^_^。

在 Linux 下编程,两个最重要的东西,就是 Git 和 Vim。本文主要讲述 Vim 的实际学习应用的精简教程,阅读此文需要您略懂 Vi 的基础知识。

先说下本人的情况,我自己对 Vim 的熟练程序自认为算中上的水平,谈不上精通,但是在日常操作中不会觉得不好使,算是比较习惯 Vi 了。所以,本文就以一个比较熟练的人来讲述初学者应该会碰到的问题和以及解决这些问题必须要熟练掌握的 Vi 命令。

光标移动

如何快速的将光标移动到文件的开头处?: gg

如果快速到达文件的最结尾?: G(shift+g),这个是回到最后一行,如果回到结尾需要: $ 。

到一行的最前面: 0。

到一行的最末尾: $(会忽略结尾的空格)。

向上翻半屏:ctrl+u (某些插件情况下可能会被占用,所以还得掌握向上翻一屏)。

向上翻一屏:ctrl+b 。

向下翻半屏:ctrl+d 。(这个用的比较多)

向下翻一屏:ctrl+f 。

向上滚屏:ctrl+e 。(很好用,光标保持不动,如果没有触碰边缘的话,适合近距离翻屏)

行内运动:f+(需要寻找的字符), ; (半角分号)键下一个,, (半角逗号)键前一个,必须在使用了 ; 键之后使用 , 键才有效。行内运动特别有用。

行内运动以单词为单位:w 下一个单词, b 上一个单词。

查找,搜索

命令行搜索:/ 光标自动运动到底部,支持正则搜索,n 下一个, N(shift + n) 上一个。

相同单词高亮:shift + * (其实就是星号,不知道我为什么这样写,可能为了让人知道必须要按住 shift),需要将光标移动到某个单词上执行,n 下一个, N(shift + n) 上一个。

括号匹配:shift + % ,需要将光标移动到括号或者大括号上执行。

替换

:(冒号)进入命令模式,%s/regexp/replacement/ 全部替换。vi 的正则引擎和 PHP 有很多不同,有很多情况下想不通为什么匹配不上,所以需要多次尝试。

删除

删除一行:dd。使用 . (点号,半角句号)重复前一个动作,这个非常有用。

向后删除一个单词:dw。

向前删除一个单词:db。

复制

我一直以为复制在 VIM 里面是最难的一个,特别是没人教的时候很难摸懂。刚开始我使用 Mac 和 Linux 下的时候,使用 yy 复制一行,或者选中模式选中后使用 y 复制都是只能复制到 Vim 的寄存器剪切板里面,在其他应用中使用 ctrl + v 是不能粘贴的。如要真正的复制到系统的剪切板上面需要安装 clipboard 软件,选中后使用 "+y 复制到系统剪切板,这里就不再叙述了。

粘贴

使用 P(shift + p) 粘贴,这个动作不能在编辑模式使用。

选择

使用 v 命令进入选择模式,方向键开始选择。使用 ctrl + q 进入区块选择模式,这个也非常有用。

向后选中一个单词,进入 v 模式后,使用 w 。向前选中一个单词,使用 b。不过这里有一个边界问题比较麻烦,往往光标会占一个字符。

进入 v 模式后,使用 i + ( 选中括号里面的部分,支持大中小括号。使用 a + ) 选中括号里面的内容并且包含括号的部分。前提是光标处向外能找到括号。帮助记忆,i in,a ahead。默认只向外找到第一个括号,如果需要找到第 n 个,需要额外指定,如 i 2 { 或 a 2 }。原生 vim 是没有语法分析功能的,特别是括号的匹配,如果在注释里面含有括号的话,会导致选中或者上文提到的匹配括号不是预期结果。

缩进

缩进使用还是比较频繁的,特别是写代码的时候,一般都是选中后,使用 shift + > 向后缩进,使用 shift + < 向前缩进,一般缩进都不是一次动作就能完成的,需要配合使用 . 重复上一次的动作,这个很重要。

快速的格式化代码,可以选择代码后,按下 = 号,这样可以更快的缩进代码。

分屏

我觉得分屏也是很重要的,但是我用的不多(可能是我屏幕不够大),个人习惯通过 b+数字的方式来切换文件,有些人习惯分屏。使用: sp 横向分屏,使用: vsp 纵向分屏。

帮助记忆

Vi 里面很多的命令,我觉得想不出很合适的英文单词来记忆。但是部分命令的还是可以找到比较合适的单词的。比如 w(walk), b(back), d(delete), d(down) 。

尾声

计算机是一门实践性质的科学,光看文章和理论上的东西是没有什么意义的。VI 要用的好需要特别的熟练,熟练就需要大量的练习。市面上有很多开源的 VIM 插件,用起来有点类似 IDE 的性质,但是做的好的不多,原因就是众口难调,所以,每个人都需要一套自己的 VIM。

作为技术人员,多一些交流会很有好处。很多技术都不愿意与人交流,特别是不愿意与技术人员交流,生怕别人学走他那一套,倒是喜欢和不懂技术的人,特别是妹纸长篇大论,这在上海的互联网公司普遍存在。很多东西虽然简单,但是你不知道就是不知道,但人家并不认为你不知道。前段时间一同事看到我使用 fg 命令后打开了 VI 编辑器,他问我是怎么弄的。后来交流了之后,我才知道他每次都是另外开一个 Tab 来编辑文件的。

本人写文字都是抽空写的,很多时候一篇文章会断断续续写了好多天,很多地方写的会有遗漏,本文以后还会更新。

补充应用场景

宏录制,使用宏录制简化 :Gblame 操作。达到 @g 打开 Gblame 窗口并且光标保持在当前窗口; @c 关闭 Gblame 窗口。这样可以很方便的查看代码的作者和更新日期。

按下 qg,进入宏记录模式,然后 :Gblame 回车,然后 Ctrl+w ,然后方向键 l 移动光标到右边窗口,然后按下 q 结束录制。达到 @g 的效果。同样使用 qc 开始录制, :bd 回车或者 Ctrl+w 然后 c 关闭 Gblame 窗口达到 @c 效果。

注释代码,使用块编辑模式注释文本,比如配置文件,代码什么的。使用 IDE 有个不好就是不同的 IDE 快捷键盘方式不一样,下面使用 VIM 块操作实现注释。

Ctrl + v 或者 Ctrl + q 进入块模式, 0 到达行首,h 键向下选择,当选择完需要注释的行后,按下 Shift + i 进入编辑模式,将第一行的行首加上 // 或者 #,按下 Esc 退出编辑模式,这个时候您发现刚刚选择的所有行的行首都加上了注释了。这个操作对配置文件的编辑或者代码的编辑非常有用。

VIM编辑器学习精简教程

阅(695)评(0)查看评论

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Wesley13 Wesley13
3年前
PPDB:今晚老齐直播
【今晚老齐直播】今晚(本周三晚)20:0021:00小白开始“用”飞桨(https://www.oschina.net/action/visit/ad?id1185)由PPDE(飞桨(https://www.oschina.net/action/visit/ad?id1185)开发者专家计划)成员老齐,为深度学习小白指点迷津。
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
3年前
Java获得今日零时零分零秒的时间(Date型)
publicDatezeroTime()throwsParseException{    DatetimenewDate();    SimpleDateFormatsimpnewSimpleDateFormat("yyyyMMdd00:00:00");    SimpleDateFormatsimp2newS
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这