Hacker Newsnew | past | comments | ask | show | jobs | submitlogin
Why Kakoune – The quest for a better code editor (kakoune.org)
631 points by petepete on Dec 13, 2016 | hide | past | favorite | 327 comments


If you are wondering why Kakoune and not Vim, the OP claims...

(you find following passages later in his post and they don't reflect my opinion)

> A design goal of Kakoune is to beat vim at its own game, while providing a cleaner editing model.

> Kakoune manages to beat Vim at the keystroke count game in most cases, using much more idiomatic commands.

> Kakoune provides an efficient code editing environment, both very predictible, hence scriptable, and very interactive. Its learning curve is considerably easier than Vim thanks to a more consistent design associated with strong discoverability, while still being faster (as in less keystrokes) in most use cases.


The last one is compelling, but the new "editing language" and paradigm that's been put together is _really_ compelling. Being able to see what a "sentence" is going to do as you're typing it is a huge improvement on vim. I _love_ vim, but executing complex commands is like shouting into a dark tunnel and hoping the person on the other end understands what you were trying to say.


That's why I tend to use visual mode. It sounds like Kakoune is basically visual mode by default, which is cool but not that different.

This example was a bit silly: "dtf will delete to next f, if you then realize that was one f before the one you targeted, you need to undo, go back to your initial position, and try again with d2tf."

There's no need to undo. Just follow up with a dot and you're done. Which pretty much illustrates my other general strategy, which is to edit incrementally without worrying about getting each command perfect.

(Which is not to say I don't find Kakoune intriguing.)


If you just replace 'd' with 'y', though, the example is a good one: hitting period would just yank the same thing again.

Edit: the yank example is actually way better, because you don't find out that you did something wrong until you go off and paste it somewhere else.


If you aren't sure where you'll end up with, do, in this case

   mmffffy`m
Why would this be better? Because it works in macros too. In vim, you can record it as you go. In vi(nvi), I write it somewhere in the file, basically after I did it once, I would do

   Ommffffy`m^[0"wDdd
and use

   @W
later.

You can of course use vim's visual mode, but in this simple case, there's not much difference.


Seriously? What is the advantage of using your cognitive capabilities to write Ommffffy`m^[0"wDdd rather than use a sensible IDE with common refactoring capabilities that are also context aware and integrated with the language you are using?


In vim the only part you need is mmffffy`m.

With practice, it's more like finger memory than cognitive load. What he's doing is setting a mark named "m", going to the second "f", and yanking from there back to the mark. It's a fairly interactive sequence as you move the cursor around, so while it looks scary in print, in practice it's just a series of actions you don't think about much.

An advantage to using commands like this is that you can record them into macros with just a couple extra keystrokes as you go. I used to do a lot of SQL and I'd get bored and frustrated, until I learned to use macros in vim to automate the repetitive parts.

Compared to IDEs, why not both? For languages with good IDEs I tend to use them with vim emulators.


Ok, then the problem is more fundamental. If you have always repetitive parts you have a lot of duplication. Duplication is really evil. Please stop using macros without even thinking and instead start thinking how to kill the duplication. That will be much more useful in my experience. Btw I don't think it ever happened in my life that I had to copy up to the second f, and just the thought feels pretty scary..


SQL is just inherently repetitive. What I would do with macros is start with a simple list of column names and turn it into a statement updating them all, or a join, or whatever I needed. Eg. a macro could turn "FirstName" into "a.FirstName = b.FirstName", and then work just as well on "LastName".

In other programming I don't have particular favorite macros, but still find small repetitive bits here and there that can be turned into temporary macros. Say for example you have ten variables that each need to be reset to zero. Don't type all the resets, just type the variables, turn one of them into a reset while you're recording into macro w, then type 9@w to do the rest.

Copying up to the second f is just a silly example. It could maybe occur though if you were manipulating lines in a data file. You look at it, see that on each line you want to do something with everything up to the second f, so you make a macro. You don't save it for general use.

In short, macros aren't for major repetition that should be factored out, they're for the minor repetitive edits which, if you're not using vim, you might not even think of as repetitive. Sometimes they're useful for refactoring.

So no, I'm not using macros "without even thinking" and this would probably be a more productive discussion if you didn't make such assumptions.


The second example that you made is perfect for my point. Why in the world I would possibly want to have 10 different variables, all of them explicitly reinitialised to zero, if I can just write "a = new int[10]" ? (And it is so compact that it doesn't even deserve the indentation to make it verbatim) And if the variables are completely independent then much, much better to use some unit of measure or different objects type or something in the same league to avoid mixing them up and killing your software in the worst possible moment. I honestly can't see how blindingly editing text without any semantic constraint in response to a stream of keystrokes is safer or better compared to what any decent IDE is doing nowadays.. If I'm missing something please explain me what, but I can't really see how it is a more effective way to write software..


Sure, I thought of that. Then instead of a variable named "salary" you've obfuscated your code by calling it a[4].

Ah, but you can just name your indexes, so it's a[salary]. But now you've got ten lines of code naming each of the index values, and a vim macro makes it faster to write again.

In any case, macros are just one of the features that make vim productive. I find that I do a lot more small refactors when I'm using an editor that makes arbitrary edits really fast and convenient. It's complementary to the named refactorings you have in an IDE. If all you're doing is pointing and clicking then you don't need vim, but if you're actually writing code, it helps.

I used to use a vim emulator in Visual Studio, and it was great. Now I'm working with stuff that doesn't have IDE support, and I'm still productive.

A lot of good programmers are hooked on vim. Hasn't it occurred to you that maybe they have good reasons for that?


Or as I suggested earlier you just use objects instead of random variables.

    employee = new Employee();
And you have all the fields reinitialized to the correct default value (that can be different from zero) and much better naming because now you can tell the difference between employee.Username and user.Username


Sure, and I do that when I can (e.g. not when I'm writing SQL), but the point of my quick examples isn't to show off my software engineering, but to illustrate what vim can do in the simplest way I can think of.

I guess I'm failing to make the point, so I'll just refer to the articles that got me to try it in the first place.

http://www.viemu.com/a-why-vi-vim.html

http://www.moolenaar.net/habits.html


Have you seriously never ran into a situation where your IDE does almost what you want, but you still have to do some bit of it manually just because IDE can't handle this specific thing or format or whatever? If so you are either spending way more time thinking about your architecture and code before writing anything than most people or your IDE is fucking amazing.

While remembering long button combinations seems hard and tedious and "strain on cognitive capabilites" they really are just chained commands. In the idea world you don't think: "now I just have to hit v4w"+y to copy these things to clip board", but instead: "I'll copy next four words into clip board" and then just execute the commands. Same goes to longer commands, instead of hunting down some hidden feature in your IDE, you can just bang out chain of commands you wish to execute.


because you can just write a mapping or function that does that.


How can it be helpful in the real world? If I want some repetitive behaviour (create new class, generate code) I'll use the IDE behaviour customised to my needs and in the most exotic cases I will add a generating template. But I can't ever imagine myself deleting the selection up to the fourth f from the current cursor position. For me this is not a feature, it's a huge bug because you can delete massive amount of text just because your cursor was in the wrong place. The most important behaviour of a code editor is to be context aware and transform your code accordingly to the language rules, not just blindingly execute a series of commands that edit text generated from "random" key strokes.


> If I want some repetitive behaviour (create new class, generate code) I'll use the [...] behaviour customised to my needs

AKA a function.

> code editor is to be context aware and transform your code accordingly to the language rules, not just blindingly execute a series of commands

If you "blindingly" execute a series of commands in anything, it's not going to end well. Also, vim can load commands/plugins based on filetype, or any arbitrary condition you want.


A class is certainly not a function, I was speaking about generating valid code in response to a sequence of key strokes / mouse events. If I am building a new module I start with a concrete class and just right click -> extract interface -> select appropriates / all public members and I have a new file with the interface definition. If I am modifying the class I pull the members up to change it. If I just created a new class from scratch I make it inherit the interface, ALT+ENTER and all methods are generated. with the uncountable templates you can do pretty much whatever you want, from generating constructors, creating properties and who knows what else. I have seen people use it live in conferences to generate part of their demo code. All of this is safe and the result compiles correctly apart from the uncommon cases where you need to explicitly ask to make it non compilable.


If it goes wrong, just hit u to undo.


nvi is not Vi; it's a fork of Elvis: another Vi clone, like Vim.

Vim is older than Elvis, by years.

The FOSS BSD derivatives never got the actual Vi editor of Bill Joy ancestry.


Wikipedia has Elvis predating Vim by nearly 2 years (January 1990 vs. November 1991).

While nvi isn't vi, it was intended to be "bug-for-bug compatible" with Joy's original vi. It's not quite there, but it is much closer than any of the other vi clones.

The FOSS BSD derivatives can have a vi descended from Joy's: `2bsd-vi` in FreeBSD's ports collection, `traditional-vi` in OpenBSD's ports collection, `ex` in NetBSD's pkgsrc collection. Or anyone can nab it from http://ex-vi.sf.net/ ;)


I never thought of it this way, but visual mode essentially does switch vim from verb-object to object-verb.

So in this case...

vtfd

is one more keystroke, but you see what you're deleting before you delete it, so if you need to the next f, you can just smack semicolon until you get there.

vtf;;;;d

(semicolon repeats last "t" or "f" movement)


The dot trick is fine, unless you wanted to paste the deleted text somewhere afterward, in which case you need to pick it up in one go.

Otherwise, yeah, dot is great. I love using that for repetitive stuff on "tabular" copied entries that I'm not thinking real hard about transforming. (E.g. - 5 lines or so that I'm not cooking up a regex or an perl/awk spell to transmute)


   > The dot trick is fine, unless you wanted to paste the 
   > deleted text somewhere afterward, in which case you 
   > need to pick it up in one go.
No.

   "1p.


You got me. I don't know how to parse that ("1p.).

My ignorance is showing. Is there a stack of yank buffers??? Does this p-for-put pop the top buffer, back up before the inserted text, then .-do-it-again and put the delete/yank beneath the last one on the stack? I have no idea what the quotation mark actually does.

Thanks in advance if you can explain how that works to me.


Which is to say that they don't understand vim, or rather, they don't even grok vi.

You can't beat your enemy if you don't understand your enemy.

"Go ahead and down vote more, I just wish you guys can learn more of vi, so you can truly deliver something better. So far, these surface scratching alterations only build on irritations of those vi first-timers. Good luck.

"By the way, I use acme when I have graphics interface, nothing beats sam's structured regexp editing capability, apart from writing perl scripts. Learn something, guys.


You can be sure that the Kakoune authors are familiar with vi(m).

Having said that, if you like both vi(m) and the structural regular expression support of sam/acme you might be interested in vis which combines the two:

https://github.com/martanne/vis


>I just wish you guys can learn more of vi, so you can truly deliver something better. So far, these surface scratching alterations only build on irritations of those vi first-timers

Mind expanding on that, or are you just going to whine? It's not like vi is the ultimate tool.


You know there's a setting to display the current command in the status line right?


There's a difference in knowing what you've typed and what that means. Displaying the current chord protects against typos and losing track, but doesn't help you understand what your command is doing.

I'm not convinced I'll switch to Kakoune (as I've got a lot of momentum in Vim, not just with the editing language) but the automatic display of the _semantics_ of your current chord is an interesting idea.


Unless I misunderstood that won't show the result of the command.


This is also quite an important difference:

> Kakoune’s grammar is object followed by verb, combined with instantaneous feedback, that means you always see the current object (In Kakoune we call that the selection) before you apply your change, which allows you to correct errors on the go.


I'm thinking about whether this is a good idea. He gets vi/Vim's model slightly wrong by saying it's "verb then object". While that is true for some things (i.e. text objects, like "ciw" for "change inner word"), it's not true in general. The general rule is "verb then motion". In "dw" ("delete word"), the "w" doesn't represent an object, it represents a motion (going one word forward). It's the same motion that I can use for any command, mapping, or indeed for just moving through text.

Let say I want to delete a word from somewhere in the middle of a line. I would then navigate to the line in question, then press something like "^wwwdw" (i.e. "move to the beginning of the line, move 3 words forwards, delete word"). The motion of the deletion is the same as the motion for navigation. How would that work if the motion comes first? Would I go "wwwwd"? Would that delete one word, or four? Would you use a different key for the motion and the text object?

I don't think this is a bad idea, swapping the order. The thing about showing you what's about to happen is a great point (though Visual mode in vim works pretty well for this purpose). I'm just wondering if it's better in practice. I'm certainly willing to give it a shot.


>How would that work if the motion comes first? Would I go "wwwwd"? Would that delete one word, or four?

'w' will move the current selection to the next word so only one word. To extend the selection you need to press 'W' so "wWWWd" will delete four words. For most motions (if not all), the uppercase variant will extend the current selection.

This also makes searching slightly different:

  / search forwards 
  ? extend selection forward
  <a-/> search backwards
  <a-?> extend selection backwards


Can you add counts to motions/objects? I.e. does "3w" select three words you can act on, or do you have to go "wWW"?


3w works


as well as 3W, for a different purpose


w irritates me, because it always traverses a bunch of miscellaneous symbols, and my brain can't parse fast enough to easily tell in advance how many times I'll have to press w in order to get where I want. Extremely minor, but extremely niggly annoyance. I've found myself using https://github.com/justinmk/vim-sneak more and more often.


You might also like quick-scope:

https://github.com/unblevable/quick-scope


> How would that work if the motion comes first? Would I go "wwwwd"? Would that delete one word, or four? Would you use a different key for the motion and the text object?

I think you've hit the nail on the head here. c3w in vim is 3Wc in kakoune, 3wc will change the third word, straight off the bat there's a lot more shift key hitting. The most annoying thing though is getting the motion wrong, if 3W turns out to not be the motion I want, hitting escape does not return the cursor to where it was before the motion.


I often use visual selection mode in vim so that I can see what I'm about to operate on. For instance, if I want to change text between the cursor and the next match of a regex, I want to see the selection before I change it. So instead of c/re[enter], I type v/re[enter]c. It's one extra character, but it saves me a lot of headaches. This is the first I've heard of Kakoune, but I'm definitely intrigued.


Probably too late for anybody to see this comment, but I'd just like to drop back in and say I've tried it and it's amazing. I really did not expect that another text editor would be able to improve on Vim on basically all fronts, but kak has done it.


In this age we need to think about things like voice control and 3D manipulation of data-structures and a dynamic view of the code.

We can truthfully keep designing 2D editors (and we will always most likely use them to some extent) but I believe it is more important to consider different UI paradigms altogether.

For instance, what about editing a living code environment? Game development is very immersive: you can manipulate a running environment and see results immediately. How can this be extended to other development tasks like server-side development?

What if, when you select a for loop from code fragment a 3D visualization of the programs data structures at that point is shown to the user. What if you can, instead of launching a debugger, run the debugger as you're writing the code and step forward and back and see these visualizations change?

We have all the technology. It's time to get to the next level.


Yes, but. Keep ripeness in mind. It's very easy to spend effort in this area "too soon". So shape projects with care.

I run a Vive on linux. Which required my own stack. Which took excessive time, and is limiting, but has some road-less-traveled benefit of altered constraints. So I've gone to talks, and done dev, wearing Vive with video passthrough-AR, with emacs and RDP, driven by an old laptop's integrated graphics. Yay. But think 1980's green CRT (on pentile, green is higher res). In retrospect, it was a sunk-cost project-management garden path.

There's been a lot of that. One theme of the last few years, has been people putting a lot of effort and creativity into solutions to VR tech constraints, only to have the constraints disappear on a time scale that has them wishing they had just waited, and used the time to work on something else. It's fine for patent trolls (do something useless to plunder future value), and somewhat ok for academics (create interesting toy), but otherwise a cause for caution.

So on the one hand, I suggest that if the center tenth of VR displays had twice their current resolution, everything else being current tech, we would already be starting on a "I can have so many screens! And they're 3D! And..." disruption in software development tooling. But that's still a year or two out. Pessimistically, perhaps even more, if VR market growth is slow.

In the mean time, what? Anything where the UI isn't the only bottleneck (work on the others). Or which can work in 2D, or in 3D-on-2D screen (prototype on multiple screens). Or is VR, but is resolution insensitive, and doesn't require a lot of "if I had waited 6 months, I wouldn't have had to roll my own" infrastructure. Or which sets you up interestingly for the transition (picture kite.com, not as a 2D sidebar, but generating part of your 3D environment). Or which can be interestingly demo spiked (for fun mostly?).

For example, I would love to be working on VR visual programming on top of a category theoretic type system. But there seems no part of that which isn't best left at least another year to ripen. Though maybe 2D interactive string diagrams might be a fun spike.


Very well put. I have to agree that these technologies are still blooming and there are uncertainties--especially in my mind with cost associated with buying devices. Hololense for example with a $3000.00 USD developer edition isn't exactly accessible to the general community! The next 10 years however will probably be pretty exciting in the AR/VR space.

What about voice-controlled programming though? I always thought it would be nice to voice-control my OS. Not specifically for a text-editor, but as a general interface to the OS. It would be nice to move these features out of the cloud and directly onto systems. But then again, a lot of companies (amazon, microsoft, apple) probably don't want to encourage reverse-engineering of their intellectual property. We definitely need open-source variants.

Better AI chips with lower power-consumption and optimization for these types of operations will hopefully usher in a new set of productivity-enhancing applications!



You might enjoy http://www.iquilezles.org/live/ where he live codes some ray-marching using some kind of opengl editor. It's not quite what you're talking about, since it's just running the opengl code, but you could imagine it going through some kind of compiler/visualizer pipeline like you're thinking about.


There is some movement in this direction

https://www.jetbrains.com/mps/


  > We have all the technology.
  > It's time to get to the next level.
Just because you can does not mean you should. Dictating code may be useful is you cannot use your hands, but that's about it. In all other cases there is no benefits of doing that.


Well consider if you use both dictation and typing simultaneously. Vi and kakoune are ergonomic because it requires minimum changes to hand positions. But if you added voice dictation like "toggle tab 2" or "toggle terminal" or "go next brace" etc, all while STILL typing my guess is efficiency would go up physical fatigue would go down.


Folks have created Dragon-based voiced-sound vocabulary for editor control. Voice strain is an issue, but you can load share with typing.

You can do Google voice recognition in browser/WebVR, but it's better at sentences than brief commands.

Another component, largely unexplored, is hand controller motion. The Vive's are highly sensitive in position and angle. Millimeterish. So imagine swype text (phone keyboard continuous sliding) with 6 DOF. Plus the touchpad (the buttons aren't something you'd want to use all the time). Keyboard+pad is mature tech. But wands-with-pads look potentially competitive, and (not yet available) hand-mounted finger tracking added to keyboard+pad might make for a smooth transition. Plus voice. The space of steep-learning-curve input UIs for professionals looks intriguing.


Sounds interesting. When are you going to start on it?


This looks awesome (although I think the name could use a little work). It also brings up a question I have for HN:

Every few years, I make an attempt to learn to use one of the classic editors like vim or emacs, and inevitably give up after the enormous productivity drop I suffer when writing code. I just can't seem to pick up the muscle memory required to become fast with these tools, and the overwhelming array of customization options leaves me frustrated.

The most annoying thing is that I want to learn one of these, because I think I'll enjoy it once I do. Any suggestions from people who have picked one up on how to accomplish this seemingly Herculean task?

And, I suppose, I have another another question: is it worth it?


My 2cents on how I picked up emacs:

Keep using your 'main' editor for coding for now.

Get a shell/terminal that you can open/close with a hotkey (iTerm2 on Mac or something like yakuake on linux)

Run the editor you want to learn (I recommend emacs) in your hotkey terminal (basically you want an 'always there' emacs that you can just pop open at the press of a shortcut key)

Spend 5 minutes learning the basic commands.

+) Move the cursor around.

+) Open a file.

+) Save a file.

+) Switch between buffers/files

Now while coding in your existing editor, use the hotkey window with the new editor as your 'scratchpad' or diary. Note down ideas, todo items, thoughts about the code your are writing etc. Google commands as you need them and you'll pick things up bit by bit.

You don't see the productivity drop because you're not using the editor for your main task of coding, but you'll be using it 'little and often' which is a great way to pick things up.

I made the full switch when after a year or so at work I found myself pseudo-coding and stubbing out methods in my scratch file in emacs and copying them to my IDE.

YMMV but hope that helps :)


