我可以用哪个编辑器作为简单的vi/vim替代品?

我是一个Windows用户,通过WSL来使用Ubuntu的Bash。现在我需要编辑一些文件,但我真的很讨厌Vi。我只能忍受它吗,还是有一个更简单的替代方案?

我需要的功能是:

  • 基于命令行
  • 易于使用(键入和编辑应类似于Notepad)
  • 简单的编辑功能就足够了

我会试着掌握Vim,但我现在需要快速编辑!


这是一个观点问题。初学者使用nano https://www.howtogeek.com/howto/42980/the-beginners-guide-to-nano-the-linux-command-line-text-editor/ 。vim(vi improved)有一定的学习曲线,但非常强大 - 可参考https://www.linux.com/learn/vim-101-beginners-guide-vim或任何vim指南或vim教程,包括vimtutor(vim内置)。 - Panther
请注意,这个问题可能会被关闭,因为它涉及到很主观的意见。你可能需要重新表述一下,以符合网站的规则(例如,我可以用什么替代vim?)。 - Andrea Lazzarotto
3投票关闭此问题,因为它是基于观点的。给你一个建议:从nano开始,然后逐步过渡到vim。这样做将在长期内得到回报,因为vim基本上存在于任何Linux系统中。 - Sergiy Kolodyazhnyy
1对于我之前的评论,目前的标题仍然有争议,并可能导致关闭。人们可能会认为vim本身是“好”的,这是主观的。我可以建议使用“更容易”这个词吗?另外,指定一些期望的功能可能有助于缩小问题的范围。 - Andrea Lazzarotto
请注意,这些答案(vi、nano)仅适用于终端编辑器。虽然了解这些编辑器非常有用,但在实际操作中,您更常使用基于图形用户界面的编辑器,如Geany、Gedit、Atom、Sublime Text等等。 - Jos
mcedit(属于mc)。如果我需要其他东西,通常意味着我不需要一个文本编辑器,而是需要一个文本处理器或者一个集成开发环境(IDE)。在野外有很多基于控制台的编辑器(如piconanovivimedemacsjoe等等),但只有一个编辑器我根本不需要记忆 - 那就是mcedit(顺便说一下,它是基于cooledit的)。 - user260281
2@Jos 我们正在讨论的是WSL,其中运行GUI程序是可行的,但并不简单。此外,对于GUI编辑器来说,这个问题根本不存在,因为它们都比vim更容易使用。 - Andrea Lazzarotto
@AndreaLazzarotto 我理解"coming to Ubuntu thanks to WSL"为"我已经从Windows切换到Ubuntu"。当然,我的理解可能是错误的。 - Jos
@Jos OP写道:“来到Ubuntu的bash”。 :) 你的评论包含了非常好的建议,我只是觉得它们并不是必须提到的,因为基本上所有的图形界面编辑器都有一个合理的界面,而这在命令行工具中并不总是存在(比如vim)。 - Andrea Lazzarotto
@AndreaLazzarotto 是对的,不过还是谢谢 Jos 的建议。 - sebagomez
我重新修改了问题,以适应该网站的格式。我尽量保持与您原始目标的接近,同时澄清了一些您寻找的工具所需的特性。如果我无意中改变了您的某些要求,请进一步[编辑]问题。请参阅此处的指南:https://meta.askubuntu.com/a/14399/271 - Andrea Lazzarotto
@SergiyKolodyazhnyy 你提供的建议可能是不错的,但我也建议尝试一周“全面使用vim”。只需要学习ciwdiwyiw和几个移动命令,就能真正理解vim的用意。对于一些人来说,逐步学习可能有效,但在我的情况(以及其他很多经验案例)中,一周内深入学习效果更好,比起一步一步来,因为作为一个新手,每次从“笨拙”的编辑器切换回来时,我会诱惑自己去使用'jjjjjjjjjjjhhhhhh'。这就像以18个字符每分钟的速度学习摩尔斯电码(好习惯)与5个字符每分钟(坏习惯)之间的区别。 - SO_fix_the_vote_sorting_bug
Vim之所以值得使用,并不仅仅是因为它无处不在,更重要的是没有其他编辑器能够与之媲美。你会发现最终你会想在任何还没有安装Vim的地方都安装上它。 - NeilG
9个回答

