This is a vim like editor written in bash shell.
本程序使用shell脚本实现了一个命令行编辑器,并集成了Vim中常见的功能
- 首先进入
myshell.sh
所在的文件夹 - 使用
chmod u+x ./myshell.sh
为脚本文件添加执行权限 - 使用命令
./myshell.sh [FILE]
运行编辑器,其中[FILE]
为所需要编辑的文件路径(相对路径或绝对路径)
此编辑器分为四种运行模式:命令模式command
,底线命令模式lastline
,插入模式insert
和替换模式replace
打开编辑器后,默认进入的模式即为命令模式。在命令模式下,底部不出现模式提醒;而在其余模式下,会在文章下方提示当前所处的模式
在命令模式下,不能直接输入字符进行插入或替换,需要通过一些命令来帮助改变文档内容(与Vim的逻辑类似)
以下为命令模式中所涉及的命令:
h
/j
/k
/l
:分别代表光标向左/下/上/右移动↑
/↓
/←
/→
:分别代表光标向上/下/左/右移动x
:删除当前位置之后的字符(相当于[del]
)X
:删除当前位置之前的字符(相当于[backspace]
)0
:将光标移动到当前行的最左端$
:将光标移动到当前行的最右端[SPACE]
:将光标向后移动$n$个字符($n$为输入空格之前输入的数字),若之前未输入数字,则默认向后移动一个字符[ENTER]
:将光标向下移动$n$行($n$为输入回车之前输入的数字)[BACKSPACE]
:将光标向前移动$n$个字符($n$为输入退格键之前输入的数字),若之前未输入数字,则默认向前移动一个字符G
:将光标移动到指定的第$n$行($n$为输入G
之前输入的数字),若之前未输入数字,则默认移动到最后一行dd
:剪切从当前行开始向下的共$n$行($n$为输入dd
之前输入的数字),若之前未输入数字,则默认剪切当前行yy
:拷贝从当前行开始向下的共$n$行($n$为输入dd
之前输入的数字),若之前未输入数字,则默认拷贝当前行p
:在当前行的下一行粘贴剪贴板中的内容P
:在当前行的上一行粘贴剪贴板中的内容i
:进入插入模式(光标仍保留在当前位置)a
:进入插入模式(光标向后移动一个位置,从后一个字符开始插入)o
:向后插入一行空行,并从后一行进入插入模式O
:向前插入一行空行,并从前一行进入插入模式r
:进入替换模式,使用下一个输入的字符替换当前光标所在位置字符;替换一次之后立即退出替换模式R
:进入替换模式,并可以多次替换字符:
:进入底线命令模式
在底线命令模式下,会在文档下方显示如下内容:
-- LAST LINE --
:
输入的命令会在冒号之后呈现,通过输入回车可以应用相应的命令
本程序中实现的命令如下所示:
[ESC]
:返回命令模式q
:退出编辑器,若文档发生修改,则进行警告提示并返回命令模式q!
:不进行保存,强制退出编辑器w
:保存修改并返回命令模式wq
:保存修改并退出编辑器e!
:放弃对文件的所有修改,恢复文件到上次保存的位置后返回命令模式- 其他无效命令:进行警告提示并返回命令模式
在插入模式下,会在文档下方显示如下内容:
-- INSERT --
在插入模式下,可以通过方向键控制光标移动,输入任意字符实现在光标位置插入,并通过退格键进行删除
按[ESC]
键可以返回命令模式
在替换模式下,会在文档下方显示如下内容:
-- REPLACE --
在替换模式下,可以通过方向键控制光标移动,输入任意字符实现在光标位置替换,并通过退格键进行删除
若为通过
r
进入的单字符替换模式,则在替换完成当前字符后立即返回命令模式
按[ESC]
键可以返回命令模式