购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.1 代码编辑工具:Vim

在Linux环境下编写代码有很多工具可以选择,如gedit、Eclipse、VS Code等,这些文本编辑工具相当于Windows环境下的记事本、Visual Studio、VC++6.0、C-Free等各种IDE。使用这些IDE开发程序非常方便,因为它们提供了程序的编辑、运行、调试、项目管理一条龙服务。使用IDE唯一的缺陷就是这些IDE安装文件往往很大,编译创建工程时生成的临时文件很多,略显笨重和臃肿,大量的封装虽然更易于上手,方便用户编程,但也掩盖了底层编译、调试的过程,不利于新手学习。本节主要给大家介绍一款在Linux环境下更加轻巧和高效的代码编辑工具:Vim。

Vim是一款纯命令行操作、功能可扩展、高度可定制的文本编辑工具。对于新手来说,刚接触Vim,对这种纯命令行操作的文本编辑模式可能很不适应:你可能连保存、退出都不知道怎么操作,此时鼠标也爱莫能助,怎么点也没反应,真可谓“叫天天不应,叫地地不灵”,最后干脆关掉重启。一旦过了适应期,上手用熟之后,Vim定会让你尽享其中、无法自拔:当手指在键盘上健步如飞,各种命令信手拈来,此时的你才会感受到Vim的强大功能和高效便捷。让手指跟上你思维的脚步,让节奏在你的指间恣意流淌,再配上青轴键盘那清脆的敲击声,如小溪的叮咚和山间清爽的风,让人心旷神怡。此刻的你也许才会发现,原来鼠标是多么的笨拙和多余,当你拖着鼠标满屏寻找保存、退出按钮时,你才会发现Vim的信手拈来、指随心动是多么的畅快。这种纵享丝滑的感觉会让你沉浸其中、爱不释手,如果再搭配各种插件的安装使用、各种快捷命令的按键映射、各种得心应手的配置,我们可以把Vim打造成类似Source Insight的IDE。

接下来我们就开始Vim入门之旅吧!

1.1.1 安装Vim

在Linux环境下,使用Vim之前首先要安装。虽然现在大多数UNIX、GNU/Linux操作系统默认已安装Vim,但也有一些操作系统,如Ubuntu,系统自带的默认文本编辑工具是Vi,或者Vim默认运行的是Vi的兼容模式,方向键和退格键不能用。Vi是visual interface的简写,以前系统编辑文本都使用行编辑器ex命令,后来才有了Vi工具,作为ex的可视化操作接口,可以直接可视化编辑文本,比使用纯命令行处理文本方便了很多,在Vi下输入Q可进入ex模式,在ex模式下输入Vi同样会进入Vi模式。Vi也有很多不完善的地方,如只能单步撤销、不能使用方向键等,所以就出现了Vi的加强版:Vi Improved,即Vim。Vim针对Vi做了很多改进,如增加了多级撤销、多窗口操作、关键字自动补全等功能,甚至可以通过插件来扩展和配置更多的功能。

在Ubuntu环境下安装Vim很简单,如果你的Ubuntu操作系统是联网的,直接在Shell命令行下敲击下面的命令即可完成安装。

上面的apt-get安装命令使用#开头,表示当前命令是以root权限运行的;如果命令前使用$ 开头,表示当前命令是以普通用户权限运行的。

不同的Linux/UNIX操作系统,Vim安装命令可能不太一样,如在Fedora或macOS下面,我们可以使用下面的命令安装Vim。

安装好之后,在Shell命令行下输入:vim。如果安装成功,就会启动Vim并弹出一个Vim界面,显示Vim的版本号。当然,我们也可以直接使用下面的命令查看Vim的版本号。

接下来,就可以直接使用Vim来编辑和浏览程序代码了。

1.1.2 Vim常用命令

Vim有多种工作模式,不同的工作模式之间都可以通过命令来回切换,这会让我们浏览和编辑代码非常方便和贴心。Vim常见的工作模式如下。

● 普通模式:打开文件时的默认模式,在其他模式下按下ESC键都可返回到该模式。

● 插入模式:按i/o/a键进入该模式,进行文本编辑操作,不同之处在于插入字符的位置在光标之前还是之后。

● 命令行模式:普通模式下输入冒号(:)后会进入该模式,在该模式下输入命令,如输入:set number或:set nu可以显示行号。

● 可视化模式:在普通模式下按v键会进入可视化模式。在该模式下移动光标可以选中一块文本,然后可以进行复制、剪切、删除、粘贴等文本操作。

● 替换模式:在普通模式下通过光标选中一个字符,然后按r键,再输入一个字符,你会发现你输入的字符就替换掉了原来那个被选中的字符。在该模式下进行文本替换很方便,省去了先删除再插入这种常规操作。

