Is there any extendable editor out there with vi-like modes?

I'm looking for a perfect text editor :)

The "must have" list:

  • vim-like modal editing, keybindings similar to vim
  • emacs like extendibility - same "real" language for plugins and the editor itself, so that the extension can affect almost anything in the editor and outside... vim script is not enough, python plugin is not enough either
  • plugins are not limited with regards to external processes, can change the text asynchronously, etc.
  • supports termcap / curses, so that it can run a real terminal inside
  • uses real syntax parsing, so that plugins can get back information about the word's "type" without going through the "what's it's colour" path (synIDattr(synID(line("."), col("."), 1), "name") is a no-no)
  • remote editing possible (but that is probably already guaranteed by the plugins + extendibility points)

I know about viper emacs, but I'm not sure whether I like the idea... Does anyone know about something better?


I'm not a full time programmer. I'm an admin / programmer / power user who already spends all the time in the console on many hosts at once and 95% of that time, it's vim running. I love vim, but I'm looking for vim-im ;) Eclipse doesn't cut it for me, as most of the time I'm editing configs / dsls with my own syntax files.

Sometimes I do need a kind-of-refactoring plugin for things that I do frequently. I have a proof that it can be done in vim, but it's real pain... You can't request a "previous token in parse tree" for example. The best that you can do is go back char-by-char and check if the word has the same colouring style as a variable/function/whatever (which requests parsing of the file fragment at every check). If I can't extend the editor in simple scripting language, it won't work for me either.

Also I frequently need to have a second terminal just to run something and copy the output to vim. I can't run :!r... because it hangs every tab in vim until the command is finished.

Ah - and linux + console only - I'm not interested in windows world :)


From one vim'mer to another -- your search is futile, abort, abort, etc..

If you're frustrated at whatever editor your IDE is using (eclipse jumps to mind), then either use vi as an external editor, or get used to the text editor that the IDE uses. The reason being is that nobody, apart from vi users, finds vi natural, and therefore the demand for vi key bindings in any "modern" editor will be radically different.

If you really love vi and terminal mode and all that, use vi. If you want something a bit more intelligent, go with vim.


Found it after all :)

Yi supports both vim (with modes and :commands) and emacs keymap. It uses proper incremental parser and is completely extensible with haskell (it interfaces with ghc and compiles your config/plugin + links itself to the result). Tabs, minibuffers and every other cool thing is supported.

I'm using it for the last couple of days and I'm really happy with it.

Kate/Kwrite in KDE4.2 beta's now has a vim-like mode,

The whole [Esc] --> Command mode deal, the :help and s/ friends features are included.

Its not really a full implementation, but it has some of the basics covered.

There is also the Yzis editor which looks interesting and I can't wait for it to be stable enough to use, which lets you have the power of vim editing everywhere.

I can't wait to be editing my stackoverflow posts in a syntax highlighting editor with full power tools :D

There's a plugin for Eclipse that basically changes the editor for a vim editor.

Need Your Help

How to integrate Twitter and Post tweet in application with common code using Phonegap for Android and iOS?

android ios twitter cordova

I want to Integrate twitter to Login and Post Tweet within the application How can I do that with Phonegap?

Using RabbitMQ (Java client), is there a way to determine if network connection is closed during consume?

java rabbitmq amqp

I'm using RabbitMQ on RHEL 5.3 using the Java client. I have 2 nodes (machines). Node1 is consuming messages from a queue on Node2 using the Java helper class QueueingConsumer.