拿起画笔,描绘你心中的Vim(来自Ame的倡议)


[image]
我有一个梦想!
我梦想有一天,Vim不再仅仅是程序员的宠儿,而成为尽人皆知的编辑器。当我打开国内软件下载站的页面时,能看到右图这样的画面。

这不可能吗?现在的Vim的确不可能。但一个完全面向普通人的Vim呢?

1. 所谓的文本编辑器

维基百科中“文本编辑器”一词定义如下:文本编辑器是用来编写纯文本的计算机软件。操作系统和软件开发包往往都提供文本编辑器,用以修改配置文件和程序的源代码。百度百科则说的更直白:文本编辑器(或称文字编辑器)是用作编写普通文字的应用软件,它与文档编辑器(或称文字处理器)不同之处在于它并非用作桌面排版(例如文档格式处理)。它常用来编写程序的源代码

看到了吗?文本编辑器原本就是程序员的禁脔,想用它们编辑纯文档的普通用户,就像误入童话王国的Alice一样,不是那么受欢迎的。

但Vimer的心胸依然宽大,煞费苦心在桌面上放置了easy模式,还翻译了准确的中文帮助——这一切对程序员来说都不是必须的。我们要感谢Vim社区的良苦用心,但同时也要看到,(即使经过种种努力)Vim依然是一个面向程序员,而非普通用户定制的程序。

2. 普通用户和程序员的需求差异

普通用户和程序员对编辑器的要求南辕北辙。程序员写代码,一般人写文档。程序员用英文多,一般人用中文多。程序员需要IDE整合,语法高亮,编译支持。而一般人仅仅期望通过可自定制的vimrc,快捷键,宏和少许插件提高工作效率,并且没有太多时间花费在处理软件问题上。不同需求,自然需要不同的整合方案来解决。
就像下图所示:
[image]

熟悉Vim的老手都知道,Vim.org提供的整合安装包(即Vim73.exe)只是一个大众化的BIG版本,其中很多功能没有开启。他们鼓励程序员下载源码编译出适合自己的程序。例如Vim一直为人诟病的等宽字体问题,实际只需要改动make文件中的一个选项,重新编译一遍即可。既然个性化定制Vim可行,为什么不把它改造成适合大多数人的程序呢?这并不等于失去Vim最重要的特性——高度自由,事实上在谈论自由之前,我希望它能做好一个软件应尽的本分。

3. 我的建议

因此我提议搜集整合大家的意见,塑成一个大伙心目中完美的Vim模型,然后提交开源社区,招募志愿者编译代码。项目可以维护在code.google.com上,随着意见的不断丰富,完善,同时随着Vim主版本的升级可以不断推出升级版本。其核心围绕两点展开:

1. 面向普通用户优化。
2. 中文支持优化。

一些需求,例如中文分词问题,连google都不能完美解决。可以把它写在项目首页上,留待技术的进步。

先说说我想要什么样的Vim吧!

? 在任何系统下完美显示微软雅黑
? 不要再问我设置什么cp936和utf-8,即使不研究这些东西,我的脑袋也快炸了 : X
? 精简安装包,除HTML外去掉其他语法支持。
? 进入插入模式自动切换成中文输入法,退出到编辑模式时自动切换成英文输入法。

切换模式自动切换输入法,似乎改动vimrc就可以,但假如我不写这篇文章,即使过去十年,二十年,可能依然会傻呵呵的Esc之后ctrl+space。为什么?因为Vim的源程序是面向程序员定制的,程序员写代码根本就不存在切换输入法的问题。但对普通用户来说这却是最棘手,最麻烦的问题。因为它完全抹杀掉了双模式操作的优点。几乎是致命的。假如我们面向普通用户制作的Vim天生就集成这一功能,就能让新上手的用户也能体验到Vim的强大!

那么还等什么,让我们拿起画笔,描绘自己心中的Vim,把大家的愿望化为现实吧!好Vim,不做吗?XD