要想将Vim玩得熟,玩得得心应手,一些常用的基本命令是必须要掌握的。很多新手很不习惯使用命令,或者没有掌握好常用命令,在Vim环境下用鼠标乱点,发现根本解决不了问题,一切尝试都是徒劳的。其实Vim的命令很简单,笔者给大家总结了一下,只要掌握了光标移动、文本的插入、删除、复制、粘贴、查找、替换、保存和退出等基本操作,就可以熟练使用Vim编辑文本了。

光标的移动,就是当我们浏览和插入代码时,光标在屏幕中的定位移动。Vim支持不同粒度的光标移动,如单个字符移动、单词移动、屏幕移动等。Vim常见的光标移动命令如下。

1.单个字符移动

● k:在普通模式下,敲击k键,光标向上移动一个字符。

● j:在普通模式下,敲击j键,光标向下移动一个字符。

● h:在普通模式下,敲击h键,光标向左移动一个字符。

● l:在普通模式下,敲击l键,光标向右移动一个字符。

2.单词移动

Vim还支持以单词为单位的光标移动。常见的移动命令如下。

● w:光标移动到下一个单词的开头。

● b:光标移动到上一个单词的开头。

● e:光标移动到下一个单词的词尾。

● E:光标移动到下一个单词的词尾(忽略标点符号)。

● ge:光标移动到上一个单词的词尾。

● 2w:指定移动光标2次移动到下下个单词开头。

3.行移动

Vim支持行粒度的光标移动,当我们的光标需要在一行进行移动时,可以使用下面的命令。

● $:将光标移动到当前行的行尾。

● 0:将光标移动到当前行的行首。

● ^:将光标移动到当前行的第一个非空字符。

● 2|:将光标移动到当前行的第2列。

● fx:将光标移动到当前行的第1个字符x上。

● 3fx:将光标移动到当前行的第3个字符x上。

● %:符号间的移动,在()、[]、{}之间跳跃。

4.屏幕移动

当我们进行长距离、大范围的光标移动时,使用上面的命令可能比较麻烦,要不停地重复按某个键若干次。Vim同样提供了大范围的光标移动命令给我们使用。

● nG:光标跳转到指定的第n行。

● gg/G:光标跳转到文件的开头/末尾。

● L:光标移动到当前屏幕的末尾。

● M:光标移动到当前屏幕的中间。

● Ctrl+g:光标查看当前的位置状态。

● Ctrl+u/d:光标向前/后半屏滚动。

● Ctrl+f/b:光标向前/后全屏滚动。

通过光标移动,我们可以定位要插入或删除的文本位置。接下来,我们就可以通过一些文本命令进行文本的插入、删除等操作了。

5.文本的基本操作

● i/a:在当前光标的前或后面插入字符。

● I/A:在当前光标所在行的行首或行尾插入字符。

● o:在当前光标所在行的下一行插入字符。

● x:删除当前光标所在处的字符。

● X:删除当前光标左边的字符。

● dw:删除一个单词。

● dd:删除当前光标所在处的一整行。

● 2dd:删除当前光标所在处的一整行和下一行。

● yw:复制一个单词。

● yy:复制光标所在处的一整行。

● p:粘贴,注意是粘贴到光标所在处的下一行。

● J:删除一个分行符,将当前行与下一行合并。

6.文本的查找与替换

● /string:在Vim的普通模式下输入/string即可正向往下查找字符串string。

● ?string:反向查找字符串string。

● :set hls:高亮显示光标处的单词,敲击n浏览下一个。

● s/old/new:将当前行的第一个字符串old替换为new。

● s/old/new/g:将当前行的所有字符串old替换为new。

● %s/old/new/g:将文本中所有字符串old替换为new。

● %s/^old/new/g:将文本中所有以old开头的字符串替换为new。

7.文本的保存与退出

● u:撤销上一步的操作。

● q:若文件没有修改,则直接退出。

● q!:若文件已修改,则放弃修改,退出。

● wq:若文件已修改,则保存修改,退出。

● e!:若文件已修改,则放弃修改,恢复文件打开时的状态。

● w!sudo tee%:在Shell的普通用户模式下保存root读写权限的文件。

在Ubuntu环境下,在Shell的普通用户模式下,一般只能修改/home/$(USER)/目录下的文件。如果你想使用Vim修改其他目录下的文件,则要使用sudo vim xx.c命令,或者先切换到root用户,再使用Vim打开文件即可。如果在普通用户模式下忘记使用sudo,直接使用Vim修改了文件而无法保存退出时,可使用下面的命令来保存。

%表示当前的文件名,tee命令用来把缓冲区的数据保存到当前文件,这个命令会提示你输入当前用户的密码,输入密码后选择OK确认,然后这个命令就可以提升权限,将你的修改保存到文件中。

1.1.3 Vim配置文件:vimrc

