自学Linux 4—Linux 环境下的编译器之 Vim 安装与基本操作使用

39 篇文章 2 订阅
2 篇文章 0 订阅

Linux 环境下的编译器

  在 Linux 环境下有很多编译器,例如基于行的编译器 edex ,基于文本的编译器 VimEmacs 等。使用文本编译器可以帮助用户翻页、移动光标、查找字符、替换字符、删除等操作。

一、Vim 使用简介

  Vivisual editor(可视化编辑器) 的简写,发音为 [vi’ai] ,是 UNIX 系统下最通用的文本编辑器,支持多种主流编辑语言。

  Vi 可以执行输出、删除、查找、替换、块操作等众多文本操作,而且用户可以根据自己的需要对其进行定制。Vi 不是一个排版程序,它不象 WordWPS 那样可以对字体、格式、段落等 其他属性进行编排,它只是一个文本编辑程序。Vi 没有菜单,只有命令,且命令繁多。

  Vi 不是一个所见即所得的编辑器,如果要进行复制和格式化文本需要手动输入命令进行操作。 安装好 Linux 操作系统后,一般己经默认安装了 Vi 编辑器。为了使用方便,建议安装 Vi 的扩展版本 Vim,它比 Vi 更强大,更加适合初学者使用。

1. Vim 的安装

  在介绍如何使用 Vim 编译器之前需要先安装 Vim 软件包,如果没有安装 Vim ,可以使用如下命令进行安装。

#apt-get install vim 					(使用apt-get命令安装vi)
Reading package lists... Done 			(检査软件包列表)
Building dependency tree... Done 		(建立依赖)
Suggested packages:
ctags vim-doc vim-scripts
The following NEW packages will be installed:	(如下软件包将被安装)
	vim												(vim软件包)
	0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.(软件包变更统计)
	Need to get 0B/745kB of archives.
	After unpacking 1438kB of additional disk space will be used. 
	Selecting previously deselected package vim.
	(Reading database . . . 83502 files and directories currently installed.) 
	Unpacking vim (from .../vim_7.0-122+letch3_i386.deb) ...	(解压vim)
	Setting up vim(7.0-122+letch3)...				(设置vin)

  在 Ubuntu 下,apt-get 工具对系统的软件包进行管理。install 选项安装会自动查找和安装指定的软件包,其命令格式为(我的 Ubuntu 在使用此命令时,需要 root 权限,所以前面要加一个命令 sudo ):

sudo apt-get install 软件包的名字(比如此次安装的 Vim)
2. Vim 编辑器的模式

  Vim 主要分为普通模式插入模式
  普通模式是命令模式,插入模式是编辑模式
  在插入模式下可以进行字符的输入,输入的键值显示在编辑框中,这些文本可以用于编辑。普通界面是进行命令操作的,输入的值代表一个命令。例如在普通模式下按 h 键, 光标会向左移动一个字符的位置。

  插入模式和普通模式的切换分别为按 i 键和 Esc 键。
  在普通模式下按 i 键,会转入插入模式;在插入模式下按 Esc 键进入普通模式。
  在用户进入 Vim 还没有进行其他操作时, 操作模式是普通模式。

二、使用 Vim 建立文件

  Vim 的命令格式为 “ vim 文件名 ”,文件名是所要编辑的文件名。例如要编辑一个“ hello.c ” 的 C 文件,按照如下所述的步骤进行操作。

1. 建立文件

  使用 Vim 建立一个新文件的命令格式为 “vim 文件名 ”。使用如下命令建立一个 hello.cC 语言源文件,并同时将文件打开。

$ vim hello.c
2. 进入插入模式

  打开文件后,默认情况下进入普通模式。按 i 键,进入插入模式,vim 会在窗口的底部显示 “ –INSERT– ”( 中文模式显示下显示的是 “ --插入-- ” ),这表示当前模式为插入模式。 在输入文本的时候,最下边有一个指示框,告诉用户正在编辑文件的—些信息,例如:

--INSERT--			6,11		All

  表示当前模式为插入模式,光标在第 6 行第 11 个字符位置上。
  新接触 Vim 的读者常常会不知道自己在什么模式下,或者不小心输入了错误的指令和错误的操作。如果遇到这种情况,无论在什么模式下,要回到普通模式只需按 Esc 键就可以了。有时会按两次 Esc 键,当 Vim 发出“嘀”的一声,就表示 Vim 已经在普通模式了。

  注释:

i : 进入插入模式,插入位置在光标前。
I : 进入插入模式,插入位置在光标所在行 行首。
a : 进入插入模式,插入位置在光标后。
A : 进入插入模式,插入位置在光标所在行 行尾。
o : 进入插入模式,向 下 新开一行,插入行首。
O : 进入插入模式,向 上 新开一行,插入行首。
3. 文本输入

  在编辑区输入如下文本:

#include <stdio.h>

int main()
{
	printf("Hello World!\n");
	return 0;
}

  输入第一行后,按 Enter 键开始一个新行。

4. 退出 Vim

  在编译完成后,按 Esc 键退出插入模式回到普通模式,输入 “ : wq ” 退出 Vim 编辑器。
  运行命令 ls

$ ls -l 		(查看当前目录下的文件)
hello.c 

  会发现当前目录下己经存在一个名为 hello.c 的文件。

  输入的 wq 是 “保存后退出” 的意思:q 表示退出,w 表示保存
  当不想保存所作的修改时,输入“ : ” 键后,再输入 “ q! ”, Vim 会直接退出,不保存所作修改。q! 是强制退出的意思。
  Vim 有一个学习的帮助工具——vimtutor,它是很有帮助的一个工具,初学者可以使用它进行 Vim 的练习。输入“ vimtutor ”后,可以按照它的指示由浅入深地进行学习。

三、使用 Vim 编辑文本

  Vim 的编辑命令有很多,对于常用的几个命令进行详细介绍。介绍如何在 Vim 下移动光标,进行删除字符、复制、查找、转跳等操作。

1. 移动光标 h、j、k、l 等操作命令

  Vim 在普通模式下移动光标需要按特定的键,进行左、下、上、右光标移动操作的字符分别为 h、j、k、l4 个字符,其含义如下:

# 移动光标
h : 左移
j : 下移
k : 上移
l : 右移
M : 光标移动到中间行
L : 光标移动到屏幕最后一行 行首
G : 移动到指定行,行号 -G (3G 移动到第 3 行)
w : 向后一次移动一个字
b : 向前一次移动一个字
{ : 按段移动,上移
} : 按段移动,下移
Ctr-d : 向下翻半屏
Ctr-u : 
Ctr-f :
Ctr-b : 向上翻一屏
gg : 光标移动到文件开头
G : 光标移动到文件末尾

gg=G : 从文件开头到结尾,对内容进行排版

  按 h 键,光标左移一个字符的位置;按 l 键,光标右移一个字符的位置:按 k 键;光标上移一行;按 j 键,光标下移一行。

  当然还可以用方向键移动光标,但必须将手从字母键位置上移动到方向键上,这样会减慢输入速度。而且,有一些键盘是没有方向键的,或者需要特殊的操作才能使用方向键 (例如必须按组合键)。所以,知道用 h、j、k、l 字符移动光标的用法是很有帮助的。

2. 删除命令 x 、dd 撤销命令 u 、Ctrl+R

  要删除一个字符可以使用 x ,在普通模式下,将光标移到需要删除的字符上面然后按 x 键。例如 hello.c 的第一行输入有一个错误:

#Include <stdio.h>

  将光标移动到 I 上,然后按 x 键,切换输入模式到插入模式,输入 i ,对 include 的修正完成了。

  要删除一整行可以使用 dd 命令,删除一行后,它后面的一行内容会自动向上移动一行。dd 命令删除当前行并复制当前行内容到缓冲区。使用这个命令的时候要注意输入 d 的个数,两个 d 才是一个命令,在实际使用过程中经常将 d 的输入个数弄混淆。

  恢复删除可以使用 u 。当删除了不应该删除的东西后,u 命令可以取消之前的删除。例如,用 dd 命令删除一行,再按 u 键,恢复被删除的该行字符。

  Ctrl+r 是一个特殊的命令,它为取消一个命令,可以使用它对 u 命令造成的后果进行弥补。例如使用 u 命令撤销了之前的输入,重新输入字符是很麻烦的,而使用 Ctrl+r 可以十分方便地将之前使用 u 命令撤销输入的字符重新找回。

# 删除命令
x : 删除光标最后一个字符,相当于 Del
X : 删除光标前一个字符,相当于 Backspace
dd : 删除光标所在行
n dd : 删除指定行数 (2 dd 删除光标所在行起,两行,光标所在行为第一行)
D : 删除光标后本行所有字符,包括光标所在字符
d0 : 删除光标前本行所有内容,不包含光标所在字符
dw : 删除光标开始位置的字,包含光标所在字符

# 撤销命令
u : 一步一步撤销
U : 一次性撤销 当前行 所作的所有操作
Ctr-r : 反撤销

