终端文本编辑工具

概览

我们很容易有这个需求,就是在终端模式(命令行模式)下编辑文本,最常用的工具是vi,这个命令几乎所有的Linux系统都有,很多时候也是系统默认的文本编辑器,比如书写定时任务的时候CentOS系统默认会调用vi来编辑,它有一个大表哥vim就是vi的升级版,支持更多功能,颜色高亮等(也看自己是否需要,我有时候就不喜欢彩色高亮这些花里胡哨的东西,简简单单编辑个文本就足够)

要说对工作有直接影响的vi和vim的区别,就是当我们复制粘贴文本的时候,尽可能使用vi编辑器,vim有时会”智能”的对所粘贴的文本进行格式化,比如缩进一下,多增加了几行注释什么的,这都不是我们想要的,我们需要的是原封不动的把内容粘贴进去,此时就用简单的vi编辑器就好

另外在Ubuntu系统下,还有一个编辑器nano,这个编辑器也是默认安装的,使用起来比较简单

vi OR vim 的学习成本比较高,不过作为专业的运维工程师,不学习vi是不可能的事情,因为实际工作中老大随手给你一个服务器的IP地址,你随手打开终端连上远程机器就开始操作了,此时你不会有心思和时间去安装和配置合适的编辑器,而是直接使用vi编辑器开鲁

不过仍然有一种情况,系统里连vi编辑器都没有,比如在docker容器里,此时你可以利用重定向,sed命令来变向达到一些文件修改功能,如果情况复杂,你还可以利用docker cp这样的命令来把宿主机上的文件复制到容器里去

最近我了解到有一款全新的终端编辑器micro,https://github.com/zyedidia/micro/releases,这个编辑器是用Go语言写的,可运行在大多数Linux平台上,只需要一个二进制文件便可实现文件编辑,支持CTRL+CCTRL+V复制粘贴功能,支持鼠标操作,有需要的朋友可以了解一下

vi

vi file.txt
vim file.txt

i 插入模式
o 下一行插入

ESC :q   退出
ESC :wq  保存并退出
ESC :q!  强制退出不保存已修改的文件
:set nu  查看行号
:set nonu  取消显示行号

G OR shift+g 光标移动到文件最后一行
0  行首
$  行尾
1gg  2gg 9gg   移动到第1行 第2行 第9行,依次类推

/hello 搜索hello字符串
n 向下搜索
N 向上搜索


yy 复制光标所在当前行
p  将已经复制的内容粘贴到光标所在的下一行
dd 删除光标所在的行
u  撤销上一步操作

gg  --> dG   清空文本
d$ 光标到行尾删除

SHIFT+V   选择多行,配合d删除之
CTRL+V    垂直选择多行,配合d,删除之

第1行到第3 ,复制到第19行的下面。
:1,3 copy 19

显示空格和TAB键
:set list   显示空格和TAB键
:set nolist 取消显示空格和TAB键
如下图所示,$表示行结尾,^I表示TAB键。

配置文件

vim基本配置
在linux下编辑shell脚本,需要使用功能强大的vim编辑器,本章介绍下vim的常见优化。
vim的配置文件
~/.vimrc	当前用户的vim配置文件
/etc/vimrc	系统全局vim配置文件
~/.viminfo	用户使用vim的操作历史
/usr/share/vim/vim74/colors	配色模板文件存放路径
~/.vimrc常用配置
[root@as4k ~]# cat ~/.vimrc

set tabstop=4
set shiftwidth=4
set expandtab       " 使用空格替换TAB

set nocompatible   " 关闭兼容模式(无需兼容vi)
set showcmd         " 输入的命令显示出来,看的清楚些
备用
set softtabstop=4  " 按空格键一次删除4个空格
set mouse=a        " 开启鼠标支持
set autoindent      " 自动缩进,开启此项会导致,从windows复制到xshell中的文本,缩进异常
参考资料
https://blog.csdn.net/zytbft/article/details/74551299
https://www.zhihu.com/question/19989337
生效
退出SSH客户端重新连接之后,vim配置文件方能失效。
提示
~/.vimrc可能不存在,新建一个就好。
~/.vimrc配置文件的最后,最好放一行注释,否则可能会执行报错。

vim无故卡死,无论如何都动不了了?

如下方案,都可尝试。 1. 切换到纯英文输入法

  1. 多按几次ESC
  2. CTRL+C
  3. CTRL+Q

nano

简单使用一下,几乎无学习成本 yum install nano

micro

# 快速安装步骤
wget https://github.com/zyedidia/micro/releases/download/v2.0.2/micro-2.0.2-linux64-static.tar.gz
tar xf micro-2.0.2-linux64-static.tar.gz
cd micro-2.0.2
[root@node1 micro-2.0.2]# ls
LICENSE  LICENSE-THIRD-PARTY  micro  README.md
./micro --help
./micro file.txt

[root@node1 micro-2.0.2]# ls -lht --full-time micro 
-rwxrwxr-x 1 1461 1462 13M 2020-02-26 10:11:39.000000000 +0800 micro
[root@node1 micro-2.0.2]# file micro 
micro: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, stripped

micro的方便之处,亲身体验之后,尤其是和vi对比,确实方便了许多:

  • 鼠标直接控制光标移动
  • CTRL+A 全选,再按一下退格键,全部删除
  • CTRL+C CTRL+V 复制粘贴
  • CTRL+S 保存
  • 不需要任何依赖,单二进制文件直接运行

几乎windows记事本的功能和快捷键,micro都有

更多帮助

官网
https://micro-editor.github.io/  

github首页
https://github.com/zyedidia/micro

常用快捷键
https://github.com/zyedidia/micro/blob/master/runtime/help/keybindings.md

"CtrlA":          "SelectAll"
"CtrlS":          "Save"
"CtrlZ":          "Undo"
"CtrlY":          "Redo"
"CtrlC":          "Copy"
"CtrlX":          "Cut"
"CtrlV":          "Paste"

"CtrlF":          "Find"    
"CtrlN":          "FindNext"       按一下回车
"CtrlP":          "FindPrevious"

"Home":           "StartOfLine"
"End":            "EndOfLine"
"PageUp":         "CursorPageUp"
"PageDown":       "CursorPageDown"

"CtrlR":          "ToggleRuler"    开关行号
"CtrlQ":          "Quit"   退出

"CtrlK":          "CutLine"
"CtrlD":          "DuplicateLine"

busybox

busybox 是一个单文件超强程序,内置vi,详情参考 http://xingyongsheng.top/containerization/xdocker/#busybox

参考资料

21 Best Open Source Text Editors (GUI + CLI) in 2019
https://www.tecmint.com/best-open-source-linux-text-editors/