使用编辑器
vim 编辑器
在GNU项目将vi编辑器移植到开源世界时,他们决定对其作一些改进。由于它不再是以前Unix中的那个原始的vi编辑器了,开发人员也就将它重命名为vi improved,或vim。
检查 vim 软件包
在开始研究vim编辑器之前,最好先搞明白你所用的Linux系统是哪种vim软件包。在有些发行版中安装的是完整的vim, 另外还有一个vi命令的别名,就像下面所显示的CentOS发行版中的那样。
$ alias vi
alias vi='vim'
$
$ which vim
/usr/bin/vim
$
$ ls -l /usr/bin/vim
-rwxr-xr-x. 1 root root 1967072 Apr 5 2012 /usr/bin/vim
在其他发行版中,你会发现各种各式各样的vim编辑器。要注意的是,在Ubuntu发行版中不仅没有vi命令的别名,而且/usr/bin/vi程序属于一系列文件链接中的一环。
$ alias vi
-bash: alias: vi: not found
$
$ which vi
/usr/bin/vi
$
$ ls -l /usr/bin/vi
lrwxrwxrwx 1 root root 20 Apr 22 12:39
/usr/bin/vi -> /etc/alternatives/vi
$
$ ls -l /etc/alternatives/vi
lrwxrwxrwx 1 root root 17 Apr 22 12:33
/etc/alternatives/vi -> /usr/bin/vim.tiny
$
$ ls -l /usr/bin/vim.tiny
-rwxr-xr-x 1 root root 884360 Jan 2 14:40
/usr/bin/vim.tiny
$
$ readlink -f /usr/bin/vi
/usr/bin/vim.tiny
因此,当输入vi命令时,执行的是程序/usr/bin/vim.tiny。 vim.tiny只提供少量的vim编辑器功能。如果特别需要vim编辑器,而且使用的又是Ubuntu,那至少应该安装一个基础版本的vim包。
说明 在上面的例子中,其实用不着非得连续使用ls –l命令来查找一系列链接文件的最终目标,只需要使用readlink –f命令就可以了。它能够立刻找出链接文件的最后一环。
在Ubuntu发行版中安装基础版的vim包非常简单。
$ sudo apt-get install vim
vim 基础
vim编辑器在内存缓冲区中处理数据。只要键入vim命令(或vi,如果这个别名或链接文件存在的话)和要编辑的文件的名字就可以启动vim编辑器:
$ vim myprog.c
如在启动vim时未指定文件名,或者这个文件不存在, vim会开辟一段新的缓冲区域来编辑。如果你在命令行下指定了一个已有文件的名字, vim会将文件的整个内容都读到一块缓冲区域来
准备编辑。
vim编辑器有两种操作模式:
普通模式
插入模式
当你刚打开要编辑的文件时(或新建一个文件时), vim编辑器会进入普通模式。在普通模式中, vim编辑器会将按键解释成命令。
在插入模式下, vim会将你在当前光标位置输入的每个键都插入到缓冲区。按下i键就可以进入插入模式。要退出插入模式回到普通模式,按下键盘上的退出键( ESC键,也就是Escape键)就可以了。
在普通模式中,可以用方向键在文本区域移动光标(只要vim能正确识别你的终端类型)。如果你恰巧在一个古怪的没有定义方向键的终端连接上,也不是完全没有希望。 vim中有用来移动光标的命令。
h:左移一个字符。
j:下移一行(文本中的下一行)。
k:上移一行(文本中的上一行)。
l:右移一个字符。
在大的文本文件中一行一行地来回移动会特别麻烦,幸而vim提供了一些能够提高移动速度的命令。
PageDown(或Ctrl+F):下翻一屏。
PageUp(或Ctrl+B):上翻一屏。
G:移到缓冲区的最后一行。
num G:移动到缓冲区中的第num行。
gg:移到缓冲区的第一行。
vim编辑器在普通模式下有个特别的功能叫命令行模式。命令行模式提供了一个交互式命令行,可以输入额外的命令来控制vim的行为。要进入命令行模式,在普通模式下按下冒号键。光标会移动到消息行,然后出现冒号,等待输入命令。
在命令行模式下有几个命令可以将缓冲区的数据保存到文件中并退出vim。
q:如果未修改缓冲区数据,退出。
q!:取消所有对缓冲区数据的修改并退出。
w filename:将文件保存到另一个文件中。
wq:将缓冲区数据保存到文件中并退出。
编辑数据
在插入模式下,你可以向缓冲区插入数据。然而有时将数据输入到缓冲区中后,你需要再对其进行添加或删除。在普通模式下, vim编辑器提供了一些命令来编辑缓冲区中的数据。
vim编辑命令
命 令 | 描 述 |
---|---|
x | 删除当前光标所在位置的字符 |
dd | 删除当前光标所在行 |
dw | 删除当前光标所在位置的单词 |
d$ | 删除当前光标所在位置至行尾的内容 |
J | 删除当前光标所在行行尾的换行符(拼接行) |
u | 撤销前一编辑命令 |
a | 在当前光标后追加数据 |
A | 在当前光标所在行行尾追加数据 |
r char | 用char替换当前光标所在位置的单个字符 |
R text | 用text覆盖当前光标所在位置的数据,直到按下ESC键 |
有些编辑命令允许使用数字修饰符来指定重复该命令多少次。比如,命令2x会删除从光标当前位置开始的两个字符,命令5dd会删除从光标当前所在行开始的5行。
复制和粘贴
vim在删除数据时,实际上会将数据保存在单独的一个寄存器中。可以用p命令取回数据。
举例来说,可以用dd命令删除一行文本,然后把光标移动到缓冲区的某个要放置该行文本的位置,然后用p命令。该命令会将文本插入到当前光标所在行之后。可以将它和任何删除文本的命令一起搭配使用。
复制文本则要稍微复杂点。 vim中复制命令是y(代表yank)。可以在y后面使用和d命令相同的第二字符(yw表示复制一个单词, y$表示复制到行尾)。在复制文本后,把光标移动到你想放置文本的地方,输入p命令。复制的文本就会出现在该位置。
复制的复杂之处在于,由于不会影响到你复制的文本,你没法知道到底发生了什么。你无法确定到底复制了什么东西,直到将它粘贴到其他地方才能明白。但vim还有另外一个功能来解决这个问题。
可视模式会在你移动光标时高亮显示文本。可以用可视模式选取要复制的文本。要进入可视模式,应移动光标到要开始复制的位置,并按下v键。你会注意到光标所在位置的文本已经被高亮显示了。下一步,移动光标来覆盖你想要复制的文本(甚至可以向下移动几行来复制更多行的文本)。在移动光标时, vim会高亮显示复制区域的文本。在覆盖了要复制的文本后,按y键来**复制命令。现在寄存器中已经有了要复制的文本,移动光标到你要放置的位置,使用p命令来粘贴。
查找和替换
可以使用vim查找命令来轻松查找缓冲区中的数据。要输入一个查找字符串,就按下斜线(/)键。光标会跑到消息行,然后vim会显示出斜线。在输入你要查找的文本后,按下回车键。 vim编辑器会采用以下三种回应中的一种。
如果要查找的文本出现在光标当前位置之后,则光标会跳到该文本出现的第一个位置。
如果要查找的文本未在光标当前位置之后出现,则光标会绕过文件末尾,出现在该文本所在的第一个位置(并用一条消息指明)。
输出一条错误消息,说明在文件中没有找到要查找的文本。
要继续查找同一个单词,按下斜线键,然后按回车键。或者使用n键,表示下一个(next)。替换命令允许你快速用另一个单词来替换文本中的某个单词。必须进入命令行模式才能使用替换命令。替换命令的格式是:
:s/old/new/
vim编辑器会跳到old第一次出现的地方,并用new来替换。可以对替换命令作一些修改来替换多处文本。
:s/old/new/g:一行命令替换所有old。
:n,ms/old/new/g:替换行号n和m之间所有old。
:%s/old/new/g:替换整个文件中的所有old。
:%s/old/new/gc:替换整个文件中的所有old,但在每次出现时提示。
如你所见,对一个命令行文本编辑器而言, vim包含了不少高级功能。由于每个Linux发行版都会包含它,所以应该至少了解一下vim编辑器的一些基本用法。这样一来,不管所处的环境如何,你总能编辑脚本。
nano 编辑器
大多数Linux发行版默认都安装了nano文本编辑器。和这款编辑器有关的一切都很简单。要在命令行下使用nano打开文件,可以这样:
$ nano myprog.c
如果启动nano的时候没有指定文件名,或者指定的文件不存在, nano会开辟一段新的缓冲区进行编辑。如果你在命令行中指定了一个已有的文件, nano会将该文件的全部内容读入缓冲区,以备编辑。
注意,在nano编辑器窗口的底部显示了各种命令以及简要的描述。这些命令是nano的控制命令。脱字符( ^)表示Ctrl键。因此, ^X表示的就是组合键Ctrl+X。
尽管nano控制命令在列出组合键的时候使用的是大写字母,但是在使用的时候,大小写字母都没有问题。
nano控制命令
命 令 | 描 述 |
---|---|
CTRL+C | 显示光标在文本编辑缓冲区中的位置 |
CTRL+G | 显示nano的主帮助窗口 |
CTRL+J | 调整当前文本段落 |
CTRL+K | 剪切文本行,并将其保存在剪切缓冲区 |
CTRL+O | 将当前文本编辑缓冲区的内容写入文件 |
CTRL+R | 将文件读入当前文本编辑缓冲区 |
CTRL+T | 启动可用的拼写检查器 |
CTRL+U | 将剪切缓冲区中的内容放入当前行 |
CTRL+V | 翻动到文本编辑缓冲区中的下一页内容 |
CTRL+W | 在文本编辑缓冲区中搜索单词或短语 |
CTRL+X | 关闭当前文本编辑缓冲区,退出nano,返回shell |
CTRL+Y | 翻动到文本编辑缓冲区中的上一页内容 |