3. 重复命令 . 文本行左移右移 << 、>>
. : 重复上一次操作的命令

<< : 文本行左移,控制缩进经常使用 
>> : 文本行右移,控制缩进经常使用
(如果向控制好几行代码一起左移右移,选中要移动的代码行,再按左移或者右移命令即可)
4. 复制黏贴 p 、y

  Vim 下的粘贴命令是字符 p ,它的作用是将内存中的字符复制到当前光标的后面。使用 p 时的前提是内存中有合适的字符串复制,例如要将一行复制到某个地方,可以用 dd 命令删除它,然后使用 u 命令恢复,这时候内存中是 dd 命令删除的字符串。将光标移动到需要插入的行之前,使用 p 命令可以把内存中的字符串复制后放置在选定的位置。

  y 命令(即 yank )是复制命令,将指定的字符串复制到内存中,yw 命令(即 yank words) 用于复制单词,可以指定复制的单词数量,y2w 复制两个单词。例如下一行代码:

(光标位置)#include <stdio.h>

  光标位于此行的头部,当输入 y2w 时字符串 #include 就复制到内存中,按 p 键后,此行如下:

##include include <stdio.h>

  ㊨ 注意:命令 y 在进行字符串复制的时候包含末尾的空格。按行进行字符串的复制时,使用 dd 命令复制的方式比较麻烦,可以使用 yy 命令进行复制。dd 命令删除当前行并复制当前行内容到缓冲区 。yy 命令复制当前行内容到缓冲区。

yy : 复制当前行 
n yy : 复制 n 行,从光标所在行为第一行开始往后
p : 在光标所在位置向下新开辟一行,粘贴
5. 可视模式 替换操作
# 可视模式
v : 按字符移动,以字符为单位,选中文本
V : 按行移动,以行为单位,选中文本可以配合 d, y, >>, << 实现对文本的相关操作

# 替换操作
r : 替换 当前字符
R : 替换 当前行光标后的字符
6. 分屏操作

  进入分屏操作要在末行模式下,也就是命令模式下 : 后跟命令

# 分屏操作 
sp : 上下分屏,后可跟文件名
vsp : 左右分屏,后可跟文件名
Ctr+w+w : 在多个窗口切换
Ctr+w c/q : 关闭光标所在分屏
执行 shell 下命令 : 末行模式里输入 ! ,后跟命令
7. 启动分屏 关闭分屏 编辑中分屏 分屏编辑中光标的移动 移动分屏 屏幕尺寸
启动分屏

  在开始启动 vim ,可以输入指定的参数启动对应的分屏模式。

  1. 使用大写 O 参数进行垂直分屏

$ vim -On file1 file2 ... # n 是数字,表示分屏的数量

  2. 使用小写 o 参数进行水平分屏

$ vim -on file1 file2 ... # n 是数字,表示分屏的数量

  注:n 是数字,表示分屏的数量

关闭分屏

  1. 关闭当前窗口

# 关闭当前窗口
ctrl+w c

  2. 关闭当前窗口,如果只剩最后一个,则退出 vim

ctrl+w q
编辑中分屏

  1. 上下分割当前打开的文件

ctrl+w s

  2. 上下分割,并打开一个新的文件

:sp filename

  3. 左右分割当前打开的文件

ctrl+w v

  4. 左右分割,并打开一个新的文件

 :vsp filename
分屏编辑中光标的移动

  vi 中的光标鍵是 hjkl,要在各个屏之间切换,只需要先按一下 ctrl+w

  1. 把光柄移动到上边的屏

ctrl+w k

  2. 把光柄移动到下边的屏

ctrl+w j

  3. 把光柄移动到右边的屏

ctrl+w l

  4. 把光标移动到左边的屏

ctrl+w h

  5. 把光柄移动到下一个的屏

ctrl+w w
移动分屏

  1. 向上移动

ctrl+w K

  2. 向下移动

ctrl+w J

  3. 向右移动

ctrl+w L

  4. 向左移动

ctrl+w H
屏幕尺寸

  1. 增加高度

ctrl+w +

  2. 减少高度

ctrl+w -

  3. 让所有屏的高度一致

ctrl+w =

  4. 左加宽度

ctrl+w >

  5. 右加宽度

ctrl+w <

  6. 右增加 n 宽(如:n=30)

ctrl+w n <
实例: ctrl+w 30 <
8. 查找字符串 “ / ”

  査找字符串的命令是 “ /xxx ” ,其中的 xxx 代表要查找的字符串。例如查找当前文件的 printf 字符串,可以输入以下命令进行査找:

":/printf"

  按 Enter 键后,如果找到匹配的字符串,光标就停在第一个合适的字符串光标上。查找其他的匹配字符串可以输入字符“ n ”向下移到一个匹配的字符串上,输入字符“ N ”则 会向上移到一个匹配的字符串上。

9. 跳到某一行 g

  在编写程序或者修改程序的过程中,经常需要转跳到某一行(这在编译程序出错,进行修改程序的时候是经常遇到的,因为 GCC 编译器的报错信息会提示某行出错)。命令“ :n ”可以让光标转到某一行,其中 n 代表要转跳到的行数。例如要跳到第 5 行,可以输入“ :5 ”,然后按 Enter 键,光标会跳到第 5 行的头部。还有一种实现方式,即 nGn 为要转跳的行数,5G 是转跳到第 5 行的命令,注意其中的 G 为大写。

10. 查看 Man Page
光标移动到函数上,Shift-k 光标移动到函数上,3 Shift-k,查看第三章的 Man Page ,函数相关信息在第三章里面
11. 查看宏定义
[-d: 可以查看宏定义,必领先包含此宏所在的头文件
12. 代码排版
gg=G : 代码自动缩进排版

四、Vim 的格式设置

  Vim 下可以进行很多方式的格式设置,这里仅对经常使用的格式进行介绍,例如设置缩进,设置 Tab 键对应空格的长度,设置行号等。

1. 设置缩进

  合理的缩进会使程序更加清晰,Vim 提供了多种方法来简化这项工作。要对 C 语言程序缩进,需要设定 cindent 选项;如果需要设置齐一行的缩进长度可以设置 shiftwidth 选项。 例如如下命令实现 4 个空格的缩进。

:set cindent shiftwidth=4

  设定了这一选项之后,当输入一行语句后,Vim 会自动在下一行进行缩进。例如在 if(x) 一行代码后面的内容,行的开头会自动向下一级缩进。例如:

					if (a==b)
自动缩进		-->				do equal ();
自动取消缩进	<--		if (a>b) {
自动缩进		-->				do lt();
自动取消缩进	<--		}

  自动缩进还能提前发现代码中的错误。例如当输入了一个“ } ”后,如果发现比预想中的缩进多,那可能缺少了一个“ } ”。用 命令可以查找与“ } ”相匹配的“ { ”。

2. 设置 Tab 键的空格数量

  进行文本编辑的时候 Tab 键可以移动一块较大的距离,不同的文本编辑器对 Tab 键移动距离的解释是不同的。Vim 编辑器 Tab 键的默认移动距离为 8 个空格,当需要对这个值进行更改的时候,需要设置 tabstop 选项的值。命令 “ :set tabstop=2 ” 可以设置 Tab 键对应空格的数量,例如“ :set tabstop=2 ”将 Tab 键的宽度设置为 2 个空格。

3. 设置行号

  在程序中设置行号使程序更加一目了然,设置行号的命令是“ :set number ”,按下 Enter 键后程序每行代码的头部会有一个行号的数值。

五、Vim 配置文件.vimrc

  Vim 启动的时候会根据 〜/.vimrc 文件配置 vi 的设置,可以修改文件 .vimrc 来定制 Vim 。 例如可以使用 shiftwidth 设置缩进宽度、使用 tabstop 设置 Tab 键的宽度、使用 number 设置行号等格式来定义 Vim 的使用环境。例如按照如下的情况对 .vimrc 文件进行修改:

set shiftwidth=2	#设置缩进宽度为 2 个空格
set tabstop=2		#设置 Tab 键宽度为 2 个空格
set number			#显示行号

  再次启动 Vim ,对缩进宽度、Tab 键的宽度都进行了设定,并且会自动显示行号。

六、使用其他编译器

  在 Linux 下还有一些其他的编辑器,例如 GvimGvimVimGNOME 版本)、codeblocks ( 严格来说是一个 IDE 开发环境)。
  在 Linux 下进行开发并不排斥使用 Windows 环境下的编辑器,例如写字板、UltraEditVCIDE 开发环境等,在保存的时候要注意保存为 UNIX 格式,这主要是换行符造成的。 在 Windows 下的换行为 “回车+换行”,而 UNIX 环境下的换行为单个的换行,在 Linux 下用 Vim 查看会发现每行的末尾有一个很奇怪的 “”。如果没有保存为 UNIX 格式,在 Linux 下可以用 dos2UNIX 转换。例如,文件 hello.c 使用 Windows 编辑器,默认保存,将其转换为 UNIX 格式:

$dos2UNIX hello.c

  再次査看文件 hello.c,“” 符号已经消失了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值