> use … the new editor as your 'scratchpad' or diary. … Google commands as you need them and you'll pick things up bit by bit.

I personally found myself using vim a lot as, uh, some sort of poor man's one-shot data analysis/text reformatting tool among other things. What I mean is, quite often I paste in some semi-formatted text like logfile snippet (or open some data that is quite hard to process using shell and extensive piping if turning into csv/tsv and is painful to manipulate via dragging-and-dropping-and-cutting-and-pasting in spreadsheet software afterwards) to do all sorts of manipulations: I can use :s to replace things, or use macros with conventional actions like n3w2de, or bail out to :!awk, :!grep, :!cut, :!paste, :!column -t, :sort (or :!sort -nk123) if I need to format, filter, cut out some columns, sum over columns/rows etc. (I can even do |xargs!), or I can (rarely albeit quite ineffectively) use Ctrl-v to merge lines (if :!paste is not enough), or 'Ctrl-v I' to quickly type in something on multiple lines at the same position before processing any further -- all of that in any combination and with any selection. And I'm pretty sure I forgot something while writing all these things down before sleep.

I doubt if any other text editor or IDE could be as useful as vim in tasks like these, and now I also see this as a great opportunity to learn vim through googling for things one does not do every day (and does not know how to do) in any other editor, as these quite often will turn to be benefitial for everyday vim (or shell, or both) users. (However, it is also quite hard to me to imagine vast amounts of people with similar use cases, let alone people that would even consider vim as a tool that would solve their problems even with some time invested in it.)


Well, emacs also works great for me in the same type of scenarios.


No, in my opinion.

The problem is the people who reply will be the people for whom vim and Emacs "clicked".

I'm like you, and when I looked at my vim using friends, they really aren't any more efficient. Also, while your editor will "work forever", expect interesting plugins (like C++ integration via clang) to be less stable than say atom or visual studio, and to have to nice plugins every few years.

Also, they don't fit well on a modern desktop. I use lots of apos, each best for their use, that all use the same shortcut keys. That's integration that I like.


I agree with saying no. Vim and Emacs will "click" for you when you want to learn them. Wanting to learn them is different than wanting to have learned them. It's the difference between wanting to write a novel and wanting to have written a novel.

Personally I would nominate emacs using spacemacs[0], but I knew both already going in. I have a hard time understanding what people find hard about Vim, but I've used it for 7 years now (well, spacemacs now), so I probably just don't remember what was hard.

I think it wasn't so bad for me because I didn't try to learn much about it. I learned how to move, (just the hjkl part), and basic selection. Anything else was learned "just in time."

For example, even after having used vim for 7 years, I never knew about the "ib" selector. Never needed it, and doing that sort of selection has never been painful enough to me that I went searching for a "better way."

While things like vim-tutor or vim-golf or whatever they have now might work for some people, that would have killed it for me. Learning for the sake of learning will get you part of the way there, but learning out of a personal need is what leads toward "mastery." And I define mastery in a restricted sense of being able to do what you want, fluently.

[0] http://spacemacs.org/


Exactly. The only thing needed to configure when starting out is disabling of arrow keys and low keyboard repeat rate so that you don't do wrong things like holding down keys (arrow keys, delete, backspace etc.). Holding down keys is a Vim anti-pattern.

[1]: https://sanctum.geek.nz/arabesque/vim-anti-patterns/


Spacemacs might be great for existing Emacs and vim users, but it is horrible for beginners of both (in my experience), as you can't follow Emacs tutorials, can't follow vim ones, and there just aren't many spacemacs tutorials yet, and several I found were out of date.


Emacs user here. No it didn't just "click" with me. I was learning Lisp and learning Emacs became a necessity. I don't think it was easy for anyone to learn Emacs or Vim. It takes a lot effort to learn these tools. In my case, it took about 2 months before I felt like I was efficient with the text editing, and I still learn new things today.

If it matters, I don't think many people can program any faster than I can in Emacs, especially against macros, interesting plugins, functions, and snippets.

There is a trope about how a new Emacs user will be faster than most Vim users, but watching an expert Vim user work blows the best Emacs / IDE user out of the water.


I know you're seeing a ton of "yes it's worth it" posts, but i just wanted to add a slightly different perspective. Yes, it's worth it even when you aren't an expert at Vim.

I am constantly learning new Vim commands[1], and i feel i only know a tiny fraction of the vim editing language. Yet, i still love vim, and use it constantly, for everything.

The approach i take, as to make it enjoyable and not a job, is: "is what i am doing now annoying?". If you find yourself hitting j (to move down) 40 times in a row, or holding it to move down slowly, etc - Google for a solution[2]. It can be a little annoying in the beginning, but when you're starting out your far less likely to want to "fix" every bad pattern, and therefor you aren't spending all your time Googling. In my experience, you are only improving upon the things that most annoy you, and as time goes on, you improve quite a bit while not even trying.

[1]: discoverability is not it's strong suite, which is why i'm going to try Kakoune. [2]: You can multiply the command (40j), or <Ctrl-f>/<Ctrl-b> to jump. Among other things.


Strongly endorsing the "make the pain go away" path to learning, but I'd also like to mention a secret weapon for really nailing down the more powerful movement and editing commands in vim: macros.

