第6章 好编辑
人类经常用文字来表达和交流抽象的信息。人们使用键盘向电脑输入的大多是文字。计算机学科通常把一串文字构成的信息称为文本(Text)。很多用户使用计算机的主要目的就是编辑文本:写公文、写电子邮件、写小说……精通计算机的程序员,也往往以文本形式的程序向计算机表达自己的意志。在Linux系统下,很多配置文件也是人类可读的文本。在计算机的用户软件中,一定有文本编辑器的一席之地,文本编辑器可以创建、修改和保存文本。
6.1 图形化的文本编辑器
Raspbian中包含了一个有图形化界面的文本编辑器,也就是菜单中的Text Editor,如图6-1所示。这个文本编辑器有一个像白纸一样的界面。敲击键盘,那些敲击的字符就会“写”在这张白纸上。用键盘的上下左右键,或者用鼠标移动光标,就可以改变光标的位置。在光标所在的位置,可以插入或删除文本。如果你用过“记事本”或Word这样的软件,那么对这类编辑文本的过程肯定早有经验。
图6-1 图形化的文本编辑器
常见的操作如复制粘贴,在文本编辑器的Edit(编辑)菜单里都可以找到,从上到下一共有7个按钮,如下所示。
●Undo:撤销上一个操作,快捷键Ctrl+Z。
●Redo:重做上一个撤销的操作,快捷键Shift+Ctrl+Z。
●Cut:剪切选中的内容,快捷键Ctrl+X。
●Copy:复制选中的内容,快捷键Ctrl+C。
●Paste:粘贴剪贴板的内容到光标处或替换选中的内容,快捷键Ctrl+V。
●Delete:删除选中的内容,功能同键盘上的Delete键。
●Select All:全选,快捷键Ctrl+A。
文本编辑完成后就可以保存文本了。Linux以文件的形式存储文本。文本最终以文件为单位存储在Micro SD卡上。选择File(文件)菜单中的Save选项来保存文件,在弹出的窗口中输入文件名,如hello.txt,选择你希望保存的路径,单击Save按钮后保存文件,如图6-2所示。
图6-2 Save/Save As(保存/另存为)对话框
在树莓派的文件管理器(File Manager)中找到该文件,在右键快捷菜单中选择Text Editor选项,即可用文本编辑器打开它,如图6-3所示。
图6-3 在文件管理器中找到文件
6.2 使用nano
GNU nano是Shell中常用的一款文本编辑器,它以简单易用著称。其实,在Shell下,还有更出名、功能更强大的Vi和Emacs编辑器,但这两款编辑器的学习曲线都比nano陡峭很多。因为nano对于一般的文本编辑来说已经够用,所以这里着重介绍nano编辑器。
在Shell中输入下面的命令就可以启动nano:
nano test.txt
命令nano后面跟着想要修改的文件名。如果当前文件夹下存在名为test.txt的文件,则该命令将打开这个文件。否则,命令nano会创建一个新文件。随后,Shell会进入nano的编辑界面。nano的编辑方式和图形化的记事本工具类似,也是“所见即所得”。用上下左右键就可以把光标移动到想要编辑的位置,然后输入或删除即可。
完成之后,可以按快捷键Ctrl+O来保存文件。nano会询问你是否保存缓存中的修改:
Save modified buffer (ANSWERING "No" WILL DESTROY CHANGES) ?
输入Y并将改动存入文件,此时nano会让你再次确认存入文件的文件名:
File Name to Write: test.txt
按Enter键确认后,修改将存入test.txt文件。随后,按快捷键Ctrl+X可以退出nano,重新回到Shell的命令行。
nano中的很多操作都是通过功能键实现的。上面保存文件用的快捷键Ctrl+O,就是一个功能键。因为功能键很多,所以背起来很痛苦。万幸的是,nano界面(如图6-4所示)的最下方会给出功能键的提示。
图6-4 nano界面
在提示中,^表示Ctrl键,M表示Alt键。因此,^G表示的就是同时按下Ctrl键和G键。下面是一些常用的功能键。
●M-\,把光标移到文本开始。
●M-/,把光标移到文本结尾。
●M-A,开始选择文本块。
●^K,剪切所在行或选定的文本块。
●M-6,复制所在行或选定的文本块。
●^U,粘贴。
●^G,帮助。
6.3 语法高亮
nano可以支持语法高亮,从而更好地服务于编程。为了使语法高亮,首先要安装语法高亮文件:
$git clone https://github.com/nanorc/nanorc.git $cd nanorc/ $make install
安装完成后,可以看到~/.nano/syntax下多了很多语法高亮文件:
ALL.nanorc go.nanorc markdown.nanorc ruby.nanorc awk.nanorc html.nanorc mpdconf.nanorc sed.nanorc c.nanorc ini.nanorc nanorc.nanorc shell.nanorc cmake.nanorc inputrc.nanorc nginx.nanorc sql.nanorc coffeescript.nanorc java.nanorc patch.nanorc systemd.nanorc colortest.nanorc javascript.nanorc peg.nanorc tex.nanorc csharp.nanorc json.nanorc php.nanorc vala.nanorc css.nanorc keymap.nanorc pkg-config.nanorc vi.nanorc cython.nanorc kickstart.nanorc pkgbuild.nanorc xml.nanorc default.nanorc ledger.nanorc po.nanorc xresources.nanorc dot.nanorc lisp.nanorc privoxy.nanorc yaml.nanorc email.nanorc lua.nanorc properties.nanorc yum.nanorc git.nanorc makefile.nanorc python.nanorc glsl.nanorc man.nanorc rpmspec.nanorc
每个文件代表了对一种语言的语法高亮支持。比如python.nanorc,就包含了对Python语言的语法高亮支持。将语法高亮文件添加到~/.nanorc中,就能让nano启动对相应语言的语法高亮支持,例如:
include ~/.nano/syntax/c.nanorc include ~/.nano/syntax/css.nanorc include ~/.nano/syntax/java.nanorc include ~/.nano/syntax/makefile.nanorc include ~/.nano/syntax/php.nanorc include ~/.nano/syntax/python.nanorc include ~/.nano/syntax/ruby.nanorc include ~/.nano/syntax/tex.nanorc include ~/.nano/syntax/xml.nanorc
只要有需要,把相应的语法高亮文件加入.nanorc中,就能实现该语言的语法高亮。这时再打开获得支持的程序文本,就可以看到语法高亮的效果。图6-5是用nano打开了一段Python程序。
图6-5 nano中Python程序的语法高亮
在nano中,使用M-Y功能键可以开关语法高亮功能。
6.4 文件基础操作
用nano编辑文件并保存后,当前目录(Directory)下就会出现一个新的文件,文件名就是我们使用时的文件名。所谓的目录,就是一个类似于“文件夹”的收纳盒,其中可以包含多个文件。用下面的命令可以显示Shell当前目录下的文件:
$ls
文件是Linux进行数据存储的唯一形式。除了用户编辑生成的文本,数据还可能是Linux系统中的程序或配置文件。就连硬件设备,也会虚拟成一个文件。既然文件的地位如此重要,Linux中自然少不了用于文件操作的命令,比如复制文件:
$cp test.txt test_again.txt
复制之后,同一目录下会出现一个名为test_again的文件。这个文件中包含的文本和test.txt相同。
又如删除文件的rm:
$rm test.txt
删除文件之后,该目录下的test.txt就消失了。
还有移动文件:
$mv test_again.txt test.txt
当前目录下的test_again.txt文件移为test.txt文件。这里的移动,等价于重命名的功能。
用nano保存文件后,如果没有说明目录,那么文件就保存在当前目录下。我们可以用下面的命令来查询Shell所在的当前目录:
$pwd
该命令输入后,Shell显示的是:
/home/pi
这串文字说明了当前目录在当前文件系统中的位置,即/home/pi目录。
一个目录下的文件不能重名。因此,在/home/pi这样的目录下加上文件名,就能唯一确定这个文件。这就是文件的路径(path)。比如:
/home/pi/test.txt
在命令中,我们也可以用这个路径来唯一指代要操作的对象,比如用nano打开文件:
$nano /home/pi/test.txt
或者删除文件:
$rm /home/pi/test.txt