如果您正在寻找替代编辑器,那么您并不孤单。基本上,人生苦短,没有必要为了学习 vi 而浪费时间。我是一名软件开发者,也这样说。 但是,您应该学会如何退出 vi,因为这是 2万名程序员中的一个问题。 此外,学习一些基本的附加/插入操作可能值得一学,因为在某些难缠的服务器上,您将找不到任何其他编辑器。

现在,您的问题的答案可能是 nano

如果您正在运行一些自动化构建脚本、使用 git 或运行其他命令,它们可能会在您不想使用它的情况下打开 vim。 在继续之前,您可以通过运行以下命令来防止此情况:

export EDITOR=nano

4基本上,人生太短暂了,没必要花费整个人生去学习vi。虽然有些人可能会因为喜欢vim而愿意这样做。我在YouTube上花了2个小时观看了一个很好的教程,并且一直练习从视频中学到的基础知识。现在我在Ask Ubuntu上的70%回答都是用vim编写的。 - Sergiy Kolodyazhnyy
10关于“生命太短”,我认为这篇文章有一些好的观点。在学习Vim时,最大的(人为)障碍之一是错误的前提,即你需要立即深入成为一个“硬核”用户。其实不需要。使用箭头键。使用GUI快捷键进行复制/粘贴。停留在插入模式。暂时忽略标签、寄存器和花哨的功能。在Vim中,相对快速地达到类似nano的功能水平,并且可以根据需要逐渐添加高级功能。 - R.M.
2@R.M. GUI 快捷方式? - Andrea Lazzarotto
2@Sergiy 如果你想使用高级功能,那么使用vim是有意义的。如果我像使用nano一样使用vim,我会继续使用nano(事实上,我确实这样做...当我在无法添加软件的服务器上时,比如客户机器上,我会使用vim)。 - Andrea Lazzarotto
@AndreaLazzarotto 确实!如果你可以使用你喜欢的东西-当然可以。当然,并不总是这样,如果你在处理各种*nix系统、传统系统、客户服务器等,使用vim 是有意义的。我的主要观点是 vim 没有得到适当的教学,人们过于关注“众多功能”部分,导致他们错误地认为它难以学习。事实并非如此,因为大部分时候,人们在 vim 中只需要完成其功能的 20% 或更少。我完全同意 R.M. 所说的话 - Sergiy Kolodyazhnyy
2@SergiyKolodyazhnyy 我想说的是,你不应该被要求去“学习”如何执行基本操作,比如输入一个单词、换行或退出程序。就像这张图片中的信息一样,我猜是这样的:https://twitter.com/p_redaelli/status/868385233556480000 我整天都在使用命令行工具,但我不是那种试图将文本编辑器用作集成开发环境(IDE)的人。如果我需要一个IDE,我会打开一个IDE。对于其他情况,nano 对我和99%的用户来说已经足够了。 :) - Andrea Lazzarotto
1@AndreaLazzarotto 我同意学习如何做这些基本事情不应该很难。话虽如此:输入一个单词:按下 i,然后输入单词(或词组),再按下 ESC。新起一行:按下 ENTER。退出:输入 :q。现在你已经掌握了基础知识,可以逐渐掌握更强大的功能。只需学习几分钟,就可以使用 vim 做任何你在 nano 中能做的事情,还有一些额外的功能。之后,每次你掌握一个新技巧,它都会变得更加有用。过一段时间后,它甚至比 IDE 更有用。但在达到那个水平之前,你仍然可以正常使用它。 - Ray
@AndreaLazzarotto 我所指的GUI快捷键是像ctrl-C/ctrl-V,或者ctrl-shift-C/ctrl-shift-V,或者cmd-C/cmd-V,或者highlight/middle-click这样的操作。(它们在不同的操作系统和Vim/终端界面上可能有所不同,所以我没有具体说明。)-- 关键是它们并不是"官方"的Vim操作方式,但仍然有效。 - R.M.
@Ray谢谢,我已经知道如何使用它荒谬的界面来完成这些事情了,而且我用nano时效率要高得多。不过我猜你可能没有看到我发的图片。 :) - Andrea Lazzarotto
@R.M. 如果我有图形用户界面 (GUI) 的访问权限,那么我就可以打开 Atom 文本编辑器,它具备语法高亮、多重光标、自动完成、多个选项卡/面板等实用功能。唯一需要使用 vim 的原因是当你需要一些高级功能且没有 GUI 可供使用时(前提是你记得 30 个不同的键盘快捷键)。 - Andrea Lazzarotto
我使用vi的头几个月只是进行普通的文本编辑,然后按下Esc,输入:q或者:wq,再按下回车键。如果你对一个普通的文本编辑器感到满意,在vi的插入模式下就可以作为一个普通的编辑器使用,只要你的终端允许你选择文本和复制粘贴。然后,当你开始希望更快地完成某些操作时,你可以逐步学习相应的命令来实现。 - mtraceur

