10.1 vim编辑器
10.1.1 检查vim软件包
当输入vi命令时,执行的是程序/usr/bin/vim.tiny。vim.tiny只提供少量的vim 编译器功能。
基础版的vim安装好后,/usr/bin/vi的文件链接会自动更改成指向/usr/bin/ vim.basic。
10.1.2 vim基础
vim编辑器在内存缓冲区中处理数据。只要键入vim命令(或vi,如果这个别名或链接文件存在的话)和要编辑的文件的名字就可以启动vim编辑器。
如在启动vim时未指定文件名,或者这个文件不存在,vim会开辟一段新的缓冲区۪域来编辑。如果你在命令行下指定了一个已有文件的名字,vim会将文件的整个内容都读到一块缓冲区۪域来准备编辑。
最初的vim编辑窗口显示了文件的内容(如果有内容的话),并在窗口的底部显示了一条消息行。如果文件内容并未占据整个屏幕,vim会在非文件内容行放置一个波浪线。
vim编辑器有两种操作模式:
-
•
普通模式
-
•
插入模式
当你刚打开要编辑的文件时(或新建一个文件时),vim编辑器会进入普通模式。在普通模式中,vim编辑器会将按键解释成命令。
在插入模式下,vim会将你在当前光标位置输入的每个键都插入到缓冲区。按下i键就可以进入插入模式。要退出插入模式回到普通模式,按下键盘上的退出键(ESC键,也就是Escape键)就可以了。
移动光标的指令:
-
•
h:左移一个字符
-
•
j:下移一行
-
•
k:上移一行
-
•
l:右移一个字符
-
•
PageDown(或Ctrl+F):下翻一屏
-
•
PageUp(或Ctrl+B):上翻一屏
-
•
G:移到缓冲区的最后一行
-
•
num G:移动到缓冲区中的第num行
-
•
gg:移到缓冲区的第一行
命令行模式提供了一个交互式命令行,可以输入额外的命令来控制vim的行为。要进入命令行模式,在普通模式下按下冒号键。光标会移动到消息行,然后出现冒号,等待输入命令。
在命令行模式下有几个命令可以将缓冲区的数据保存到文件中并退出vim。
-
•
q:如果未修改缓冲区数据,退出。
-
•
q!:取消所有对缓冲区数据的修改并退出。
-
•
w filename:将文件保存到另一个文件中。
-
•
wq:将缓冲区数据保存到文件中并退出。
10.1.3 编辑数据
常用的vim编辑命令:
-
•
x:删除当前光标所在位置的字符
-
•
dd:删除当前光标所在行
-
•
dw:删除当前光标所在位置的单词
-
•
d$:删除当前光标所在位置至行尾的内容
-
•
j:删除当前光标所在行行尾的换行符(拼接行)
-
•
u:撤销前一编辑命令
-
•
a:在当前光标后追加数据
-
•
A:在当前光标所在行行尾追加数据
-
•
r char:用char替换当前光标所在位置的单个字符
-
•
R text:用text覆盖当前光标所在位置的数据,直到按下ESC键
有些编辑命令允许使用数字修饰符来指定重复该命令多少次。比如,命令2x会删除从光标当前位置开始的两个字符,命令5dd会删除从光标当前所在行开始的5行。
10.1.4 复制和粘贴
vim在删除数据时,实际上会将数据保存在单独的一个寄存器中。可以用p命令取回数据。
vim中复制命令是y(代表yank)。可以在y后面使用和d命令相同的第二字符(yw表示复制一个单词,y$表示复制到行尾)。在复制文本后,把光标移动到你想放置文本的地方,输入p命令。复制的文本就会出现在该位置。
可视模式会在你移动光标时高亮显示文本。可以用可视模式选取要复制的文本。要进入可视模式,应移动光标到要开始复制的位置,并按下v键。你会注意到光标所在位置的文本已经被高亮显示了。下一步,移动光标来覆盖你想要复制的文本(甚至可以向下移动几行来复制更多行的文本)。在移动光标时,vim会高亮显示复制区域的文本。在覆盖了要复制的文本后,按y键来激活复制命令。
10.1.5 查找和替换
查找命令:按下斜线(/)键。光标会跑到消息行,然后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,但在每次出现时提示。