Macros are immensely useful themselves and everyone should learn and use them, but they have another benefit beyond simple utility - writing good macros requires using commands that generalize rather than "eyeballing" how many times you should press a key. If you want to move to the next paragraph in a macro, you can't just mash j until you're there because every use of the macro might require moving a different number of lines. What you can do is use { and }, vim's built-in commands for moving by paragraphs that are underused because holding down j is "good enough" for interactive use. I find that after I start using a command to make better macros, it filters into my interactive use soon after.

As a bonus, using more powerful motions instead of repeating weaker motions makes your macros execute a lot faster.


Not much better. You have to count to find out that 40 number.

Sometimes a mouse is faster.


You can set line numbers in vim to be relative, then there's no counting involved.


Should be using ace-jump instead of counting the lines.


Not familiar with ace-jump, but i don't count lines. I use relative line numbers, and just hit the number i want to go down to. Ie, it will say 15 below me, so i hit `15j` if i want to go there.


It is not worth it.

I used vi for a few years then switched to emacs, which I used for around 15 years. I "lived" in emacs - terminal, web browser, email. Everything.

Now I only use JetBrains IDEs, and have no desire to go back.

At some point, you realize that software development involves way more thinking than it does typing.


I somewhat agree. I'm proficient enough in vim that I do most non-IDE file manipulation in it, but I haven't gone into much depth about what commands I have available. For example, duplicating a line is ddup. yyp would probably be better, but I already have that in muscle memory and it's good enough for what I use vim for. Like you, I've also switched to Jetbrains for most programming, it's much easier to find the one off commands I know I used last year but can't quite remember how to repeat now.

(Although, some of the reason I switched from vim is that I have been using an Alphagrip keyboard for a while now and mouse/arrow keys are always available _right now_. It really changed how I interact with software.)


This is what I'm discovering as well. For the past month I've been learning node.js, express.js and everything that comes with it.

I'm an (inefficient) vim user. I learned vim because I didn't want to ssh into a terminal and type nano. For this purpose learning an editor that is shipped with every (?) unix-system is amazing. I don't know if emacs is also shipped with every unix-system, but learning the basics for the sake of configuring servers is quite handy. I also loved Sublime Text, so I combined using vim and Sublime Text as my main editor.

However, when learning node and writing good javascript I noticed that my debug cycle was very slow. It was so slow that I noticed that I was debugging 80% of the time and writing code about 5 to 10, and thinking about code 10 to 15. So in my case getting a good debugger was a lot more important than having an editor with which I can whizz through text.

So for node.js I switched to Visual Studio Code.


It's totally worth it.

For me, I learned vim & touch typing at the same time. Generally I learned while doing side projects, supplemented with general vim sessions (such as the built-in tutor, and http://vim-adventures.com/).

Many find it easier to start off with GUI vim as your favourite keyboard shortcuts are still there, but I found that too much of a crutch. Once you commit a few standard sets of motions to muscle memory, I don't think you'll find that much holds you back in day-to-day typing. If you notice yourself doing something repetitive when editing, go and look up how to do that thing more elegantly, and carry on.

I'd also just ignore all the customisations until you find yourself at least somewhat productive with the 'factory settings'.


Oh, and for typing: https://www.gnu.org/software/gtypist/

No other tutor stuck for me.


Can you add code completion or basic static analysis to vim? I've found it fine for editing but it lacks the information of the IDEs that I generally use


I've had trouble with the completion plugins for Vim. There'd be a "completion engine" that needed a language-specific "plugin" and I had trouble getting those + dependencies working in various environments (or they'd suck down CPU resources). Maybe if I just set it up once in one place it'd work fine. It might just be me since the CPU resource suck bothers me in other IDEs like PyCharm.

I really like the out of the box completion vim has where it completes against words in files you have open. Most of the completion I need is long variable names or functions/modules and if it's not in the same file I'm editing I already had it open in another buffer.

That and a basic PEP8 linter work just as well for me as any of the major IDEs I've used.



I started to use Vim maybe six months ago and I found it obviously quite difficult to start with but I took it quite slow. I use Visual Studio at work and installed VsVim so I practiced VIM at work and at home on personal projects I used Vim exclusively.

To start off I used no addons at all, and didn't use any for probably a month or two. I'm a front end developer and spend most of my time in Javascript and Rails at home to give you an idea of what tasks I'd do in Vim.

Eventually I started to notice things I found hard in Vim and slowly set about finding some addons to complement my usage, maybe just two or three at a time. I still probably only use about ten addons so it's not too heavy.

Was it worth it? I'd say so, I'm still learning but I can do most things without using the keyboard although I'm certain there are more simple and elegant ways to do things in Vim heh.

Oh and the best tip I heard? Don't place anything in your .vimrc you don't understand.


If you want to board a train, you don't try to jump in through an open window while it's moving at full speed. Emacs and vim are very fast trains with very slow acceleration. You're going to spend days, possibly weeks, struggling to do things that were trivial in your old editor as you get up to speed.

If you can't afford that during your productive coding hours, you'll need to set aside dedicated time to be productive at learning - time when practicing vim or Emacs is the only goal. Run through vimtutor or the Emacs tutorial (Ctrl-h t) to learn the basics, then run through it again. Repeat until you can do the tasks without reading the parts explaining the commands.

Grab a random long file of code, make a copy, open the copy in your editor. Practice navigating - pick a character on the screen, work out a fast way to get there without touching the keyboard, then execute it. Practice selecting words, bracket/quote-delimited chunks, lines, functions. Practice making small but precise edits. Get used to the different paradigm of cut/copy/paste that both use, including registers (vim) or the kill ring (Emacs). Practice using searches to move around, and also search/replace.

Learn how to use the built-in help. Both Emacs and vim have amazing help systems that cover every default keybind, built-in command and user-customizable setting.

Do all of the above without any customizations or plugins. After you've mastered the basics, you can start customizing, but try to only do it to fix pain you've already experienced rather than add things you might need some day.


I completely agree, but I do think there's value in immersion.

After learning the basics, maybe find a subset of tasks to use with your new editor. For example, continue using your IDE for day-to-day, but edit config files with the new editor. Then go from there.


Yes. Learning Emacs is 100% worth it. I feel like everything else is a joke by comparison (no offense).

Emacs, IMO isn't like any other editor. You can't just install it and have it work for you out of the box. Another poster suggested that there would be people for whom Emacs and vi 'just click', but I don't think that's how anyone learns to use emacs. You need to customize the editor in order to make it useful. It's not about memorizing key combinations (that'll come with use over a long period of time), it's about employing the ridiculously powerful tools that come with Emacs or can be downloaded from the package repositories. With Emacs, you can do anything you want. When I first started using Emacs, it felt like I was laying siege to a fortress. Doing basic things like saving a file involved looking up a key combination. Now anything else feels not much better than notepad.

To learn emacs, I think that the best place to start (after giving up on the tutorial) is to read other people's init.el files. You can find these all over github. You should read through them and any customization or function that you think you'd like to have for yourself, copy (the key combination for paste is C-y FYI) that into your init.el file (~/.emacs by default). As you read through the init files, you'll find out more and more about what Emacs can do for you, and you'll build an editor that's comfortable for you. IMO, without a custom init file, Emacs isn't really Emacs. Treat it like a side project for the first month or so, and I believe that eventually you'll move over completely. Have fun!


I feel your enthusiasm but I think your message will be a little off putting for new users. Personally I've been using emacs for about 15 years and would have no trouble sitting down at a fresh install and using it. I use all the default keys. Most of my customizations are in relation to org mode or custom applications I've written in emacs lisp. While I'd say emacs is very configurable, it's certainly not a requirement that you configure it for yourself before it is useful.


Don't waste your time with these cryptic editors. Get a more reasonable editor such as Sublime Text or VSCode that allow you to install plugins for emacs/vim bindings etc.

IMHO the best bang for buck that you get with these editors comes from learning just a handful of commands for the most common stuff, i.e. open/close/save, move caret, cut/copy/paste/, switch between buffers. So with a more modern editor with emacs/vim like plugin you can have the best of both worlds, i.e. enable fast operations for the common stuff while also having sensible menus etc. for the non-common stuff. If you go "raw" emacs/vim, then everything is cryptic.


I learned Emacs because I was interested in following the SICP and learning Scheme. The synergy between lispy languages and Emacs is just too great to look for another editor.

In that spirit, I'd say learning an editor with a steep learning curve just for the sake of learning isn't very effective - and that is probably the reason you end up frustrated. However, if you can find something else to learn within the editor - so that learning the editor comes as a side-effect - you'll progress much faster.

I believe this to be the reason I haven't been able to pick up Vim. Editors are tools - and if we see no use in the tool, we'll never get good at it.


Long time vim user here, but I think that the best setup is to use a regular text editor, which has vim bindings. All major editors seem to have them, including Sublime and IntelliJ.

I think the biggest gains in using vim are the small navigation, copying, and editing keystrokes, and that there are little to no productivity gains of using other vim features like tabs and buffers, over say tabs in IntelliJ / Sublime. I am a little biased but I really think that being quick with the vim bindings really makes me a lot more productive at editing code than my non-vimming co-workers. When we're pair programming, it's usually me who does the driving because in one or two keystrokes I can do something that would take them 5+ seconds with a mouse.

So just install the vim bindings on your favourite editor and start picking it up bit by bit. You can start simple with the h,j,k,l keys for navigation, and i for insert, and use the mouse for the rest until you get up to speed.


I'm learning Vi(m) right now because next semester our C++ course (programming 2) will be taught within a UNIX environment. I'm new to linux as well, so after recently installing Fedora, I limited myself to using Vim as a way of practicing.

So far it has helped to work on a project that involves typing in source code that has already been laid out (its Douglas Crockford's essay[1] on writing a JS parser). Literally I'm just typing it into one file, making a few decisions about whether to put all of the factory functions at the top and have the instances at the bottom, etc. It lets me focus on:

  -Opening files
  -Saving (:w to keep the file open, :x to save and close)
  -Basic copy/paste
  -Navigating around the file
  -Switching modes
I've spent a few nights messing around over the last week and I feel like I'm picking it up. I like not having to do much with the mouse since I have a bad habit of straining my arm/wrist by holding the mouse while I'm not using it (while reading). Keeping my hands on the keyboard feels more comfortable and ballanced.

It's too early in my usage to say whether it's worth it or not, but I feel confident that being familiar with other text-editing 'paradigms' is a good thing.

[1] http://javascript.crockford.com/tdop/tdop.html


You can install mc file manager (dnf install mc), and can use built-in editor mcedit for codding. ^O will switch to console (^C^O to switch back to editor), so it's easy to code and test console applications. It's a lot less powerful than vim/emacs, but it's easy to learn and use.


If you do any amount of work via command line or SSH, you need to be competent with one of them. I've been using vim for 18 years now and I'd consider myself a barely competent vim user at this point.

I know enough to use it, but not enough to like it.

For virtually all work where I don't have to use a terminal editor, I use Sublime/Textmate or one of the language specific Jetbrains IntelliJ derivatives. The "jump-to-declaration" functionality of Jetbrains is so smooth and so good that I actually have a hard time not having it available now.

Truly useful things get committed to muscle memory almost immediately.


  > If you do any amount of work via command line or SSH,
  > you need to be competent with one of them.
The one you need to be competent with is vi: it's part of the Single UNIS specification, so practically all random hosts you ever SSH to will have /bin/vi. This comes in handy when you're paged at 3am by a host you've never seen before, and you want to change some code quickly so you can get back to sleep. Being familiar with basic vi will save you time and potentially making an error scp'ing files from your dev host (which has your editor set up just the right way).


I also tried a few times, always failing (apart from basic survival, i.e. <Esc><Esc><Esc>:qa! to quit ASAP...); I finally learnt vim when I was forced to at my previous workplace, because our main work environment was on remote servers with crappy connection.

I always said that love for vim is an example of Stockholm Syndrome; and now I'm using it daily as my main editor of choice. The killer feature for me is :cex system('foobar | grep something | ...') | copen. Other than that, various plugins, especially for Go (vim/emacs/acme(?) have the most mature plugin ecosystem for Go) and CtrlP. My current opinion is that vim is in some ways super cringeworthy, but in other ways lightyears ahead of competition. And as to the Stockholm Syndrome... I'm kinda on the fence now. But then... isn't it actually what the Syndrome is all about?...


Definitely not.

I learned vim for three month. After a vimrc of close to 150 lines, I had to admit that sublime text has more functionality than vim and all of them are far more difficult and slow to use (long and hard to memorize command names). It's even worst compared with IDEA.

Now I only use vim as my default editor in terminal.

Just use sublime, or even better, IDEA.


I don't use either editor, but just out of curiosity, what functionality is in Sublime that Vim is missing? Multiple cursors? Certain plugins?


Mutli cursor. There is plugins which try to emulate it, but it either didn't work or was lacking a lot functionnality. Other things bothered me, but the lack of good multi cursor implementation was a reason to stop using vim by itself. Just can't live without it now.


I never use multiple cursors, not sure what I'm missing.


I have trouble conceiving of a use case where macros or regex-replacement cannot do what multiple cursors do. Do you have one in mind?


I don't think there is anything you can do with multiple cursors that you cannot do with macros or regex replacements. But I also think multiple cursors are worth having!

I'm an Emacs user and there is a good multiple-cursors package for Emacs which I also use, so I have access to all of macros, regex-replacement and multiple cursors. I find that I do use all of them, but in different situations. I think of multiple cursors as "lightweight, instant feedback" macros.

I often screw up macros because of little edge cases that don't occur in the location where I'm recording but do occur somewhere else I want to apply the macro. You don't notice the mistake until you run the macro at that other location! If you ran the macro many times, you might not even notice the mistake until much later. When I do notice a mistake, I undo and edit the macro so that it applies to the other location too and then rerun.

With multiple cursors, if I can see all of the cursors on the screen at once, I usually spot mistakes while I go along and fix them immediately. Macros are like the compile and run cycle, whereas multiple cursors are like using a REPL (even more like a Bret Victor style live environment). I always prefer REPLs for the same reason.

If I can't get all the cursors to fit on the screen at once, I typically use macros, but thinking much more carefully about the macros than I would with multiple cursors. If you almost never screw up macros multiple cursors might not benefit you. But then again they might, because they let you be sloppier and go faster.


Multi-cursor seems very anti-DRY.

If you have parts of code that share so much structure that multi-cursors are useful, you likely want to factor them out.


The most common use case that can't be factored out would be sql.


If your vimrc is 150 lines after three months, try Emacs. It's likely more your speed.


I move daily between different environments (OS X, Windows, Linux in VMs and on Raspberry Pi) and languages (C, Python, shell scripts).

Switching between different editors on all platforms was a chore. Emacs provides me with the same basic functionality in all environments and for all languages I use. Additionally, it works very similarly both on the desktop and in a terminal, so I can use a powerful editor even in fairly restricted environments.

So yes, for me it's worth it.

I started with plain file-editing, with a focus on keyboard shortcuts for editing. When they felt somewhat comfortable, I started using basic modes (fill-mode for better editing, C and Python modes). As you go along, you'll find things you want to do (format paragraph, autocomplete,...) You'll look them up, and find that they are either built-in, or available as a mode. Rinse, repeat :-)


http://vim-adventures.com/

An adventure game using vim. May help you learn.


> is it worth it?

Absolutely!

--- When I got back into emacs I dedicated two weeks to re-learn it after years of not using it.

I watched/read a couple of tutorials for setting up a python development environment - which happened to be one of my drivers since I hadn't found a decent python editor.

I read through the built in tutorial once, and referenced it a few times in the following days as I was editing. I had coding to do, but I did manage to slim down my task list to account for the potential of lost productivity.

For emacs M-x describe-mode was very helpful in getting a list of chords/hotkeys, but the ones that I really needed to develop a memory for were navigation/search/save/exit.

It probably was the full two weeks before I was comfortable. Now I get into other environments and I wonder how people deal with how slow things are or how you are supposed to remain focused when you have to use your mouse all the time.

My favorite plugin is yasnippet. Quick and easy templates for repetitive tasks with multiple stop points and dynamic content.

After that, any effort is simply in googling what you need your editor to do. If it's not built in, somebody has already wrote something for it 90% of the time.


I bounce between Visual Studio+Resharper, IntelliJ, and XCode (the worse of the three by far). Unless I'm having to manipulate UI element on a wysiwyg editor...I really don't touch the mouse in any of those IDEs. For the most part, I don't need it (even with the piece of crap XCode).

But each of those editors requires time to really learn, just like vi and emacs (formerly I was proficient in them too). Many people look at Visual Studio for example, see the Solution Explorer and just go "well, that must be the only way to open a file"...um, no.


> (although I think the name could use a little work)

In Japanese (書こうね), it translates roughly to "Let's write, mmkay?"


Surely this isn't a coincidence?!


How I learned Vim:

1) beat http://vim-adventures.com/