这是一个观点问题。

初学者使用nano

vim(“vi improved”)有一定的学习曲线,但它非常强大。请参阅vim初学者指南或任何其他vim指南或vim教程vimtutor(包含在vim中)。

目前我强烈建议使用nano。

nano -B /path/to/file/to/edit

-B 做备份
命令使用控制键发出,并在编辑器窗口底部列出。
有一个关于语法高亮的指南,请参阅:如何在nano中启用语法高亮?

nano

emacs是替代vimnano的另一种选择,而且也有许多优点。相比nano,emacs更加复杂。你可以查看emacs之旅

为了完整起见,使用vim + Zenburn等主题可能会非常有帮助。

Zenburn


2不仅仅是初学者,基本上所有不愿参与Vim vs Emacs大战的人都不想进入其中。 :P - Andrea Lazzarotto
嗯,公平地说,你可以为vim设置主题,并且一个.vimrc文件可以帮助很多。vim和emacs拥有一些高级功能,在nano中是不可用的,但如果你不使用这些高级功能,那就是浪费了。对于快速基本编辑,我使用nano,尽管总体上我是一个vim迷。http://kippura.org/zenburnpage/ - Panther
-B点个赞 :D - Ravexina
1学习 vi/vim。:) 它存在于每个*nix设备上。:) 基础并不难。 - fugitive
3Emacs比Nano更复杂。这可能是年度最低调的说法了。 :p - Daniel Jour
@DanielJour 通过几行源代码来实现的,耶 :P - cat
老实说,我真的不明白为什么人们会说“vim非常强大”,除了在vimtutor的第一行中自称如此之外。我可以用VS Code或其他编辑器做到vim能做的任何事情,而且按键要少得多。 - user3932000
nano 使用时可能需要的快捷方式的简要总结:注释多行代码:esc+3,删除多行代码:ctrl+k (实际上是剪切这些行,但如果之后不粘贴它们,则没有区别);-),粘贴行:ctrl+u("u" 代表 "uncut"),搜索内容:ctrl+w 然后输入名称并按回车键,跳转到特定行号:ctrl+shift+w,取消操作:ctrl+c,保存:ctrl+o,保存并退出:ctrl+x,撤销:alt+U,重做:alt+E - aderchox
猫。它存在于每台Unix机器上。对我来说很有效。 - user10489

作为一个Windows高级用户,在尝试了vim和nano之后,我发现我需要一个介于两者之间的复杂程度的东西。 所以我尝试了slap,这正是我一直在寻找的完美选择

slap image

slap是一款类似Sublime的基于终端的文本编辑器,旨在使从终端进行编辑更加便捷。 slap具有一流的鼠标支持,即使在SSH连接下也能正常使用。
安装:
curl -sL https://raw.githubusercontent.com/slap-editor/slap/master/install.sh | sh

6你忘了提到主要的卖点,一流的鼠标支持(即使在SSH连接上也是如此) - Ahmad Ismail

Tilde 是您正在寻找的完美选择

引用自Tilde的主页

