However I couldn't stick with it for two reasons. The first is when I went to figure out how to customise it, I found that the customisation is essentially vim like but weaker. Everything is hardcoded like it would be in vim but with less options. If you're used to Emacs insane customization, this is the other end of the spectrum. The stuff that IS customisable works by executing embedded bash scripts[1]!? You can only embed these in specific hooks and places, so it's really limited, and platform specific. Install this on a system missing a bash feature someone is using and who knows how it'll behave.
Basically, the features implemented are gorgeous, but past that I can't stick with it. Just going to consider trying to port the selection based movements to a vim plugin but I think it'll be a challenge.
1: https://github.com/mawww/kakoune/blob/master/rc/clang.kak
Glad to hear you liked the interaction model, may I ask you what kind of options were missing for you ?
The extension model is, I agree, unorthodox, but I think it does work reasonably well (the file you linked manage to provide asynchrounous clang completion and syntastic like diagnostics using it), and keeps things simple. Note that we try really hard only to depends on POSIX tools, so the scripts are actually targeting POSIX shell.
The rational behind this extension model can be found there: https://github.com/mawww/kakoune/blob/master/doc/design.asci...
And a more in depth explanation on how to use it is there: https://github.com/mawww/kakoune/blob/master/doc/interfacing...
> We do not have options for everything, but I'll gladly add more options if there is a reasonable use case for them. In other words, options only get added if someone requests them (and makes a good case for them).
I don't really want to switch to an editor where missing options might have to be justified. I'm not knocking your work, it's really good, and my complaint applies to vim as well. But if I can't implement something myself as an add-on (which I definitely have more power to do in vim) and have to wait for it to be patched and released in your release cycle I'd rather just try and implement your features in vim and keep the customisability.
Having said that I could be wrong and maybe the plugin system is more powerful than I thought. But as an example, I have a 5 line function letting me have ctrl-p like functionality backed by fzf in vim. I can't figure out how I would do that in kakoune at all.
iPhone 5s, iOS 9.1. sorry to all reading my tweet about the snark. But I just find it so sad that I have so much rendering power on desktop (JavaScript on/off, elinks web browser, my rss reader), but if some silly CSS thing borks the mobile page, there's nothing I can do.
http://i.imgur.com/zUYt7V9.jpg
On the subject of kak, I tried it a few months ago and thought it was really impressed by it but didn't stick with it long enough to decide if it would be better than vim for me.
The biggest issue I had with it, that made me return to Vim instead of try and keep with Kakoune, are the lack of options. A lot of the settings appear to be hardcoded, with no way to set them even with : commands. While it does have scripting support, and a lot of the core application is implemented with it, there doesn't seem to be any docs on how it works or any community behind it.
Way better ergonomics than vim and elisp is extremely easy to hack on.
Very interested to know what was missing for you ? We do not have options for everything, but I'll gladly add more options if there is a reasonable use case for them. In other words, options only get added if someone requests them (and makes a good case for them).
scripting support is documented in: https://github.com/mawww/kakoune/blob/master/doc/interfacing...
My dream editor would feature: * Three modes: insert, quick commands, a searchable palette for everything. * Configurable switch between modal/non-modal use of the command key. * On screen display for quick command mode (e.g. a partially translucent display of the keyboard when command mode is entered with icons to show what each key does).
The memorability issue for key-strokes doesn't really exist in a modern desktop environment. It is a relic of terminals with low bandwidth and poor support for multiplexing information. In a windowed / eye-candied environment the memorability of shortcuts should be a non-issue and discoverability of the command-set should be improved.
At this point I have to accept that I've said way too much in response to your nitpick and I will stop typing now :)
I work on different keyboards, actually 3 different layouts: external keyboard home and at work, home laptop, and work laptop (different one).
I think it would be difficult to do the emacs chords on different layouts. For basic vim usage I just need to adapt to 2 special keys - colon and slash (+ right shift). That takes just few minutes.
1. Slime-like interaction: In vim I'm used to [vim-slime](https://github.com/jpalardy/vim-slime) for interactive languages such as python but I couldn't yet find an equivalent way to do it in kakoune. I suspect there is an easy way to do something like this using `:new` or the tmux integration but I don't know how.
2. Executing commands in the underlying shell: With C/C++ I usually need to work only with a single file and a fast compile-run cycle. I have simple functions defined for compile and run in my vimrc so that I can do it with a simple key map but I'm not sure how to do this in kakoune. The problem is sometimes output of my program exceeds one line so `:echo` is not quite useful here.
3. ctags/cscope integration: I haven't really checked this yet but I need something for jumping around in large codebases.
1. that is missing, but mostly because nobody needed it yet, and I am not very familiar with repl style languages. I expect it to be implementable with current features.
2. The simplest way to do that is to set the makecmd option, options can be set per buffer, so each C++ buffer can have it set to the compile command for it. You'll get output in the make buffer.
3. I use ctags a lot, and it is well supported, it requires the readtags command that is provided by default in universal-ctags, and needs to be installed manually with the older exuberant ctags. There is no cscope support script AFAIK (although should be possible).
What I think would be a killer for a vim successor would be to keep the best-in-class editor functionality, add decent extensibility (not vimscript) in the core product. Then add support for stuff commonly found in IDEs: notion of projects/subprojects, API to support plugging syntax parsers easily, source control integration, etc., and offer core plugins for a few popular languages.
They're addressing all the hardcoded parts so it should be possible to make any of these with an addon / some nvimrc magic.
One thing I'm not 100% sure how to do is substituions with references
so if I want to change the all the strings "foo(5, bar)" to "baz(bar).foo(5)"
with 5 and bar being arbitrary strings. How could I do that? In vim I would use a regex expression and refer to matching sections with "%s/foo(\([^,]+\), \([^)]+\))/baz(\2).foo(\1)/gc". In Kakoune it seems I might have to do some multiselect shenanigans, the regex has better escaping for my taste, but I can't match on specific selections. So I can't shuffle them arbitrarily.
I looked through the vim golf challenges and couldn't find Kakoune doing an operation like this.
mawww, do you have some screencasts of you using this editor? I would be nice to have some live demonstrations showing off useful and common usage patterns for it.
If you get your selections through a regex, you will have access to capture groups in registers 0..9 (which will store the correct match for each selections), so to do the change you wanted, you'll type (in normal mode, no ':'):
%sfoo\(([^,]+), ([^)]+)\)<ret> # select whole buffer, then select all regex matches
cbaz(<c-r>2).foo(<c-r>1)<esc> # enter insert mode, <c-r> recalls a register
I have been meaning to do a screencast at some point, or maybe I could do a twitch Q/A session.