2) Turned on Vim bindings in intellij, can always just drop into insert mode when you forget something and do whatever as normal

3) Once I was comfortable with 2, switched to real Vim

4) Suffered a bit, but nothing terrible

5) Never want to go back


I've found that for Node.JS / Golang / PHP / JavaScript it has been well worth it, my workflow feels faster, I have less time spent missing clicking around even copying a line or changing text inside quotes or braces. Things like ci" or da" make life a lot easier dealing with parenthesis. The editing capabilities just feel natural I always feel like I'm programming and not just 'thinking' I believe it just comes fluently from practice and motivation for learning it. I prefer Emacs + Evil (vim modal editing) due to ELisp and I started with Emacs first never gave VIM a chance.

I also find the packages out there are pure genius such as ace-jump (originally from vim i know..)

but don't even bother for anything .NET or Java.


I find that having a good cheat sheet in front of me helps a lot. A good book goes a long way. I recommend Practical Vim by Drew Neil. And of course, use it when you are not programming on the clock. I find that this is the best way to develop the muscle memory.


> And, I suppose, I have another another question: is it worth it?

As a relatively new vim user I would say it is definitely worth it. I started slowly adapting the navigation just for fun and upgraded vim as my main editor roughly a year ago.

The thing why I personally like vim is because I can optimize every movement, every text change and every action to maximum. If something is not intuitive or feels awkward, I am one step away from changing my vimrc [0] to fix it. As a result, you end up with a editor that never forces you to leave the home row and does exactly to 100% what you expect it to do. Every function outcome and every cursor position after a motion becomes predictable, and if you get better/faster on the way, vim becomes better/faster as well. I am discovering new things or different approaches to existing techniques every day and love every bit of it.

At my job, I spend the majority of my time thinking, browsing code, more thinking and a lot of reading. Once I know what I want to change, no matter where it is, I can jump with minimum keystrokes to the exact spot and do what I wanted to do.

If you want to learn vim, here is what I did: I installed Vintageous in SublimeText and only used hjkl for navigation while still using sublime functionality for everything else. Then step by step adapted motions, text objects and Ex. Once I felt comfortable enough, I gave real vim a try. On the way somewhere I also stole a entire vimrc from someone popular on github and started with that as my base.

The only problem in my opinion is that once you adapted to using vim, it is hard to go to any other editor that does not have vim keybindings/support/motions.

Emacs I think is worth it as well. Almost all terminals and editors come with built-in emacs keybindings for basic navigation and actions: Kill a word, jump to the beginning of the line, jump to the end of the line, go back a word and so on.

[0]: https://github.com/dvcrn/dotfiles/tree/master/vim


Pick a small subdomain of your work, and use it exclusively there. Perhaps that's editing config files, or editing when sshed into a remote machine. Maybe for a language you only use in one-off scripts. Something you do at least weekly, but not more than an hour a day. That way you can get regular practice, without a huge productivity drop from going all-in.

Another suggestion: Start vanilla, and slowly add in new commands/customizations slowly. For vim, for the first day, just stay in Insert mode, and move around with the arrow keys. The rest of the week, just add in Command mode, and use hjkl to move around. Next week, add in something else.


I learned vim about 2 months ago. I started by doing vimtutor and just messing around practicing a few nights. Then I forced myself to start using it for work. At first, things were really slow and a bit frustrating, but after a few days, I felt like I was editing faster than before. Then you pick up more and more tricks, and it just keeps getting faster. I would never go back now. And if you're the type of person who gets excited by learning little productivity boosts, you'll love it. I know if may seem like a Herculean task at first, but really, in just a few days practice your muscle memory will be there.


It's worth it, just have to get through that first few days where you want to run back to familiar territory. I don't know of any shortcuts, just repetition. My particular choice is Vim, and my only advice would be don't try to master it all at once. Work on just editing text, saving and opening files, find/replace. When that's all second nature, get wild and start using window splits, macros, and remapping keys(if you want to).

Once you're all trained up though, I think you'll really be happy you spent the time.


Totally worth it. I felt the productivity drop when I started emacs, but now I fly through editing tasks. I should probably put in the effort for vi as well, but that idea exhausts me :)

I learned emacs by using it as my note-taking editor, not for code at first. I'd have a cheatsheet open and all I needed were the basic navigation commands. Once I was comfortable I started coding in it.

The biggest benefit to emacs is the Mac UI and bash both share the same navigation keystrokes. My hand almost never needs to move over to the arrow/paging keys anymore.


When I started with Emacs, I customized a bunch of things to make it behave in a more familiar way. That let me learn new things in small batches without taking a huge up-front productivity hit.

Over time I've changed a lot of things to be closer to defaults. But I've also kept some of my customizations (I still use cua-mode, for example).

One downside to this approach is that you may miss out on useful parts of Emacs because your customizations cover them up or conflict with them. But on the whole it has worked very well for me.


I would say that it is worth it for one simple reason: vi and emacs are going to be around for a very long time. This has the advantage of letting you learn and build upon your skills as time progresses. Even though vi and emacs usually take much longer to learn and modern editors frequently offer many more features, you will probably end up being more productive with the old school editors simply because you aren't relearning existing skills every few years.


No, it's not worth it. Modern IDEs make so many things easier than vi / vim / emacs ever did.