Tilde是一个面向控制台/终端的文本编辑器,为那些习惯于Gnome、KDE和Windows等图形用户界面的人提供了直观的界面。例如,复制当前选择的快捷键是Control-C,粘贴先前复制的文本的快捷键是Control-V。另外一个例子,可以通过按Meta-F来访问文件菜单。

如果您习惯于像下面这样的键盘快捷键

  • Ctrl + C复制,
  • Ctrl + V粘贴,
  • Ctrl + A全选,
  • Ctrl + Z撤销,
  • Ctrl + Y重做,
  • Ctrl + F查找,
  • Ctrl + S保存,
  • 等等......
你会发现Tilde的默认快捷键和界面整体上非常直观。
请参阅https://github.com/gphalkes/tilde#installing-tilde以获取安装说明。
这是Tilde的外观。 A Tilde screenshot

1https://camo.githubusercontent.com/cc46af81e544b440142f7c3ce6e49e472e6d8c733a374f483ab725ae0dbbd7b3/68747470733a2f2f6f732e6768616c6b65732e6e6c2f74696c64652f74696c64652d73637265656e73686f742e706e67 - Valerio

你是否曾经对你的文本编辑器感到沮丧,因为它不能按照你的意愿工作?你是否因为找不到帮助而感到愤怒?你是否忘记了“:wq”是什么意思?你是否还记得你在大学时读过的那些小Lisp书籍中的任何内容?
一个小而勇敢的世界正在等待着你!
在我们推荐我们最喜欢的轻量级文本编辑器之际,让我向你推荐一款优秀、小巧、快速的xo (exofrills)
它只有一个Python 3文件,并且通过Pygments提供了良好的语法高亮支持(尽管对非Python语言的支持并不完美)。

enter image description here

它还具有非常简单和有用的键盘组合,可以轻松地根据您的喜好进行自定义。

enter image description here

其他功能:
- 单个文件不超过850行代码! - 语法高亮! - 正则表达式匹配和替换! - 搜索历史缓存! - WTFPL许可证! - 完全可定制! - 可以从非起始位置开始! - 在一行中跳转单词! - 跳转到文件的任何位置! - 整个文件插入! - 适合初学者 - 也许你对单词还不熟悉! - 复制和粘贴文本! - 行和列状态! - 只有一行非文本编辑空间! - 同时保存和加载!
Python3源代码在github上,您可以更轻松地安装它。
sudo apt install python3-pip
sudo pip3 install exofrills 

exofrills:你的文本已经被编辑过了...但是你还是饿着肚子。
免责声明:我与exofrills项目无任何关联。

1这看起来非常整洁,我给加1。虽然那么多感叹号有点让人不安。 :P - Andrea Lazzarotto

虽然我不能否认我在开始时也与vi有些困惑,但我认为可以说vi实际上非常简单易学。(当我开始使用Unix时,选择只有vi或emacs,所以那时我选择了ed,因为ed是一个非常简单的行编辑器,我已经通过阅读早期的Unix教材学会了它。)我每天都使用vi,但我可能只使用了它的一小部分功能。
首先,让我们来谈谈使用vi的理由:vi存在于所有系统中,占用资源很少,并且可以在不稳定和慢速连接下使用,而其他编辑器可能会失败、变得缓慢和无法使用。或者在系统损坏的情况下,箭头键无法正确解释(例如,terminfo设置错误)。因此,vi可以用来修复导致问题的配置文件,而不受问题的影响。
接下来是如何学习vi的有用子集: 首先:停止将vi视为交互式的终端GUI“编辑器”,而将其视为用于操作文本文件的编程语言。在开始时,“vi”代表VIsual模式,而vi有一个非可视的对应物ex,这是一个很好的起点。 在shell提示符下输入ex(我将使用¬表示回车):
$ ex¬
Entering Ex mode.  Type "visual" to go to Normal mode.
:

现在按回车键。
:¬
E749: empty buffer
:

好的,让我们在里面放点东西。输入"a¬",然后输入一行文本,然后在单独的一行上输入一个句号。
:a¬
Hello World¬
.¬
:

那个是追加命令。简单、简洁又易记。但能看到缓冲区里面的内容会更好。
:%p¬
Hello World
:

那是打印命令,显然是p。%是行范围的简写。每个命令前面可以加上行号或范围,以应用于特定行。%表示“所有行”。$表示最后一行,句点表示当前行。数字表示特定行。范围写作n,m,数字可以加减,所以.+1,$-1表示从下一行到倒数第二行。只有一个行号的命令会跳转到该行。这里是我使用的剩余小部分命令。
:1i¬
this text is inserted before line 1.¬
.¬
:

:w /tmp/filename¬
"/tmp/filename" [New] 2L, 49C written
:

w将所有(或选择的范围)行写入文件。
:1d¬

删除第一行。
:.s/Hello/Hello,/¬
Hello, World
:.s/$/!/¬
Hello, World!

s

代表正则表达式。了解正则表达式是很好的!
:q¬
E37: No write since last change (add ! to override)

q退出。wq写入并退出。q!退出而不写入,类似地,w!如果可能的话,强制写入文件。
现在是一个酷的例子:
:p
Hello, World!
:.!tr a-z A-Z
:p
HELLO, WORLD!

!作为一个命令将行过滤到shell命令中。

最后:

:vi¬

进入可视模式。 不要被骗了。它看起来像一个编辑器,但实际上只是一个交互式编程 shell。你只是一直在查看缓冲区,并且有一些额外的命令。在可视模式下,: 会显示 ex 模式的提示符。箭头键(如果它们有效)可以移动光标,如果不行,那就用 hjkl!h 向左,j 向下,k 向上,l 向右。0 移动到第一个字符,^(想象正则表达式!)移动到行首的第一个非空字符。$(再次是正则表达式!)移动到行尾。输入 :999¬ 可以自然地跳转到第 999 行,就像在 ex 模式下一样。
"i" 进入插入模式,现在插入的是字符而不是行,并且按下 Escape 键结束,而不是 ".¬"。"I" 在行首插入,"a" 在光标下的字符后插入,"A" 在当前行的末尾插入。输入完文本后,始终按下 Escape 键。"x" 删除光标下的字符,"D" 从光标处删除到行尾。"Y" 复制当前行,"P" 粘贴它回来。":pu" 做相同的操作,但可以在前面加上行号。":ya" 是 "Y" 的 ex 命令等效形式,同样适用于应用于行范围。我想还有一个标记命令,但我承认我不记得了。我不怀念它。
以上是我使用的内容,我知道我可能不是一个非常 "高效" 的 vi 用户。另一方面,我确实使用 ex 的多功能性,例如用于脚本编辑配置文件。需要将主机名 foo.bar.com 更改为 www.foobar.com 在多个配置文件中吗?
for file in conf/*
do (echo "%s/foo.bar.com/www.foobar.com/" ; echo "wq") |ex $file ; done

我想说的是,我认为vi的问题在于人们认为它是一个难以使用的编辑器。只需要稍微改变一下思维方式,将其视为一个非常简单但也非常强大的交互式编程语言。它如此强大,即使只使用其中一部分可用命令,你也可以将其用于极佳效果 - 不仅作为编辑器,还作为与Unix其他部分紧密集成的通用、可脚本化的工具。我怀疑nano是否能做到这一切 - emacs...也许可以。

6抱歉,但是这并没有回答问题。楼主要求提供一个替代 vim 的选择,回答应该满足这个要求。 - Andrea Lazzarotto
3我赞赏你对这个回答的努力,但实际上它并没有回答问题——一个关于vim的教程和推广完全不适合出现在这里,但它确实适合放在你的博客上。 - cat
这个答案恰恰是为什么有那么多人要求一个viemacs的替代品的原因 - 我们越是说它们用起来不舒服,越有人坚持让我们更努力地使用它们。 - Shukri Adams

你可以试试micro

对于熟悉Windows的人来说很自然。

还有一些Rust的替代品。虽然没有那么强大(但更快)。


Mcedit

这是Midnight Commander中被严重低估的内置编辑器。 安装:

sudo apt install mc

使用它来编辑文件,请执行以下命令
mcedit file-name

用戶友好性的改進
启用了鼠标支持,但最好通过按下 F9 并进入 General 菜单来禁用令人讨厌的“持久选择”。
一些默认绑定是奇特的,尤其是复制-剪切-粘贴,但所有都可以通过 ~/.config/mc/mc.keymap 文件中的 [editor] 部分进行配置。该文件最初不存在,所以你可以从 /etc/mc/mc.keymap 复制一份。
为了方便起见,我附上了我在切换到 Vim 之前使用的那个文件。
[editor] Store = ctrl-c Paste = ctrl-v Cut = ctrl-x Undo = ctrl-z Redo = ctrl-y Save = ctrl-s EditNew = ctrl-n MarkAll = ctrl-a Search = ctrl-f SearchContinue = ctrl-alt-f Help = f1 UserMenu = f2 Mark = f3 Replace = f4 Copy = f5 Move = f6 Options = f7 Remove = f8 Menu = f9 Quit = f10; esc SyntaxOnOff = f11 SaveAs = f12 SyntaxChoose = ctrl-alt-x ShowNumbers = alt-n Goto = alt-l Up = up Down = down Left = left Right = right WordLeft = ctrl-left WordRight = ctrl-right Enter = enter Return = shift-enter; ctrl-enter; ctrl-shift-enter BackSpace = backspace Delete = delete PageUp = pgup PageDown = pgdn Home = home End = end Tab = tab Top = ctrl-up Bottom = ctrl-down TopOnScreen = ctrl-pgup BottomOnScreen = ctrl-pgdn DeleteToWordBegin = alt-backspace DeleteToWordEnd = alt-d DeleteToEnd = ctrl-k MarkPageUp = shift-pgup MarkPageDown = shift-pgdn MarkLeft = shift-left MarkRight = shift-right MarkToWordBegin = ctrl-shift-left MarkToWordEnd = ctrl-shift-right MarkUp = shift-up MarkDown = shift-down MarkToHome = shift-home MarkToEnd = shift-end MarkToFileBegin = ctrl-shift-home MarkToFileEnd = ctrl-shift-end MarkToPageBegin = ctrl-shift-pgup MarkToPageEnd = ctrl-shift-pgdn MarkScrollUp = ctrl-shift-up MarkScrollDown = ctrl-shift-down MarkColumnPageUp = alt-pgup MarkColumnPageDown = alt-pgdn MarkColumnLeft = alt-left MarkColumnRight = alt-right MarkColumnUp = alt-up MarkColumnDown = alt-down MarkColumn = f13 ReplaceContinue = f14 Complete = alt-tab InsertOverwrite = insert Refresh = ctrl-l Sort = alt-t Mail = alt-m ParagraphFormat = alt-p MatchBracket = alt-b ExternalCommand = alt-u Bookmark = ctrl-u BookmarkFlush = ctrl-delete BookmarkNext = ctrl-alt-down BookmarkPrev = ctrl-alt-up Shell = ctrl-o InsertLiteral = ctrl-q MacroStartStopRecord = ctrl-r ShowTabTws = alt-underline ShowMargin = ctrl-b FilePrev = alt-minus FileNext = alt-plus SelectCodepage = alt-e WindowFullscreen = ctrl-t
如果你喜欢它,可以通过运行select-editor来更新你的默认编辑器。

是的,mcedit 是一个非常好用、易于使用的编辑器。如果你想要一个编程增强版的它(例如:从 CTags 索引中自动补全符号),你可能想要查看 http://neomcedit.software。 - psprint

micro 似乎非常适合你。它是一个类似于 vinano 的终端编辑器,但具有更加合理的按键绑定。例如,Ctrl+C 是复制,Ctrl+V 是粘贴,Ctrl+S 是保存,Ctrl+Q 是退出等等。它还内置了许多语言的语法高亮显示,并支持鼠标操作。
如果你只想打开文件、编辑文件并关闭文件,这是最简单的方法之一。

猫也可以工作!按下shift-ctrl-c复制,shift-ctrl-v粘贴,ctrl-d保存并退出。 - user10489
@user10489 猫没有剪贴板,那些是由你的终端模拟器提供的,并且在tty中不可用。 - typecasto
是的,太对了。然而,这并不改变结果。 - user10489