Vim支持功能扩展和定制,用户可以根据自己的实际需求和使用习惯灵活配置Vim。当用户使用Vim打开一个文本文件时,默认是不显示行号的。如果想显示行号,则可以在命令行模式下输入:set nu命令。当然,也可以将这个命令写入Vim的配置文件。这样做的好处是,当用户使用Vim打开文件时,就不用每次都输入显示行号的命令了。我们可以通过vim--version命令来查看Vim配置文件的路径。

Vim配置文件分为系统级配置文件和用户级配置文件。用户级配置文件只对当前用户有效,一般位于$HOME/.vimrc和~/.vim/vimrc这两个路径下,而系统级配置文件则对所有用户都有效,一般位于/etc/vim/vimrc路径下。

当用户在Shell下输入vim命令打开一个文件时,Vim首先会设置内部变量SHELL和term,处理用户输入的命令行参数,如要打开的文件名和参数选项,然后加载系统级和用户级配置文件,加载插件并执行GUI的初始化工作,最后才会打开所有的窗口并执行用户指定的启动时命令。

我们可以将显示行号的命令:set nu保存在$HOME/.vimrc文件中,保存成功后,在当前用户模式下我们再使用vim命令打开一个文本文件时,就可以直接显示行号了。除此之外,我们还可以在这个vimrc文件中添加其他配置(其中"为注释行)。

1.1.4 Vim的按键映射

在Windows环境下面处理文本时,我们经常使用一些快捷键来提升工作效率,如Ctrl+c、Ctrl+x、Ctrl+v组合键分别代表复制、剪切和粘贴。在Vim环境下我们也可以通过按键映射设置一些快捷键来提升处理文本的效率。Vim提供的map命令可以帮助我们完成这一功能,如表1-1所示。

表1-1 不同工作模式下的按键映射命令

Vim有多种工作模式,通过map命令不同的组合形式,可以在不同的工作模式下完成按键的映射操作。我们的键盘上除了常见的字符键、数字键,还有一些功能键和辅助键,通过功能键、辅助键和字符键构成的组合按键,可以映射我们自定义的一些命令。常用的一些功能键、辅助键如表1-2所示。

表1-2 常用的一些功能键、辅助键

现在的IDE一般都支持括号自动补全功能:在我们编写程序的过程中,当遇到小括号、中括号、大括号这些字符时,IDE一般都会自动补全,并将光标移动到括号中,方便用户继续输入字符。在Vim的插入模式下,我们通过按键映射,同样可以实现括号自动补全的功能。在$HOME/.vimrc中添加如下按键映射命令。

以第一个按键映射为例,当用户在Vim的插入模式下输入左中括号([)时,通过按键映射,Vim会自动补全一对中括号([]),然后通过Esc键返回到Normal模式,最后通过i键再次进入插入模式,将光标移动到中括号中,方便用户继续输入字符。大括号的按键映射也是如此,当用户输入{定义一个函数或代码块时,大括号会自动补全,回车换行,并将光标移动到下一行行首,方便用户继续输入代码。保存好.vimrc配置文件后,我们重新使用Vim打开一个文件,在插入模式下输入小括号或大括号,你会发现Vim可以自动补全了,并将光标自动移动到了括号内,方便用户继续输入。

Vim在Normal工作模式下,可以通过按键h、j、k、l来移动光标,但是在插入模式下,这些按键就不能作为方向键使用了,用户需要使用键盘中的方向键来移动光标。由于方向键的键程较远,我们的右手需要在字符键和方向键之间来回移动切换,十分不方便。为了提高输入效率,我们可以通过组合键映射,在插入模式下使用组合键Ctrl+h、Ctrl+j、Ctrl+k、Ctrl+l来移动光标。

我们在输入代码时有时还会遇到这样一种情况:如使用printf()函数打印字符串,当我们在一对小括号和双引号内输入完字符串,想移动光标到该语句的行尾时,需要多次移动光标:要么使用方向键,要么使用上面的组合键,都不是很方便。为此,我们可以通过按键映射定义一组更加快捷的光标移动命令。

当我们在一组括号或双引号内输入完字符想快速跳出括号、引号时,在Vim插入模式下快速敲击两次逗号键,就可以快速移动光标,跳到括号或引号外。如果你想快速移动两次光标,在Vim插入模式下快速敲击两次句号键就可以了。

除了通过vimrc配置文件来定制功能,Vim还支持通过插件来扩展功能。在Vim的官方网站上有很多xx.vim格式的插件供用户下载使用。如果你想通过插件来扩展Vim的功能,方法很简单:先在你的当前用户下创建一个~/.vim/plugin目录,然后将这些xx.vim格式的插件复制到这个目录,在$HOME/.vimrc配置文件里对这些插件进行配置,就可以直接使用了。有兴趣的朋友可以自行下载安装,这里就不一一赘述了。 2T1tSUwRRU5Vcoh2qehexV5e7CWcwyVCxkLk+ZAoHxYpi9uqZ0Gugr57n6JjFCKC

点击中间区域
呼出菜单
上一章
目录
下一章
×