vi / vim / emacs can be useful in certain situations (Unix / Cygwin command lines, low level embedded systems that don't have a desktop, etc), but for most code, the modern IDE GUIs blow them away. Code navigation / inspection / contextual browsing is much, much better, easier, and far more productive using Eclipse, CLion, Visual Studio, etc.


I'm in a similar position. I do use vim but only for the most basic of editing tasks. I certainly haven't made the switch - but I read this just the other day and it's at least addressing the issue that we have:

http://yehudakatz.com/2010/07/29/everyone-who-tried-to-convi...


I also seem to have an annual attempt at switching to Vim [1]. I can do enough basic commands to survive, but I am so far from the productivity in Sublime/Atom that I always end up going back to them.

[1]: https://www.donationcoder.com/forum/index.php?topic=37747


I just installed vim on the side and used it for little notes and so on. After a while I started missing the basic movement keys in my IDE, and installed an emulator. For two weeks it was utter pain and then I was back to normal productivity. Over time I gradually added little tricks and now it drives me crazy to go back.


Happy vim user for 3 years, and SOOOOO worth it. Being able to work with text in an editing language immensely shortens the loop from thought to code, and having an editor that you can adapt to any language or framework or toolset you want is invaluable.


I learnt (what relatively little I know of) Vim purely through version control commit messages and "quick edits" to config files that aren't visible in my gui editor project views (dotfiles, hosts etc.)


I just discovered that I can use vi(m) on the command line (`set -o vi` for bash) - double win


I will try to answer your questions as I have seen both sides of the fence.

I initially used Visual Studio (around 2012) and really loved the power it gave me. I never felt slow or inefficient until I saw a screencast about Apache config that used vim and I was amazed to see how the person could simply jump to places he wanted. So I set out to try vim. I switched it for all my hobby work but it didn't catch on. So I went back to Visual Studio and in 2014 I thought I should give it another go. This time I started by installing the VsVim extension for Visual Studio.

This is how I got good with Vim: - In the beginning (I think 2 weeks) I only focused on using the motions (word, next character, paragraph, blocks and regex motion), common commands like d, c and R. If it helps I saw a screencast (one of the Vim London meetup videos) which broke down Vim into a grammar to be thought of as "operator + count + motion". I also slowed the key repeat rate to make sure I don't hold arrow keys to move. DISABLE ARROW KEYS IN VSVIMRC.

- After around 2 weeks I got comfortable with that and switched to pure Vim whenever I could. You can set up an external program to call up on the current file in Visual Studio. I also learned to touch type in the next 2 weeks so that I could reap more benefits.

- After a week of moving to Vim, I started writing my vimrc with things like colorcolumn, autoindent and other simple stuff. I also installed relevant text object plugins [1]. I installed some language specific plugins and started reading the :help pages. :helpgrep is very handy. At this time I think I felt I was back to my old productivity level if not above it. It took around 3 weeks I think.

- I then proceeded to learn about jumplist, named registers, location list, differences between buffers, windows, splits and tabs and how they are INTENDED to be used. It took me around one week.

- At that point I simply started looking at some Vim screencasts [3], [4], [5], [6], [7], [8] and [9].

CONCLUSION:

I am more productive in Vim when writing anything other than C#, F# or Java. Visual Studio excels in that department. I debug NodeJS in VSCode. For all other things I use Vim and am noticeably faster now compared to other editors. Although yes, I really miss Visual Studio a lot when using Vim. But thankfully Visual Studio has the great VsVim plugin.

[1]: https://github.com/kana/vim-textobj-user/wiki

[2]: My .vimrc https://github.com/hashhar/dotfiles/blob/master/neovim/.conf...

[3]: https://vimeo.com/vimlondon/videos

[4]: https://www.youtube.com/watch?v=xZTkrB_tEoY

[5]: https://www.youtube.com/user/ThoughtbotVideo/search?query=vi...

[6]: http://derekwyatt.org/vim/tutorials/index.html

[7]: http://vimcasts.org/

[8]: http://tilvim.com/

[9]: https://sanctum.geek.nz/arabesque/vim-anti-patterns/


I use Emacs with evil-mode (vim bindings) and Programmer Dvorak for my keyboard layout.

It's like anything in life, you just have to make yourself do it. There's no substitute for putting in the work and time. Sure, it's painful for the first few months, but I believe it pays off in the end.

I think the biggest thing is this: you say you try every few years to learn these editors. Don't quit next time.


One of the nice things about being an Emacs user (hang in there, I have a real point about Vim to make) is that the concepts (especially non-modal editing) and the keyboard shortcuts map well to newer IDEs.

I switch between IntelliJ and Emacs all day, and all I had to do to become comfortable is choose the Emacs keyboard preset in the IntelliJ preferences. The same is true for Eclipse and Visual Studio.

The Emacs paradigm is a lot more similar to contemporary IDEs than the Vim paradigm, and that makes it a lot easier to switch back and forth.

While a better Vim is a nice goal, I don't see how it will bridge the gap between Vim and newer editors/IDEs unless it includes some fairly fundamental changes to the Vim paradigm. But then it wouldn't be a better Vim -- it would be something different enough that Vim users probably wouldn't like it. I suspect that Vim and modern editors/IDEs are doomed to remain divergent forever.


That's precisely what makes Kakoune interesting. There are tons of Emacs-alikes out there, environments that do what Emacs did in a more modern way. There are basically no Vim-alikes out there, things that take Vim's conceptual underpinnings and do them differently in a way that is unambiguously not Vim.


FWIW, I'm a 6-year Vim user, I have the same great experience using Jetbrains IDEs with the Vim presets.


I find that nearly all editors have VIM "mode" that will allow you to just use the vim key bindings, so it's not really a problem swapping between two editors. They tend to have an emacs mode as well, in case you're interested in using your emacs keys.


Unfortunately, this is superficially true but not in practice all that helpful for a lot of us. Most vim-style input modes or plugins for other editors are woefully lacking, and even very good ones (evil mode) seem to differ enough to be uncomfortable for a subset of long-term vim users.

Like: I've used Emacs extensively in the past, and certainly _could_ switch to evil if need be, but a few days of recent effort showed me that the switching costs are higher than I'm willing to pay right now, and it's not clear I'd be any better off in the end.

Whatever the infelicities of vim's implementation (there are certainly plenty), I think there's a tendency to underestimate the expressive nuance and (for lack of better words) complex texture of the interface.


I've been using vim for decades and use evil/emacs now.

It's simply not true that the vim modes outside of vim are critically lacking.

In fact almost all of them support text objects and the other key parts of the vim editing experience that we are talking about here and they do it well.

Some things like macros or perfect register support are not there (evil is pretty great though) but they generally have useful analogs.

This is across multiple IDE emulations that I've used.

What you said might have been true 6-7 years ago but is not true now.


It's still true, most won't even allow you to remap keys or work with the system clipboard like you can in vim. Nevermind things like proper scripting and window support.


I've used the vi style of editing with all IDEs over the years.. eclipse, visual studio, sublime and now atom. Oh, I also used vi style editing with Emacs :p (vim-mode or something)


Not just newer IDEs though. Many of the navigation mappings in emacs are the same in many terminal emulators, as well as pretty much every MacOS application. And although a little niche, Sam Aaron's Sonic Pi IDE is heavily influenced by emacs.


Just a quick note that I've been using Visual Studio and the VsVim plugin happily for years. They work great together. All the Vim-fu plus real keyword completion, jumping to definitions, instant renaming of any function/variable (VAX plugin) etc.


> Kakoune’s grammar is object followed by verb

This is so important. It's the reason I've stuck by Quicksilver all these years, and avoided Spotlight and whatever Google's search bar thingy is called.

I've never been interested in vi because the effort to reward ratio doesn't seem favourable, but I think I'll give Kakoune a try.


Quicksilver, still? Why not move on to Alfred?


I'm not the person who mentioned QS but I'm still using it too. For me it's mostly inertia: Alfred can probably do everything I use QS for, but QS still works just fine, so why bother? When something breaks the 10% or so of QS's capabilities that I actually use beyond fixing, then I'll switch.

("Probably": last I tried using Alfred a few years ago, I think there was something I relied on QS to do that Alfred couldn't. I can't remember what it was, maybe Alfred does it now - but again, why bother? QS still does everything I want it to do.)

Also QS's interface looks cooler than Alfred's to me. Aesthetics matter.


QS was seriously broken for a long time. I understand someone else finally picked it up and started fixing the bugs, but I don't know why anyone actually kept with QS during the long broken period.

Even back when QS was under active development by the original author, it was still pretty buggy. I actually had a separate keyboard shortcuts app running in the background with a single shortcut which would relaunch QS for those times when QS decided to crash.

I am curious what you relied on QS for that Alfred can't do. Everything I remember doing with QS is doable with Alfred.


The great thing about Quicksilver is the grammar - it's actually object, verb, indirect object. That lets you do things like <file>, <email to>, <person>.

Alfred didn't have that basic structure when I tried it. I'm sure it's quite powerful, probably more so than QS given the latter's long stagnation. But I never bothered to figure out how to use Alfred effectively because QS is so easy and works great. There were a couple of bugs that were annoying for a while, but they've been fixed.

Kakoune doesn't mention the "indirect object" part of the grammar, but apparently it'll prompt for more information when needed, so it's pretty close.


Alfred does use that structure, and as far as I remember, it always has. I can indeed do <file>, <email to>, <person> in Alfred (though my most common object, verb, indirect object sequence is <file>, <open in>, <app>).


I tried Alfred when it came out. Then, it didn't support that object, verb grammar that Quicksilver did. Does it do that now?


A better vim sounds great.

That said I suspect most people would be better off learning a good IDE properly, including but not limited to:

* effective navigation and selection using modifier keys and search

* built in refactoring

* project wide as well as single file search/replace, -and this includes regex search AND replace.

This should be quite doable in less than a week compared to a few months to get equally effective in vim.

Edit: let me add that parts of this looks like a huge improvement over vim.


> That said I suspect most people would be better off learning a good IDE properly, including but not limited to:

To be clear, do you think a "good IDE" is inherently better than Vim/Kako for most people?

Personally i don't see a difference in a GUI based editor and a text based editor. In fact, i quite prefer text based, because it forces an editor to treat the keyboard as a first class citizen - GUI IDEs can get lazy and revert to mouse whenever they please.

I can see the argument that Vim might not be inherently as good as a "good" GUI editor, but i don't think that is a negative towards the potential of text based editors. It just means that we need new editors to focus on the UX, imo.

With that said, i'll be quite glad that we're moving towards standardizing (of sorts) a code editor protocol so that new editors don't suffer from lack of tooling. It will be great to see a single set of tooling (formatting, linting, imports, syntax checking, etc) plug into any new editor that might pop up.

Switching editors has enough friction, tooling shouldn't be one.


To be clear, do you think a "good IDE" is inherently better than Vim/Kako for most people?

Right now, for most people: very much yes.

Personally i don't see a difference in a GUI based editor and a text based editor. In fact, i quite prefer text based, because it forces an editor to treat the keyboard as a first class citizen - GUI IDEs can get lazy and revert to mouse whenever they please.

Fair point. However: Between the default keybindings of Netbeans on Windows or Linux and the simplicity of customising it to my hearts content I haven't found any reason to abandon it.

I can see the argument that Vim might not be inherently as good as a "good" GUI editor, but i don't think that is a negative towards the potential of text based editors. It just means that we need new editors to focus on the UX, imo.

Here is where I'll argue that the main advantage of the big IDEs are that they have focused on UX for years.


> Here is where I'll argue that the main advantage of the big IDEs are that they have focused on UX for years.

Yea, i definitely agree there. It's also that GUI IDEs tend to cater towards.. well, a different crowd. What that means in real world terms in often a product with rough edges, confusing patterns, and a horribly steep learning curve.

I enjoy seeing products and languages (programming) focus on learning as core feature of the product. It really is inherently important to a projects success.


Meanwhile, Git has taken over all source control for development despite being possibly one of the worst applications ever created. (Hell, even Lotus Notes tried to be usable-- it failed, but it tried.)

It's a lost cause in this industry.


> Here is where I'll argue that the main advantage of the big IDEs are that they have focused on UX for years.

You say that, but somehow I still find the UX of every IDE I've tried to be lacking. I much prefer the UX of Emacs.


You spent (likely) years learning Emacs. How much time did you spend learning each of those IDEs you've tried?

You have to realize that psychologically: you like things you're familiar with, and dislike things you're unfamiliar with. That's how top-40 radio works. That's why everybody bitches over every new software update, even when the new version is provably better.

So of course you like the thing you spent years with over the thing you tried to learn for a week and a half then gave up on because Emacs is better. That has nothing to do with UX.


I've spent years in Eclipse as well (and still use it every day at work for Java stuff), and I appreciate a lot of the functionality it offers, but I definitely find the UX lacking. It's klunky. Yes, it's maybe more discoverable (although, at least in the case of Ecipse, that's debatable) and some of the keybindings are probably more familiar to most people, but I find that even though Emacs has a bit of a learning curve, once you've gotten past that, the experience of actually using it is very fluid and productive.


The core "IDE" features you don't normally get with an editor are things like project views, intellisense, code completion as you type, real time parsing and error highlight, code navigation. Sure you can get most all of this by wrangling plugins for vim (or which ever editor you choose) but in an IDE like eclipse, netbeans, intellij, visual studio, it's all there, ready to go.

In effect, a modern IDE is "programming ability" multiplier. It helps me code smarter and faster. That plus understanding what's going on behind the scenes is a powerful combination.


Vim and Emacs actually have quite a bit of support out of the box for code development - the ability to follow tags, goto different files, code completion, syntax highlighting, build integrations, etc.

The difference is that IDE-like features Vim are simply tuned for C (add Lisp for Emacs) instead of Java; plugins give them support for other languages. Anyone who has tried to write something other than Java in Eclipse can attest to how much plugin creep starts to enter the fray.


Sure, but the biggest problem with modern IDE's is the fact that they are terrible at editing text.

IDE's and text editors overlap in their uses, but they are not the same. Sometimes you really do just have a text editing task, and none of the IDE functionality will help with it. Also, the ways in which IDE's are extensible is lacking compared to something like Emacs. Yes, they come with a bunch of built-in useful stuff, but sometimes you want to add a keybinding to do some editing task you do a lot in a particular project or company, even if it's not useful in a more general-purpose setting.


Yes, they come with a bunch of built-in useful stuff, but sometimes you want to add a keybinding to do some editing task you do a lot in a particular project or company, even if it's not useful in a more general-purpose setting.

Don't know what IDE you used but Netbeans is very customisable and extensible.

I think this is true for IntelliJ and eclipse as well and it would surprise me if it wasn't for Visual Studio.

(In fact I think I have seen vim modes for all of these and even embedded vim in eclipse.)


I think I probably didn't explain my meaning well. For Netbeans, Intellij, Eclipse, VS, etc. you tend to have to create a new project to write a plugin.

In Emacs, adding a simple extension is simply a matter of adding a function to your .emacs file. So adding useful functionality is very low friction, low enough that you can afford to do it when it wouldn't be worth the effort in an IDE.


Note, it sounds like Kakoune is trying to be a text and code editor first. Not just a text editor, like Vim is out of the box. Completion and code related tools appear to be first class citizens.

With that said, it's purely speculative on my part, i clearly don't know - Kakoune is new to me.


But if you are like me and work in many different languages, you'll have to spend 10 weeks to learn 10 different IDEs, rather than 8 months to learn one Vim.


The ones I have used (IntelliJ, Netbeans and eclipse) were quite effortless to jump between.

I doubt Visual Studio will be much harder.

Jetbrains covers Ruby, Python, JS, C and more and it would surprise me bigtime if those language specific versions aren't quite similar to the plain Java version as well.


I think Vim is far easier to learn than Visual Studio. The menus are completely unintuitive, bureaucratic and painful to use.

I always use cl.exe from the command line with Makefiles.


Why not stop using the menus then? ;)

Visual Studio can be operated pretty much entirely from the keyboard. The default shortcuts are fairly sensible, and you can always add more from the options.