xbeta注: Ame的热情可嘉,我很支持。因为我自己就是一个非编程用户,最早的一篇Vim文章 《普通人的编辑利器——Vim》,也是为了纠正“只有程序员才适合用vim“的偏见;只是限于个人能力,多取适应vim的策略,没敢像Ame这样激进,准备改造Vim。但只要行动起来,还是有希望的。


《“拿起画笔,描绘你心中的Vim(来自Ame的倡议)”》 有 81 条评论

  1. 个人现在用的是雅黑mono,中文显示不是太糟糕,或者说还是很不错的。
    你的建议还是很赞啊,但是无奈我是菜鸟,只会vimtutor上学到的一些操作……

  2. 说说我的建议吧(主要针对gVim):
    1、有个GUI的配置界面,不求所有功能,只要些常用的即可;
    2、插件管理器;
    第1、2主要解决上手困难的问题,老鸟也可以简化操作,类似firefox。
    3、默认增强对中文字体和编码的兼容性;
    4、默认开启标签页;
    5、默认支持最小化托盘;
    6、常用功能的开关,如切换16进制显示,而不是通过复杂的命令。

  3. 是的,最大的问题是输入法切换的问题。用vim输入中文,每次模式切换间要增加一次ctrl+space,这带来的麻烦是vim崇尚的高效的致命杀手。

    • 关于输入中文的问题,使用插件VIMIM,支持你能使用到的所有输入法,只有两个文件,一个是插件文件VIMIM.VIM,另一个是VIMIM.*TXT词库文件,只要把这两个文件放到plugin文件夹内就可以使用了。两个快捷键:
      Ctrl+6,可以在中英混输入的情况下,把输入的英文变成中文;
      Ctrl+,就是正常的不间断中文输入;

      • VIMM的确是一个很有创意的插件,可是我觉得它的适应性不是很强,一般来讲中文用户都有自己常用的输入法,如果为了使用vim而去适应一个新的输入法,有时候很难办到,尤其是像我这种习惯了搜狗这样的自能输入法的,因为它的智能组词组句的能力不是简单一个词库可以解决的。当然,对于五笔或是某些拼音用户,VIMM还是很有价值的。

  4. 倡议不错,这样的话当我编辑中文的时候就会更愿意使用了(虽然现在也一直在使用)。。不过在使用中也没有遇到太多的不适应的地方,不过这两天遇到一个问题,就是编码的问题,简单点说就是“怎样在一个文件中设置不同的 行 为不同的字符编码,例如第一行显示为cp936第二行显示为latin1”,这个问题搞了半天没有搞定

    • 我很感兴趣你为什么有这种需求。一般的来说,你需要编辑一个文件,而一个文件的编码是固定的,只有一个。你需要不同的行显示不同的编码,你为什么不用unicode,这样都可以显示了。假如不用unicode,那么如何保存呢?难道要在每一行的开头加上codepage, 那还是纯文本吗

      • 我有一个GB2312编码的文件,里面我通过十六进制的方式强行插入了一些latin字母,这个时候如果我设置文件为latin格式的话,那么汉字显示就不会正确,如果我设置为cp936的话,那么latin显示就不会正确了。所以我同时就只能看一种是种确的了。就是设置为cp936,然后让latin部分爱显示什么就显示什么,不过貌似vim不会认为这样的文件是cp936,fileencoding打开文件会没有,除非我强行设置它的类型

        • unicode里面包含了latin字符,可以先转换成unicode,在插入latin字符。VIM应该是不具有这种功能的。不过,EMACS可以,EMACS每个字符前面都有一个字节,标志了他的encoding,不过最多只能存储256个。可以看看是不是同时映射了932和latin所属的那个encoding.

        • 我这个文件就是从unicode转换过来的,然后让我转换成了GB2312的,我用的madEdit转的,然后再用查找替换把里面的latin转换成了我想要的,emacs果真强大,可惜偶不会用,等我研究一下。。

  5. 加油,期待尽快看到成果。
    作为非程序员,刚刚学习vim一段时间,因为学习曲线过陡,且没有带来效率的提升(因为还不熟悉)正准备放弃呢。

  6. “退出到编辑模式时自动切换成英文输入法”这个很好
    “进入插入模式自动切换成中文输入法”,这个不如“自动恢复成退出之前的状态”,之前是中文状态就恢复成中文状态,之前是英文状态就恢复成英文状态

  7. 切换模式自动切换输入法,似乎改动vimrc就可以,但假如我不写这篇文章,即使过去十年,二十年,可能依然会傻呵呵的Esc之后ctrl+space。

    内牛满面……我一直都是这么做的。

  8. 切换模式更换输入法这个确实是从来没有想过,实际上现在的拼音输入法,除去搜狗,似乎都是可以在normal模式下实现操作而不是进行输入的,比如QQ拼音和紫光拼音(有的时候会失灵进入输入状态,但切换一下模式后就好了)。

    • 我用google输入法,在normal下键入会显示输入框,回车后就能作为英文字符产生命令输入,但这样的话每次输入命令都要回车,反而不如ctrl+space来的方便。紫光和QQ没用过,惭愧。

      • 能否支持vim是我选择输入法的一个指标,不使用Google输入法的一个原因就是不能支持Vim的操作(另一个是强制安装在C盘让我无法接受)。对我而言vim比输入法重要。

  9. 如果需要同时输入中英,然后再加上删除粘贴拷贝查找等复杂操作的话,用VIM我觉得很痛苦.需要不断的按ESC. 当然也可以在编辑模式下定制快捷键,使其使用起来就像普通的文本编辑器。。。。。。那么又何必使用VIM呢?按照我个人的测验,VIM并不能提高我的工作效率(仅仅对于我而言,不要喷),目前VIM对于我用处最大的就是使用终端的时候操作服务器上的文本。
    VIM的一些特性(或者称之为优点?缺点?)会限制它始终只能在一个群体内流行,不可能成为5块钱盗版盘中安装必备的推荐列表里面的一员的。也就是说,VIM是不大可能普及成为大众软件的。

    • 为什么需要不断的按Esc呢?…我有点想象不出来:( 一般来说正常操作应该是录入一段比较长的文字,在需要大的调整的时候再返回normal…不是这样吗?如果说有问题,那应该是双模式操作方式本身的问题,我觉得似乎和中英混合关系不大。

      至于Vim在编辑一般文档时相对普通文本编辑器的优点,善用佳软以前的文章就说得很好了 : )可以找出来看看。

      • 大多数人的操作习惯是,如果录入的过程中发生了错误,会马上进行调整。而不是等全部录入完毕了,再回头看看哪个录入错了或者漏了,不是吗?双模式本身没有太大问题,如果不作编辑模式下的快捷键定制的话,你需要在中,英,命令模式,编辑模式,之间反复切换。。。。。对吧!

        • 这是被Notepad等Windows软件的单模式软件养成的一个习惯,所以接触到多模式软件后,面临一个重新培养习惯的问题,不是模式本身有问题,而是使用都的习惯问题。

          这个问题没有讨论的必要,就像是刚从Windows转到Ubuntu下一样,各种各样的不习惯…

  10. 一直没能适应vim。。。仔细考虑,是因为很少花时间去写东西,需要写的话也是word搞定。。。萝卜白菜,各有所爱。。。

  11. 确实,作为“文本”编辑器,其实没有太多需求。Vim对我有效率,是因为我用它来处理html、加密的通讯录,用熟之后,顺手代替了notepad。

    我现在对软件比较自由了。TC、Vim也可以永续折腾;只有Win98+IE5的机器也能应用无怨言。

    • 是啊,我也一样,逐渐离不开的,竟然是TC。。。在Linux下面,虽然也有很多软件,但是觉得麻烦,做什么都得配置半天。。。MAC系统虽然简单,但是常用软件都有点半残,比如QQ视频,MSN分组等等。。。windows下面软件选择多很多,反而变得简单了,还是简简单单的好。。。

  12. 把选择vim插件变成选择vim分支,有意义吗?减少编译需求就可以了。没必要和qq一样搞那么多定制版本,再说定制版的代码回不回归vim主线,都成问题,回归吧,只是些配置或界面改进,没多大意思,不回归吧,又违反GPL,导致分裂,与其推定制版vim,还不如推必备插件合辑和简易安装配置脚本

    • 你说的有道理。但是Vim.exe不重新编译是不能满足我所说的要求的。: )

      我也不想搞什么分裂版本,可以采取定制一个Vim.exe搭配建议配置脚本的形式,形式并不重要,我们需要的是最后的结果——提高Vim的易用性。

  13. 非常支持!

    普通人被吓到后,懒于看帮助手册研究……于是一直丢着没用……偶尔要编辑文档的时候会想起,要是我会vim,只要几个按键就解决问题了……

  14. 其实我的建议还是做一个配置_vimrc的工具,集成一些插件的介绍,类似firefox的插件自动安装卸载(中文化一些常用插件),减少使用门槛!最好多发一些高手操作的视频,毕竟使用的人不多自学很浪费时间的!

    • 我的想法是设立一个专门的社区或者邮件讨论列表什么的 : ) 因为真运作起来的话可能不是个小项目(也有可能很简单,我不懂编程),可老大还没发话,暂时就先在这里讨论吧。

  15. 可能做程序员久了,没有办法理解普通用户对于vim的需求。
    不过我还是觉得,Linux下的东西的好玩之处,就在于,由于其高度可配置性,你能享受到这个东西只属于你自己,只适合你自己的那种感觉,你用他做什么都随你的信息。

    而统一化标准会抹杀这种独特性。

    只是随便说说,还是觉得,如果真的爱Vim,那么就学着去用他,感受他的美。

  16. 我觉得一般用户使用vim做文本处理,要求过高,因为学习的时间很长,而类似文本处理的任务对于一般人只是临时性的工作,难以激发他们的兴趣。
    另外,一般处理文档是需要图文混合的,纯文本的处理方式本身就很挑战用户习惯。实际上xbeta一直在说普通人也可以用vim,vim也是普通人的编辑利器,但是vim的使用本身需要太多计算机的知识,比如编码,比如冒号命令调用外界可执行文件执行如sort之类。
    对于文章中的建议,我确实很建议有一些志愿者可以组建一个小组,进行中文用户的编译优化。目前我觉得对于我们一般国内的使用者比较大的问题是:
    1。字体选择
    2。屏幕取词
    这两项都可以通过编译解决,但是很难找到这样编译的版本。dieken原来做了一个gvim.exe,但是版本很旧了

  17. 泼点冷水,不同的东西就是有不同的适用场景,多样化的供给才能满足多样化的需求,希望一瓢水舀尽,不现实也没有必要。提出这样一个命题,本身就是站在程序员的角度在思考,没有真正去了解小白用户需要什么。

    但很佩服作者这种充满理想主义的激情,有这样的激情就有无限可能,但愿你能成功。

  18. 适合新手的编辑器大把,何苦来折腾Vim,它的定位本来就不在于此。
    对于中文的支持倒是还有许多需要改进的地方。

  19. 无用功啊无用功
    我还想有一种糖,想吃红烧肉的时候嚼它就像吃红烧肉,想吃面条的时候嚼它就像吃面条。怎么没有人发明这种糖?
    缺乏基础的认识就想要追求完美的效果完全是缘木求鱼
    对着空白的画纸,我会练习自己的画技,而不是希望它能自己现出我想要的画面

    何不让上帝归上帝凯撒归凯撒。

    • 有两种方式:
      第一种:y 复制完以后,使用:reg查看你复制的内容在哪个寄存器里,这里刚复制完的内容在0寄存器里(vim有多个寄存器,应该理解吧);然后按/,再按CTRL+R,屏幕上出现一个”,这时再按0
      (数字0),你刚才复制的内容就上去了;
      第二种:按q:进入EX模式,在这里就跟在正常内容输入一样,i后写%s/Ctrl+R 0/…./

      不知道说的明白不

  20. 有几个问题需要说明一下。

    我承认我有点标题党了 : ( 写了个挺夸张的开头,也许这种吸引目光的做法带来了理解上的偏差,那么我说声sorry,其实我也是为了把文章的主题表达的更清楚。

    Vim当然是不可能成为“路边5块钱盗版盘的必备软件的”,提出这个想法的时候我和站长在邮件里谈的很清楚,面向的受众是“了解一定电脑知识,有兴趣为改善效率付出一定时间和精力,有使用纯文本编辑器的需要,但不懂编程,也没有大量时间耗费在编译和调整上的人群”,这部分人喜欢Vim,夸张点说,爱Vim,Vim粉(就跟果粉似的),喜欢折腾,但是没有能力编译代码。

    但是我非常不喜欢ciV的说法,你说的这种东西怎么没有呢?有,它已经有了,不过是在科幻电影里。可翻出一部19世纪,20世纪初的科幻作品,又有多少创意是今天没有被实现的呢。

    人类科技发展的动力是什么,是懒惰。假如卡尔·本茨步行觉得累的时候说,啊,这是我自己的问题,我应该锻炼肌肉,而不是发明汽车,那我们今天就没车开了。

    我的确不是程序员,也不懂多少Vim,我提出这个提案只因为自己在使用中感到不方便,而且没有google到合适的解决方案(这是重点!),假如大家也有相同问题的话,就把力量拧成一股绳,把问题解决了,假如大家没有类似的问题,那就pass,我去找我程序员朋友。

    这只是一个小人物提出的小提案,希望大家别把它看的太大了。我自己也没有解决的能力,要完成它,需要更多更杰出人物的共同努力,我只是建议罢了 : )

  21. “例如Vim一直为人诟病的等宽字体问题,实际只需要改动make文件中的一个选项,重新编译一遍即可。”
    请问是哪个参数啊?

  22. “=========
    (Windows IME 支持) *multibyte-ime* *IME*

    {仅对 Windows GUI 有效,而且编译时需加入 |+multi_byte_ime| 特性}

    要在 Windows 上输入多字节字符,你可以使用输入法编辑器 Input Method Editor
    (IME)。在输入的过程中,你必须多次打开/关闭 IME。因为在打开状态的 IME 对任何的
    输入动作都起作用,你不能在 Vim 中直接使用 ‘j’,’k’ 等几乎所有的键。

    |+multi_byte_ime| 特性在这个问题上很有用。它减少了手动切换 IME 状态的次数。
    Vim 在普通状态下几乎不需要 IME,即使是在编辑多字节文本也是如此。因此当你用 ESC
    离开插入模式时,Vim 会记住 IME 的状态并强制关闭 IME。当再次进入插入模式时,Vim
    会自动的恢复上次的 IME 状态。

    这不仅对插入-普通模式有效,同时也对查找命令的输入和替换模式有效。
    设置 ‘iminsert’,’imsearch’ 和 ‘imcmdline’ 可以选择不同的输入方法,也可以临时
    禁用它们。
    ===============”
    节选自:h mbyte-IME

    根据说明,好像能实现输入法状态的自动切换,大家有什么意见,讨论下…

  23. 我编译成功了,可以实现插入模式时使用中文输入法,按ESC进入Normal模式后,转入英文状态,再回到插入模式时自动进入中文输入法状态。如果在:version中有 +multi_byte_ime/dyn 这个的话,就表明成功了。
    使用的编译选项为
    nmake -f Make_mvc.mak GUI=yes OLE=no DEBUG=no IME=yes DYNAMIC_IME=yes GIME=yes
    同时也修改了feature.h文件,关闭下面()中的选项。
    在Windows下我不使用python2/3、sniff、tcl、lua、perl、mzscheme、sun_workshop。如是有使用的,就得自己动手编译了。
    这是网盘地址:http://www.brsbox.com/filebox/down/fc/699881db1e9f4232f86e1ebc9609e4bc
    “=======================================
    VIM – Vi IMproved 7.3 (2010 Aug 15, compiled Sep 18 2010 01:06:28)
    MS-Windows 32-bit GUI version
    Compiled by AVIKF@126.COM
    Big version with GUI. Features included (+) or not (-):
    (-arabic) +autocmd +balloon_eval +browse ++builtin_terms +byte_offset +cindent
    +clientserver +clipboard +cmdline_compl +cmdline_hist +cmdline_info +comments
    +conceal +cryptv +cscope +cursorbind +cursorshape +dialog_con_gui +diff
    +digraphs -dnd -ebcdic (-emacs_tags) +eval +ex_extra +extra_search (-farsi)
    +file_in_path +find_in_path +float +folding -footer +gettext/dyn -hangul_input
    +iconv/dyn +insert_expand +jumplist (-keymap -langmap) +libcall +linebreak
    +lispindent +listcmds +localmap -lua +menu +mksession +modify_fname +mouse
    +mouseshape [[[+multi_byte_ime/dyn]]] +multi_lang -mzscheme +netbeans_intg -ole
    -osfiletype +path_extra -perl +persistent_undo -postscript +printer +profile
    -python -python3 +quickfix +reltime +rightleft -ruby +scrollbind +signs
    +smartindent -sniff +startuptime +statusline -sun_workshop +syntax +tag_binary
    +tag_old_static -tag_any_white -tcl -tgetent -termresponse +textobjects +title
    (-toolbar) +user_commands +vertsplit +virtualedit +visual +visualextra +viminfo
    +vreplace +wildignore +wildmenu +windows +writebackup -xfontset -xim
    -xterm_save -xpm_w32
    system vimrc file: “$VIMvimrc”
    user vimrc file: “$HOME_vimrc”
    2nd user vimrc file: “$VIM_vimrc”
    user exrc file: “$HOME_exrc”
    2nd user exrc file: “$VIM_exrc”
    system gvimrc file: “$VIMgvimrc”
    user gvimrc file: “$HOME_gvimrc”
    2nd user gvimrc file: “$VIM_gvimrc”
    system menu file: “$VIMRUNTIMEmenu.vim”
    Compilation: cl -c /W3 /nologo -I. -Iproto -DHAVE_PATHDEF -DWIN32 -DFEAT_CSCOPE
    -DFEAT_NETBEANS_INTG -DWINVER=0x0400 -D_WIN32_WINNT=0x0400 /Fo.ObjG/ /Ox /GL
    -DNDEBUG /Zl /MT -DFEAT_MBYTE_IME -DDYNAMIC_IME -DGLOBAL_IME -DFEAT_MBYTE
    -DFEAT_GUI_W32 -DDYNAMIC_ICONV -DDYNAMIC_GETTEXT -DFEAT_BIG /Fd.ObjG/ /Zi
    Linking: link /RELEASE /nologo /subsystem:windows /LTCG:STATUS oldnames.lib kernel32.lib
    advapi32.lib shell32.lib gdi32.lib comdlg32.lib ole32.lib uuid.lib /machine:i386 /nodefaultlib gdi32.lib
    version.lib winspool.lib comctl32.lib advapi32.lib shell32.lib /machine:i386 /nodefaultlib libcmt.lib
    user32.lib WSock32.lib /PDB:gvim.pdb -debug
    =======================================”
    今天就做这么多了,下次开始研究字体…
    有了解的童鞋们给我发个信qjavikf@126.com

    • 刚发现一个乌龙:原版里就有这个选项,能够自动切换输入法状态;

      使用方法:按i/o/s/a后再按Ctrl+Space,切换到中文;而不是先Ctrl+Space切换到中文后再换模式…冏

        • @JLY,

          进入插入模式自动切换成中文输入法,退出到编辑模式时自动切换成英文输入法。
          我用的微软拼音就是这样的啊。不用什么额外的设置

          至于encoding,学呗。大一计算机入门课里面就有。看帮助……
          至于取词,习惯goldendict(for linux)……

  24. 使用tabnew打开多个文件后,各个tab上的文件名显示不全,应该使用多行标签页,也就是在一行无法容纳多个tab后,再增加一行放置多出的tab页。

回复 SoberGGG 取消回复

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据