文件编辑器,允许在文件中插入、编辑和替换文本等操作。
本文主要针对vim
编辑器和nano
编辑器的使用做简单记录,目前macOS
是支持这两种编辑器的。
vim
编辑器
vi
编辑器是Unix
系统最初的编辑器,后来被GNU
项目改进后,称为vi improved
,简称:vim
。Linux
移植了vim
编辑器。
在macOS
系统可以使用vi
、view
,也可以使用vim
:
qwldeMacBook-Pro:~ qwl$ which vim
/usr/bin/vim
qwldeMacBook-Pro:~ qwl$ ls -l /usr/bin/vim
-rwxr-xr-x 1 root wheel 2129184 7 10 06:26 /usr/bin/vim
qwldeMacBook-Pro:~ qwl$ which vi
/usr/bin/vi
qwllideMacBook-Pro:~ qwl$ ls -l /usr/bin/vi
lrwxr-xr-x 1 root wheel 3 10 11 2019 /usr/bin/vi -> vim
qwldeMacBook-Pro:desktop qwl$ which view
/usr/bin/view
qwldeMacBook-Pro:desktop qwl$ ls -l /usr/bin/view
lrwxr-xr-x 1 root wheel 3 10 11 2019 /usr/bin/view -> vim
通过上述终端查看,可以发现vi
、view
和vim
的联系:vi
、view
是链接文件最终指向了vim
。
1.vim
基础
vim
编辑器启动的命令格式:vim filename
或vi filename
。若filename
为空,或filename
文件不存在,vim
会开辟新的缓冲区来编辑;若filename
不为空,则vim
会将文件整个内容都读取到缓冲区,准备编辑,若读取的文件内容不足以显示一屏,vim
会在非文件内容行放置一个波浪线~
。
vim
编辑器有两种操作模式:
- 普通模式:当刚打开要编辑的文件时(或新建一个文件时),
vim
编辑器会进入普通模式。在普通模式中,vim
编辑器会将键盘按键解释成命令。 - 插入模式:在插入模式下,
vim
会将当前光标位置输入的每个键都插入到缓冲区。按下i
键就可以进 入插入模式。要退出插入模式回到普通模式,按下键盘上的退出键esc
。
普通模式,使用键盘的上下左右,可控制光标的移动,也有代替键盘的控制光标移动的命令:
h
:左移一个字符
j
:下移一行
k
:上移一行
l
:右移一个字符
ctrl+f
:下翻一屏
ctrl+b
:上翻一屏
G
:移动到缓冲区的最后一行
num G
:移动到缓冲区的第num
行
gg
:移动到缓冲区的第一行
普通模式下有个特殊的功能,叫命令行模式
。命令行模式提供了一个交互式命令行,可以输入额外的命令来控制vim
的行为。通过在普通模式下输入冒号::
,可以进入vim
编辑器的命令行模式。
在命令行模式下有几个命令可以将缓冲区的数据保存到文件中并退出vim
:
q
:如果未修改缓冲区数据,退出
q!
:取消修改并退出
w filename
:将文件保存到另一个文件中
wq
:将缓冲区数据保存到文件中并退出
在插入模式下,你可以向缓冲区插入数据。然而有时将数据输入到缓冲区中后,你需要再对其进行添加或删除。在普通模式下,vim
编辑器提供了一些命令来编辑缓冲区中的数据:
x
:删除当前光标所在位置的字符
num x
:删除当前光标所在位置开始的num
个字符
dd
:删除当前光标所在的行
num dd
:删除当前光标所在的行开始的num
行。
dw
:删除当前光标所在位置的单词
num dw
:删除当前光标所在位置开始的num
个单词
J
:删除当前光标所在行行尾的换行符
u
:撤销前一个编辑的命令
a
:在光标后追加数据
A
:在当前光标所在行的行尾追加数据
r char
:用char替换当前光标所在位置的单个字符
R text
:用text覆盖当前光标所在位置的数据,直到按下ESC键
2.vim
编辑器的剪切和粘贴
vim
在删除数据时,会将数据保存在单独的一个寄存器中,可以用p
命令取回数据。
dd + p
:整行数据的剪切与粘贴
x
+p
: 单个字符的剪切与粘贴
dw
+p
:单个单词的剪切与粘贴
3.vim
编辑器的复制和粘贴
vim
中复制命令是y
(代表yank)。可以在y
后面使用和d
命令相同的第二字符(yw
表示复制一个单词,y$
表示复制到行尾)。在复制文本后,把光标移动到想放置文本的地方,输入p
命令。复制的文本就会出现在该位置。
yy
:复制整行,可加num
yw
:复制单词,可加num
y
:复制单个字符,可加num
y$
:从当前光标位置复制到行尾
-
vim
编辑器的可视化复制
上述的复制方法,我们无法知道复制的是什么。vim
编辑器提供了一种可视化模式
,来解决这个问题。
要进行可视化模式复制,首先要将我们的光标移动到文本开始复制的位置,然后按下v
键,最后控制光标移动的命令或键盘,进行选择要复制的文本即可。使用p
进行粘贴。
-
vim
编辑器的查找和替换
查找:普通模式下要查找字符串,首先按下斜杠键/
,接着输入要查找的字符串,按enter
键进行查找,默认 enter
之后的编辑器会有以下三中行为:
- 如果要查找的文本出现在光标当前位置之后,则光标会跳到该文本出现的第一个位置。
- 如果要查找的文本未在光标当前位置之后出现,则光标会绕过文件末尾,出现在该文本所在的第一个位置(并用一条消息指明)。
- 输出一条错误消息,说明在文件中没有找到要查找的文本。
若要继续查找同一个字符串,有两种方式:
- 输入
/
,按enter
键 - 按
n
键,意为:next
替换:必须进入命令模式才能使用替换,即普通模式下使用冒号:
进入命令模式。替换的命令格式如下::s/old/new/
光标移动到字符串替换开始的位置,进入命令行模式,输入s/old/new
,vim
编辑器会跳到光标处的old
,并用new
来替换。
可以对替换命令作一些修改来替换多处文本:
-
:s/old/new/g
:替换一行中出现的所有old
为new
。
#文本:hello hello hello hello hello word!
#光标移动至替换开始的位置(第一个hello的h处),并输入
:s/hello/hi/g
#输出
hi hi hi hi hi word!
-
:num s/old/new/g
:替换第num行中出现的所有old
为new
。
#大漠孤烟直
#hello word!
#hello hello hello hello hello word!
#hello word!
#长河落日圆
#输入
:2 s/hello/hi/g
#输出:
#大漠孤烟直
#hi word!
#hello hello hello hello hello word!
#hello word!
#长河落日圆
-
:n,m s/old/new/g
:替换n行到m行中出现的所有old
为new
。
#大漠孤烟直
#hello word!
#hello hello hello hello hello word!
#hello word!
#长河落日圆
#输入
:2, 4 s/hello/hi/g
#输出:
#大漠孤烟直
#hi word!
#hi hi hi hi hi word!
#hi word!
#长河落日圆
-
:% s/old/new/g
:替换整个文件中的所有old
。 -
:%s/old/new/gc
:替换整个文件中的所有old
,但在每次出现时提示:replace with hi (y/n/a/q/l/^E/^Y)?
nano
编辑器
nano
文本编辑器也是从Unix
系统移植过来的,它的使用就很简单,许多命令,都会显示在编辑器窗口的下方,可以按照这些命令提示轻松使用它:
关于启动
nano
编辑器:nano filename
,关于filename
与vim
编辑器的处理相同。
参考资料:
Linux命令行与shell脚本编程大全
网友评论