There is one major omission: changing build configuration or build target. (You can give the configuration manager a keyboard shortcut, and do it that way, but it's a bit unwieldy.) So I keep the relevant widget in the toolbar and use the mouse to do it. And there are a few things I haven't bothered to assign keyboard shortcuts to, on account of how rarely I use them.

But in general, I use the keyboard to perform actions, and it doesn't feel like I use the mouse any more than I do with emacs (which I use without scrollbar, toolbar, or menu bar).

I do use the mouse a lot for moving the cursor and selecting text in both cases. (Visual Studio is actually slightly better for this, because you can Ctrl+drag to get word selection.)


Your comment is the last one that has a reply link, so I'm using it, though none of the following applies to it at all.

Over the years I've observed that VS criticism is downvoted quite rigorously here. This is in stark contrast to the overall sentiment on the Internet, so I suspect corporate downvoting here.

The moderators should take a look at it.


> Why not stop using the menus then? ;)

Because you have to learn more commands/shortcuts than in Vim? ;)


Won't say anything bad about vim, I use it on a daily basis but normal IDEs aren't necessarily as bad as some people seem to want to portray them:

A few hints to get reasonably good, fast:

Use ctrl+arrowleft/arrowright to jump words at a time.

Use shift to select as you move.

This works together so ctrl + shift + arrowright means select to the next word boundary.

At keast in some IDEs this will also stop at word boundaries inside a variable or function name but this should be configurable. I prefer it this way though.

Next: in the menus you'll often see a hint that tells you a direct shortkey for that menu option. This holds true for both window menus on the top as well as in the right click context menu.


A few hints to get reasonably good, fast (in vim):

Use w, W to jump words at a time.

Use v before moving to select as you move.

This works together, so vw will select to the next word boundary.

Press i to insert text, escape to stop inserting text.

Next: in the :help files, you will find a hint that tells you a direct shortcut for that command (like :help quit, or :help write, or just plain :help).


I personally already use vim, actually prefer it when I remote to servers.

I guess my point is just that it seems to me a lot of people (not necessarily you guys) use vim as some kind of cargo cult.


When you are trying to learn a new thing, and you refuse to learn more than you already know, you are guaranteeing that you will be disappointed.

If you aren't willing to learn more than the Vim shortcuts, it's unfair to criticize Visual Studio or any other product. You are the problem.


I think it is very hard to be more unintuitive than vim.


Vim is unintuitive at first, but there's excellent documentation.

With Visual Studio, the documentation is horrible, you always encounter stale links to unorganized and regularly changing microsoft.com websites.

Relatively basic things are left unexplained and documentation is outsourced to Stackoverflow:

1) How do I restore the output window I clicked it away in order to make the editor usable in the first place?

2) What the heck is a "project" and why do I need one?

3) Why do I need so many frigging clicks to get to the debugger (the debugger itself is nice though I have to admit)?

The list goes on an on. All these things are far simpler with vim and gdb: Need to debug x87 fpu registers? One simple google search and you have an instructive plaintext website that tells you everything and off you go.


>"1) How do I restore the output window I clicked it away in order to make the editor usable in the first place?"

There are many ways, it comes down to personal preference. For example, would you prefer restoring the Output window using a keyboard or a mouse?

>"2) What the heck is a "project" and why do I need one?"

The same reason you probably use a makefile when working with Vim, to manage your dependencies and build configurations.

>"3) Why do I need so many frigging clicks to get to the debugger (the debugger itself is nice though I have to admit)?"

I don't know what you're talking about here, the debugger is accessible with hardly any effort at all. How many clicks are you using to bring it up?

>"The list goes on an on. All these things are far simpler with vim and gdb: Need to debug x87 fpu registers? One simple google search and you have an instructive plaintext website that tells you everything and off you go."

Depends on your use cases. I've personally never found MSDN documentation lacking, plus it's ridiculously easy to use. For example, when coding in C#, highlight a language keyword and press F1, you'll be brought to online documentation about that language feature.


I don't know about visual studio, but I use IDEA which have a pretty good documentation. Far better than vim's one. And I need less because things are quite intuitive in IDEA.


How long have you used each of them and for what?


As a user, I think this is the main reason why I like kakoune:

> Another often overlooked property of using a text editing language is that it’s fun.

Some other things that I like about it that are not mentioned:

The author is responsive to feature requests and bugs on github.

The codebase is very well-made, if you have any interest in C++ I recommend taking a look at it.


From the github docs:

> " Due to Kakoune relying heavily on being in a Unix-like environment, no native Windows version is planned."

Deal breaker right there.

If I am going to go to the effort of learning a new editor, it better run on all reasonable platforms - like Vim does.


For what it's worth, it works properly on cygwin (and certainly the linux subsystem too). I know that the author uses it on cygwin too so there is at least some guarantee.


It is a sensible decision, as it will focus doing things right on that particular paradigm: UNIX.

For example, this means that plugins trying to extend grammar analysis, will primarily try to rely on their already existing parsers and tools via the command line. This means a streamlined process to create plugins / extensions to the editor, and the function of the editor is well defined.


To be fair, vim is somewhere around a 4th class citizen on Windows. It works, but it ain't pretty.

Plus, with the unix subsystem (minus bugs) you can still run this in Windows. That still amazes me.


What exactly isn't pretty about vim (specifically gVim) on Windows?


The default fonts, the menus, the menu icons, the font rendering, the inability to use many plugins....


It blows my mind that people want Unix tools in a non-unix environment.

With that said, Windows is working on that embedded native linux thing, so i imagine it will work there.


Actually it does work there.


Yeah, God knows that I only learn tools that I can use at any time, anywhere, on any hypothetical machine. Not the machines I actually own, but ANY MACHINE EVER.

This smells like confirmation bias to me.


> "Yeah, God knows that I only learn tools that I can use at any time, anywhere, on any hypothetical machine. Not the machines I actually own, but ANY MACHINE EVER."

This is a straw man argument.

I already use perfectly good multi platform editors like Sublime and Vim and I have Emacs as an option, although I have not used it much. There is a significant investment in time required to use a modal editor like Vim (and apparently Kakoune) at even close to a decent level. I simply prefer to not have to change editors every time I change platform, since an editor is a tool I use a lot and I have the option to not be restricted by platform limited editors.


Pontificating but for ide + editor replacement: someday we'll see ai/ml features that aide in opening files and keeping the right blobs of code nearby, maybe pre fetch good goog links that can drop down on a whim panel.

Even some kind of auto model visualizer that helps every so often like a replacement for the ignoble package mmanager side panel view.

We're still so stuck on text editing.


I think we need to first get over the hurdle of "code == text".

I mean, the features you talk about are great-- but right now I can't even embed a little vector graphic explaining a function's flow in my source file. Every time I've suggested using a file format that allows things like fonts, styles, embedded images, to write my code, the reaction is always an insanely irrational knee-jerk against it. (Seriously, try it out with your programmer colleagues.)

(And to prod the bear a bit, a large part of the problem is the developers who insist in working in tools like the ones we're discussing here, designed in the '70s and using absolutely no technology that was invented after 1985 or so. Ludicrous. Imagine if any other industry worked that way!)

Then a couple days later, you found out they spent like an hour making ASCII art of some diagram because they couldn't just paste the actual diagram into the code. Sigh. Reason #3136269 I don't get along with other programmers.

I mean you're talking about advanced AI code that looks up Google links to explain code constructs, meanwhile 95% of the industry is using a code editor that doesn't even allow you to embed a link in a code file. (If you're lucky, it'll make an obvious URL clickable, that's about the best you get.)


To prod back, you have three source code files---one is in Word Perfect format from 1987. The second is from Microsoft Word from 1998. The third is an ASCII text file from 1972. Which one can you open and reuse today?


None of them! The ASCII file might be legible, but then it turns out that you don't have the correct build environment or all the dependencies, so the code isn't useful to you as-is.


I can open all of those formats in Microsoft Word right now this instant. So.

Good argument?


No. How about Easy Writer II? Or even Type-Rite?


To be fair, why does it need to be imbedded in the code? Why can't it just be a plain text link to a binary file (your vector image), which automatically embeds for supported editors?

What you're talking about is turning source code into a binary object. That's fine, if you use an editor that supports it, but you shun all other editors when you do that. There is a middleground that doesn't involve making your source code into rich text, imo.


It doesn't need to be. (Why the italics?) In fact I don't give half a crap about the implementation details of how it works. All I want is to be able to drag a little diagram from a paint program into my code editor and have it there in the code and then when someone else looks at the code they see the little diagram, too. Whether it's implemented by a "binary object", or by adding an additional XML file, or by a magical monkey from heaven reaching down and placing it there, I do not care. I'm talking about a feature I want to use, not about nitty-gritty implementation details.

As for "shunning other editors", well, frankly, why are we as an industry bending over backwards to support people using editors from the 1970s? Do you think Ford still builds cars with imperial measurements just so Old Bob the mechanic can keep using the tools he bought when he went into the field in 1968? No of course not, that's stupid. But that's exactly what our industry is doing.


This is actually something that can be done in the IDE distributed with Racket (https://racket-lang.org/). When I first started playing with the language one of the biggest things that stood out was the ability to embed images straight into the source code. It's pretty neat and I other platforms adopt it.


All this exists in various IDE's for various languages (except the prefetch of 'good' google links) re keeping related code globs around. In particular Netbeans IDE supports a lot of dynamic languages. It's php, python, and javascript plugins all offer project views other than "what's on the filesystem", intellisense, code completion as you type. I suggest spending time exploring existing options if one hasn't.

RE editing text: whatever code object model one can imagine, it generally always serializes to text. I for one don't see the benefit of editing an abstract model in place of text. An example I liked was Fortress [1]. Fortress was a language that attempted to let users write code in mathematical notation using a special latex editor (iirc). It was found to be not a huge win, and they reverted to 'normal' syntax. This was one of Guy Steeles projects at sun.

So having said that, there are languages where editing the model is editing text: Lisp and Scheme.

[1] https://en.wikipedia.org/wiki/Fortress_(programming_language...


I'm not against text underneath, just the sense logic needs to get much better with dev tools. it's like we're ignoring our own needs :] intellij + eclipse (worse), and that old model of an IDE requires too much elbow wringing and imo never sense's the right stuff to really groove with my work. there's more that could come with ai/ml for tooling, and hopefully soon.


Reminds me of helm and ivy in emacs


Modal text editors are definitely not my thing, but anyway this looks like a huge improvement on vim.

Still a shame that it is entirely console-based. It's 2016 people! We've had GUIs for literally decades.


Interesting, if he's architected it for that purpose, it doesn't have to solely be console based.

Neovim separated the client and server parts, and there are a host of clients (QT, HTML/Atom, etc) including the canonical one, from the docs:

    When compiled with the |+clientserver| option, Vim can act as a command
    server.  It accepts messages from a client and executes them.  At the same
    time, Vim can function as a client and send commands to a Vim server.
https://neovim.io/doc/user/remote.html

Maybe Kakoune does the same, I haven't checked. I also second the first child's note that being console based is a feature.


(it does)


yeah...

fta:

>The first thing to realize is that non-modal text editors are extremely biased towards insertion. They make insertion easy (by making the default behaviour of most keys to insert a character into the buffer) at the expense of making most other operations suboptimal, by requiring hard to reach keys or modifiers (or, even worse, moving your hand all the way to your mouse).

i disagree whole heartedly that reaching a modifier key is some great expense. I can do many things very quickly in sublime and have never felt that there was any time loss hitting a modifier key. compared to the expense of:

1) occasionally entering several commands by accident when in the wrong mode and having to correct it

2) lack of ease of use both for initial learning and for other coders who might have to type something on your comp when pairing and they dont use your exact modal editor

3) lack of transitionable skills to other editors, difficult discoverability, and many other side effects of modal systems

i respect the choice of others to use modal editors but it is absolutely not some cut and dry thing as the author presents it.

i can do things in sublime at probably 90% of the speed of someone in vim and perform many or all of the same operations including some you cant do in vim etc thanks to plugins.

aside from all that, reading, writing, and navigating code are not my bottlenecks for productivity anyway.


> 1) occasionally entering several commands by accident when in the wrong mode and having to correct it

Maybe for beginners, but this almost never happens after a while, and hitting undo takes 0 time.

> 2) lack of ease of use both for initial learning and for other coders who might have to type something on your comp when pairing and they dont use your exact modal editor

You have a point for learners, but I'm not going to pick my tools based on what other people need, I'm going to pick them based what I need.

> 3) lack of transitionable skills to other editors, difficult discoverability, and many other side effects of modal systems

Don't see this at all. Vim-like editors have a pretty standard set of objects/verbs, many programs use vim style keys (less for example). How are you going to transition say, IDEA, or RubyMine, or Emacs specific key shortcuts or plugins?

Update: 2 more

> I disagree that reaching for modifiers is some great expense

It is when you are using "commands" at the rate an experienced vim user is. Excluding single char/line navigation spam, I use about 20-70 a minute if I have a good conception of the change I want to make.

> i can do things in sublime at probably 90% of the speed of someone in vim and perform many or all of the same operations including some you cant do in vim etc thanks to plugins.

A) I doubt that. I've seen people rip through stuff in ways that cannot be done without modal editing. For more concrete examples, look at some vimgolf problems and see how sublime solutions compare. keystrokes are a good measurement IMO because it's independent of user typing speed. Not that the average vim user edits like that, but just as an example of what's possible.

B) Saying "with plugins" is a pretty arbitrary measurement, unless you're trying to claim there are plugins in sublime which you can't implement in vim. Do you have a specific example?


Being console based is a feature for many people who spend their time in a terminal. Especially in conjunction with screen / tmux.


  > We've had GUIs for literally decades.
Yes, lots of them. The one on my work desktop is different from the one on my home desktop, and they don't talk. Then there's the router, the NAS, the VPS, and so on that don't have screens, let alone GUIs.


What would a GUI bring to this that isn't possible in the console? You can use a mouse to issue commands to console programs, after all: if you want to use your mouse to scroll through or select regions of text, you can.


I find that console apps are far less intuitive when it comes to visual thinkers. I also am not too keen on modal editing, it doesn't match how I do most things in life. I don't have to switch out my teeth when eating vs drinking. It just doesn't seem natural to me. I've always found I'm more productive with a GUI. Command line is great for simple tasks and executing commands, but editing files has always seemed less than ideal. You have to remember so many key combinations and commands and track what mode you are in and what modes are available. I would rather spend that brain power on solving problems.


> I don't have to switch out my teeth when eating vs drinking.

But you do switch how your mouth is working when switching between eating and drinking. In one, you masticate and move food around your mouth before swallowing once (maybe twice), whereas the other involves directing fluids back to your throat which acts in a near-continuous swallowing action.

> You have to remember so many key combinations and commands

They become muscle memory after an admittedly non-trivial amount of use. Yes, it is an investment in your future usage of that tool.

And to be fair, you had to memorize C-x, C-c, and C-v at one point too.


He doesn't control his mouth when switching between eating and breathing, I'm pretty sure that it's part of the autonomic system. You kind of made his point since there's no way Vim actions actually become fully reflex actions, especially the powerful stuff that separates Vim from a good IDE, since the vast majority of those really complex actions will be done at best dozens of times per day (and I'm being generous here).


> there's no way Vim actions actually become fully reflex actions

You might be surprised. Maybe not quite the level of a true "reflex", but it can get close. I find I not infrequently get weird compile/test/spellcheck errors when I'm not using vim and go back to find a string of vi keystrokes in the middle of my document that I typed without consciously realizing.


what is a visual thinker?


90% of the world and 15% of HackerNews.

Jokes aside, do you understand the architecture of a system better from a diagram than from a 2 page description?


If I'm not mistaken, the reason vim doesn't allow a lot of key bindings (like control+shift+key, control+symbol) is because of the terminal, so in theory a GUI should allow to bind them.


> What would a GUI bring to this that isn't possible in the console?

Not being destructive of user input, for starters.


I'm with Kaod here - what do you mean by this?


Not sure I understand what you mean.


For example the fact that the terminal does not make any difference between <c-m> and <ret>. Or <c-i> and <tab>.


You know what? I was ready for bullshit and you actually gave a compelling answer :P Yeah, that's a bummer, but there aren't that many instances of that drawback (it's bitten me a couple times maybe in many years?) and on the other hand text mode gives a lot of convenience like being able to use it from SSH and other niceties.

Anyways, I don't think such behavior is inherent to "the console", only Linux's particular implementation (i.e. it's tty's fault) which admittedly is pretty outdated and relies a bit too much on control characters.

IMHO the original question still stands:

> What would a GUI bring to this that isn't possible in the console?

In my experience text mode brings a lot that GUIs don't, and not the other way around.

Plus it's easier to make a GUI wrapper for a console program than a console wrapper for a GUI program.


Yes it's in no way a dealbreaker, but it starts rearing its head when you want to use keys outside of the alphanumeric cluster.

I also absolutely agree that this is the correct way for an editor to be implemented.


How is that destructive?

Visual editors assign various non-editing tasks to command sequences as well. Pycharm moves the cursor around parenthesis with C-m for example, Cmd-M minimizes windows, and Cmd-I does formatting.


I don't understand what you mean. It's destructive in the sense that the raw input is not even being passed to the application in the terminal.

No applications running in the terminal will be able to tell the difference between these two different key presses.


You could use a nicer font, for one.


My console lets me use every font on the system. It even lets me convert variable-width fonts into monospace fonts.

Granted, it won't support using variable-width fonts as-is; but that's never been a problem for me.


While Kakoune is mainly terminal oriented, it has an experimental json interface that while pretty basic can be used to implement a GUI to it.

I took a stab at it, and while it still needs half of the features to be on par with the terminal UI, it gives an idea of how difficult it would be (it isn't): https://github.com/doppioandante/kakoune-qml


Then run it in an (x|e|i|z|gnome|whatever)term? Those things have literally been around for decades.


I generally pass over mentions of new text editors because they seem to be either orthogonal to what makes Vim great, or else to approach Vim with the approach that it's mostly wrong—think of Cream, for example, which seems more about onboarding newbies than appealing to experienced users (which is fine!). I think of Neovim as an improvement for Vim scripters and coders, while aiming to provide mostly the same end-user experience, so I haven't really bothered with it. I'd discounted previous mentions of Kakoune, assuming that it was more of the same, but this discussion (and in particular greenspot's deservedly top-rated comment https://news.ycombinator.com/item?id=13166784 ) made me take a closer look, and I think I'll give it a try.


I'm sorry... but "kak"?

I love/like vi[m], I love/like emacs... I ... never mind lol

The new editing language does look great, and I like the idea of the piped filters... but I can't get over the name :-/


Worth noting is "kak" is one of the (many) words in Dutch for "poo".

I dabble in vim and it's my editor for when I quickly want to change stuff whilst in a terminal, but not enough to be "proficient" in it. As others have noted, I feel there could be a massive gain in editing if I were to get more acquainted with the many vi commands, but the initial productivity penalty has stopped me more than once from making it my default editor. Kakoune's mental model of commands seems friendlier, so maybe it will stick :)


Same here. «kaka» — poo/bad thing, «kakoune» — somebody who does lot of poo. :-)

However, «vi» means visual, while it is the least visual editor among popular editors, so I expect by analogy that kak will be very good editor. Keep fingers crossed. :-)


Hopefully this is a temporary name. Investing in branding upfront can be a waste of time but if it picks up, it might be worth a more thoughtout and friendly name.


Could be `kk`


And that is short for cancer in Dutch, used as a swear word.


Why not just "ki"?


FAQ on various things and what the name means:

https://github.com/mawww/kakoune/blob/master/doc/manpages/fa...


Which is funny, I read it as 書こうね (Let's write). Even fits in line with the growing fad of using Japanese in project names I've noticed the past 8~14 months or so.


Oh that makes a lot of sense, that's probably the origin of the name. The project is quite a bit older than that though (>4 years).



Thanks for digging into the docs and finding the actual meaning. I didn't see anything in the readme.md :)


Mmh right, but that's not going to dispel my feeling that mawww is actually a weeaboo.


I'm still waiting for someone to do a modal abstract syntax tree editor. You would only type text when naming something, the other mode would be for navigating the AST.


Have you used paredit-mode in emacs with a lisp dialect? Getting proficient with this mode can be a lot like what you describe. Paredit let's you navigate and edit the tree structure of lisp code pretty effectively. It's not inherently a modal paradigm, but I used it evil-mode successfully. I'd imagine what you describe could be a refinement on that technique. Lisp lends itself well to this type of editing due to it's lack of syntax. Other languages are more difficult.


Sounds like a visual scripting system with low level constructs.


Visual scripting is nice in that you can have a seperate presentation layer on top of the language syntax. There's a lot of potential in improved readability that way I think. Most visual scripting depends on mouse actions, which is kind of slow and I suspect a big reason why programmers dislike it so much.


Might be a good idea to include a link to this new editor at least somewhere in the text. I couldn't find even one little link...


You can find the editor source, and installation instructions on github: https://github.com/mawww/kakoune


Thanks! However, my point was that people shouldn't have to read comments on HN to be able to find the editor (I thank you for helping me though!) that someone wrote a whole blogpost about.


I agree with you, though it's a frequent issue that blog posts don't link back to the main site. With that said, it's fairly obvious to go to the root domain for something like a blog post, and that's how i found it.

Definitely should include a link, though.


A few things I like:

* No NodeJS/NPM * No Electron * No multi-threading


No multi threading is a plus?


From Design notes:

> "No threading: multithreading is a hard problem, and is not well suited to a text editor:

Either we want a direct result, and we need to be synchronous with the user, so getting a 4x speed up is meaningless, we need to have an algorithm which appears instantaneous the user.

Or we want an asynchronous result, and then the processing is best left to a helper command which can be reused with other Unix tools."

I agree with them. Multithreading today in all situations is like Fuzzy logic of yesteryears. It is suppose to make everything better.


One of the big problems of editors like emacs and vim is that they haven't had means for background processing for years. And no, multithreading is not hard if you design for it. It is very hard if you need to add it as an afterthought. Some people would even say threads are easier then async.


Looks great.

Does it have a different scripting language, or is it still VimL? What kind of plugin support does it have?

Is it embeddable? Does it have a messaging API like Neovim?

How well does it handle long text lines and long documents?


Some answers as a user:

No scripting language, most of the heavy lifting done in plugin is through shell calls (asynchronously or not). Example here [1]. I personally think that it's kinda hard to grok to be honest.

Thanks to the client server architecture, it is possible to make an external UI[2].

There is no line wrapping currently. Don't know about long documents, but the editor in general is very efficient.

[1] https://github.com/mawww/kakoune/blob/master/rc/core/grep.ka...

[2] https://github.com/mawww/kakoune/blob/master/doc/json_ui.asc...


What is your 1st example exactly? I mean, if Kak doesn't come with a scripting language, then what language is that exactly?

This is an important note to me, because i imagine i'll have to implement my own tools for common language tasks like Gofmt and Goimport.

Honestly, it would be cool if i could write plugins in any language i want, ie if it fully uses a backend editor server API.


They are just command that you could execute manually (using ':' like in vim). The difference is that all the commands in this file are executed at startup.

As I said, all the heavy lifting is done in scopes like %sh{ ... }. This way you can actually use any language you want, and it's only the piping you have to do through kakoune commands.

Most common languages (like go) already have plugins to do some basic tasks like formatting.

If you're interested in the editor, I would rather recommend reading the readme of the project[1]. There is a lot to read, and you can start making plugins once you understand it.

[1] https://github.com/mawww/kakoune


Yea i'm definitely going to try this out. Thanks!


I don't want to belittle anyone's work or inventions, but I think modal editors are old and outdated. They've had their time in my mind.

Bret Victor gave a great talk about programming and tools: https://vimeo.com/36579366

His talks always blow me away.


On the contrary, my reaction to reading OP was, "wow, somebody brought Bret Victor's ideas to modal editors!" The goal of switching verb and object is precisely to stop drawing dead fish (http://worrydream.com/#!/StopDrawingDeadFish)


His demo is a neat parlor trick, but when you think about it, he's really just painting with javascript instead of a paint program.

Introduce any kind of higher dimensionality into his model and it breaks.


Looks like an excellent model. I'll probably stick with vim, at least for the time being, but I'm always glad to see new work being done on modal text editors. I agree that vim's model has certain shortcomings, and it's nice to see see someone trying to address them.

The multiple selections thing looks really cool.


I love this idea, and look forward to trying it when I have a little more disposable time to learn something new. I just want to point out one thing: While it is admirable that this project sticks to just text editing, our text editors often form a part of a system. This includes IDEs, shells and interpreters, and the OS itself. One of the missing "modes" of vim is a yield-to-something-other-than-editor mode. Because we don't have this, any time I use vim or a vim compatibility layer, I end up having to remap keys from their defaults to something that I have trouble remembering and is completely different from the docs. I hate remapping keys. Give us a mode that allows us to keep the rest of our ecosystem intact.


This looks very interesting. But why does this whole site try to use WebM video even on browsers that don't support it? When viewing this site in Safari, there's a bunch of broken videos scattered around.


It's pretty hard to find a link[0] to actually getting kakoune on the home page. Usually that sort of link at the bottom is an email URI and I try to avoid clicking on those.

Based on the linked screenshot[1], perhaps the editor should be named "Clippy's Revenge"

[0] https://github.com/mawww/kakoune

[1] http://kakoune.org/img/screenshots/screenshot-tmux.gif


"Clippy's Revenge" sounds like a cool name, at least it's more memorable than Kakoune.


One functionality I find missing in all modern code editors is - repeat action. This was present and extremely useful in, now extinct, Convergent Technology OS (CTOS) resident editor. In brief, it allowed users to repeat all the actions they performed on one-line of code, on another line of code. It's amazing how productive you can be when you have that feature. This goes beyond find & replace; It also helps format code, insert, replace multiple parts of the line, etc. all with one keystroke.


Yep - this is "." in vim and it saves me so much work all the time.


This sounds like macros? Of course, the problem with macros is that you sometimes realize you should have hit "Record" only after you've completed the action.


> the problem with macros is that you sometimes realize you should have hit "Record" only after you've completed the action.

Happens to me all the time. But if using a macro was actually worth the effort in the first place, then it's probably still worth the effort to undo and record


Definitely. In fact because of that "blind actions" that Vim has, and Kakoune seems to be trying to fix, i often record macros multiple times. I'll make the macro, but the realize it doesn't fit all cases i wanted it to.


I guess command history could be used in this case as the source for the recording.


I don't know what you are talking about. Every major editor I know has that functionality.


I'm not a huge fan of vim: I used vim a lot for a 1,5 year, then switched to IDE with refactoring (CodeGuide was one of the first IDE's with refactoring for Java).

When a IDE supports refactoring, e.g. it can swap order of arguments in calls to function, it helps a lot. But when the IDE does not support refactoring of language of your choice, vim can help to do a refactoring of code manually much faster. For example, I may use some shell commands to refactor bunch of js/html/css/java/sql code with single or few find and perl -pie commands, all at once. When I need to do an another refactoring, I can pickup previous refactoring command from shell history or I even can put command into script, so I will have my own refactoring tool. Regular expressions are fragile when used with code, but I can undo changes with git and repeat. They are saving lot of typing, so I prefer to spend few minutes in console than a hour in IDE. Vim has lot of commands built-in, so it's even easier to do a refactoring in Vim, but IDE's built-in refactoring is still better, when available.


Reply to the wrong comment?

Regardless, I think that the missing refactoring capabilities of code editors are only a symptom of missing command line tools for refactoring. Hell, very few languages have good open source tools for linting and static analysis which is more or less a required building block for good refactoring tools.


I'm trying to argue why Vim may be better than regular editor with my own experience, which is not strongly sided.

BTW.

I also found that when I cannot use full size keyboard, e.g. phone, tablet, or netbook, vim is usable, while regular editor is hard to use because of lack of essential keys, but I rarely use phone for development.


It does? I wouldn't mind finding out how Sublime, Atom and VSCode do it.


Atom has [0] which I use from time to time. I don't use the other two, but as far as I understand Sublime has support for macros built-in, and VS Code is still pretty young and will probably get something similar once its ecosystem grows.

I rarely use ad-hoc recorded macros. Like the author of Kakoune, I think multi-cursors feel much more natural.

[0] https://atom.io/packages/atom-keyboard-macros


> It also helps format code, insert, replace multiple parts of the line, etc. all with one keystroke.

Can't you achieve all this via multiple selections (eg. ctrl+d in Sublime) and acting on them?


I use vi macros for that


> Interactivity comes by providing feedback on every commands, the inverted object then verb grammar makes that possible, every selection modification has direct visual feedback, regex based selections incrementally show what will get selected, including when the regular expression is invalid, and even yanking some text displays a message notifying how many selections were yanked.

Did anyone else think of reverse Polish notation and concatenative languages like Forth when reading this paragraph?


Neat. One question: How can I script it? What is the scripting language for customizing the editor? I couldn’t find information on this in the documentation.


This thread explains that you script it using shell commands: https://news.ycombinator.com/item?id=13166635


So it's not possible to have something like vims quickfix?


A few questions after playing around with this for a bit:

After making a complicated selection, doing something else, I want to go back to that selection easily. Is there a selection history? A way to execute the last selection?

I tried running a shell command that waited on input and kak hung waiting for the command to finish. is there a way to kill the command? Or better, a way to interact with the command after its running?

I like it so far!


The 'd2tf' example is just wrong... after realizing I didn't hit the right 'f' I would just press '.' (not 'ud2tf')... I think I will stay with vim for now, also the discoverability could be better... Btw. mixing vim with tmux also solves the 'command line next to editor' problem.


I will give this a try.

I had been a long time vim/emacs rejector. I used ide and sublime text for most of the time.

But few weeks ago, I needed to program a server for deep learning. Because of the graphics driver on that server, there is really no option to run a gui application. So I had to learn vim.

It turned out to be not that difficult to get used to it.

The only complain I have is code navigation. The font size of the vim is fixed to the font size of the terminal. The text is relatively large, therefore the viewing window can only show few lines of code.

Sometimes, I need to reference a previously defined variable or function of the same file, It's difficult to quickly navigate to the right place.

With sublime text, it's mini map navigator is so convenient to allow me go back and forth between locations.

With vim, however, I rely more on my memory. I need to go back once and remember everything, and then go to the end of the file to edit.


You might like the '*' and '#' keys, as well as marks, particularly "'.".


Problem with all these hotkeys is discoverability and memory. In the end, I use just a few well known hotkeys. It's useless to define hundreds of them. I don't like modal editors especially because keys have even more functions then, which I have to remember.


I started a similar project in 2013, sadly never delivered a working prototype. Its name was going to be "Kuji Editor", basically an editor in visual mode by default and with context-verb grammar instead of vi's verb-object grammar. I knew this would represent a big improvement over other editors because of a more intuitive and modern approach leading to a better workflow.

I started with building the UI in PyGame but never got further than that...

(I am really disappointed I didn't spend more time on this now I see the attention Kakoune gets. I would have loved the feeling of contributing something truly innovative... well...). Congrats to Maxime!


Really interesting project and looking forward to having time to play a bit more with it. After trying it for the first time and reading the documentation I have the impression that the `alt` key is used a lot as a modifier key for basic things such as selecting inner objects. One thing I love about Vi and Vim is that most it tries to reduce the usage of modifier keys which is awesome when you are touch typing. I would love to know why the author chose the `alt` key and what the other options were. That's a great project and I'm sure it could help a lot of developers to understand modal mode. Great work!


This is awesome, I only wish it was a mode integrated into Emacs, like evil-mode. I can't afford to give up the debugging, completion etc. that I get as part of emacs, but I would love to use this in my day-to-day flow.


Why not write it in Rust though like Google's Xi [0]?

[0]: https://github.com/google/xi-editor


> I have been working, for the last 5 years,

Rust was very, very different five years ago.


Sorry, I've missed that!


This might get lost in here, but one thing that I'm dissapointed by is I love this idea, it looks fantastic, and I'm a vim "user" that would love to switch.

But I put user in quotes because really I use IntelliJ or VS or whatever, with the vim plugin, for the rich refactoring / autocomplete support which, for most languages, is awful to try to integrate with a command line editor like this.

Anyone know if the author plans to make a plugin client? That would be amazing.


The problem, I think, is on Intellij's or VS' side rather than on Kakoune's; otherwise, we would already have an Intellij client based on neovim. I'm in a similar boat to you, but I don't think there is much hope unless those IDEs actually do something to make this viable.


Yeah, you're probably right. I was sort of implying "with the understanding it's unlikely any of the IDE makers are going to do this, it would be nice to have the common code separate so a plugin wrapper is easy".

Something along those lines.


Shameless plug: I have been working on my own code editor as well, I wanted something between Notepad++ and Jupyter Notebooks; I called it TeIDE: https://github.com/omtinez/teide

Fully open source, built on Polymer and currently working on a plugin/action model to enable users to execute custom commands on the underlying shell.

Accepting pull requests and all forms of feedback :-)


Interesting, but how will they make money to fund continued development? So many editors show great promise to slowly disappear and fade away because of budget issues.


I liked the ideas and especially the paperclip :)

I couldn't find whether it is completely written from scratch or a vim fork? If not, why is it not a vim fork?


I believe it's a complete re-implementation. I think with so many 'deep' changes to the functionality, rewriting would probably be easier than forking.


The code statistics on github[1] show almost all C++, while vim is written in C. According to the author the project began as a reimplementation or merely a rewrite of vim then turned into a more ambitious reimagining of how to design a modal editor.

[1] https://github.com/mawww/kakoune


It is written from scratch in a very modern C++ style, I advise every C++ programmer to look at it. Also the code is quite well organized.


From the github repository: https://github.com/mawww/kakoune reply

    Vim inspired — Faster as in less keystrokes — Multiple selections — Orthogonal design


You can also use a cat or nothing as "helper".


I moved from Sublime Text to vim. Tried emacs first but for some reason it didn't click. vim was much easier to start with and I see the benefits of mastering modal editing. It's not about typing faster, but developing the muscle memory to transform text without thinking about it. That's really powerful.


I tried this editor out and the most maddening thing was figuring out how to reduce multiple cursors back down to one. I finally figured out - by accident - that pressing the space bar reduces your number of cursors down to one. The documentation needs to make this basic, necessary key-command a lot more obvious.


I think editors provide at least two more things: Code completion and global refactoring. Eclipse/IntelliJ users in the Java world can pound out entire programs in seconds using nothing but keyboard shortcuts. Are there features like this for other languages?


I see many valuable feature, such as the highlighting and the tooltips.

I wonder if these could have been expediently implemented as VIM plugins - perhaps each feature could have been a VIM plugin so that people can pick and choose which feature set they wanted.


Interesting, as a long term Vim user I might try this out. Currently invested some time in Spacemacs and I don't want to jump around too much.

It really needs a catchier name though. We have Vim. Spacemacs. Emacs. Kakoune sounds a bit foreign imho.


I really like it. However given how confusing for my Vim muscle memory a switching would be, I would have to make sure the ecosystem around it is good enough. Basic programming languages highlights and completions and similar tools.


This webpage has the honour of causing my browser (Firefox Nightly, Windows, 64-bit) to crash outright. It’s been ages since that’s happened. Ah, the occasional joys of running a nightly browser as your primary browser!


The same happens for me on FF on Android. I tried three times and it crashes each time. A shame, the comments have intrigued me.


The features demostrated here are almost the exact ones I'm looking to do in Vim (I've only been using for a few months) and the way they describe them here makes them so simple. I hope this continues to mature!


What I'm interested in is whether the editor will have nicer interfaces for plugins - async evaluation of things is a massive pain in vim. The same could be said for regular expressions to do syntax highlighting.


but when I ssh into a server it's 100% guaranteed vim or vi will be installed on it already. It will take years for kakoune to reach that state. Same with curl and grep. They are every where so I learn them.


I was pleasantly surprised at how good it is. Definitely keeping an eye on it.


This reminds me of "vis" from about a year ago - https://github.com/martanne/vis


How do you pronounce 'kakoune'?

Some people are already using 'kak' instead of 'kakoune', IMO 'kak' will be a better name.


Kak sounds like poo-poo in german and similar languages. It's even a loanword in english.


The videos don't seem to play on firefox 45.5.1


Boost dependency, which I always have bad luck getting to build in a reasonable time. Isn't Boost going away?


The concept is interesting but do the videos work? I get only moving ghost images. Android Opera and FF.


Finally, the legacy burden of vim and neovim gone, and a whole new world :D Thank you a lot!


It would be interesting to see it as an editing mode in atom.io or vs code!


You have my attention. :) edit: Wow, super excited to try this out.


what's the font that is used on the screenshots ? I would love to try it in Pycharm IDE/Jetbrain products.


The font is called terminus


vi [vee-ay] : Aztec expression for "how the fuck do I get off this shit".

Esc Esc : q!


I've actually never heard of Kakoune. And I'm not too familiar with verb based text editors in general. I've been using Visual Studio Code recently and like it functionality wise.

http://jsdiaries.com/2016/11/27/visual-studio-code-features-...

I may move on to a verb based editor like this as my projects getting more complex and navigating through verb commands is a must. But can someone tell me what languages would benefit most from an editor like Kakoune? I'm assuming creating macros would be a big part of using it ?


Interesting. Haven't seen a new modal editor in a while, nice to see some innovation there. How long until someone ports this to Emacs?


I'm glad to see someone thinking outside of the vi box when it comes to modal editing.

But the problem is that editors aren't very useful on their own without an ecosystem of development plugins.

I'd love to see this ported to VSCode.


There is GNU Emacs, there is Vim and you make your choice here. The rest is just pale copies.


Blah blah blah another "modal editing is better" article.

And once again, I'm not impressed. You may not like GUIs, but I do. You may think that keeping your hands on the keyboard and off the mouse makes you more productive, but I don't.

We all have our preferences. Yours are not better than mine. End of story.


they're not mutually exclusive. vim's modal features are handy even if you use gvim - e.g. you could select a range of text with the mouse and use y to yank it because you were in editing rather than insert mode




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: