All the examples listed are pretty uncommon or trivial in any of the other IDEs (aside from the regex part, which is cool, but I never want to be in a place where I have to regex my code...ever). 90% of the time I’m doing simple code maintenance, with an occasional refactoring. And I know devs that swear by vi...they are developing any faster than I am, and I touch my mouse about as much as they do (hardly ever).
My favorite is still Visual Studio with Resharper, worst is XCode.
* Unlimited yanking from kill rings: ie pasting text from history of the clipboard.(This is one thing I have most difficulty with when switching from emacs to modern editors)
* Macro recording and playback : recording an arbitrary set of edit operations and then replaying them any number of times.
* two or more code frames/windows side by side, even displaying the same file Surprisingly modern IDE guis seems not designed for it, eclipse can do it but clumsily.
* Remote file editing: use the IDE tools to edit file residing on another computer.
* Column edits or rectangle edits. Selecting a vertical column or rectangle of text and copying, moving it to another place.
I'm not sure exactly which vim features are also in vi. Vim has been a daily use tool for me since about 2007.
Vim has really good Macro recording. Vim + Tmux is great for side by side code frames, and there are plugins for showing multiple buffers in one Vim instance. Remote file editing is good with SSH + Vim. Vim has multiple registries for yanking/putting. Vim has column editing functionality.
Almost anything Emacs does out of the box Vim can do with either a plugin or with an external program pairing. I prefer Vim's keybindings because there are less "chords" (Ctrl-C and Ctrl-V are copy and paste chords, they requiring pressing two buttons at the same time). Too many chords causing my pinky fingers to become tired. Vimscript is a surprisingly powerful language for dealing with text data, but it's cryptic the first decade you are exposed to it.
EDIT: I'm more interesting in the code people write than the way people write it, but I wanted to share some of my vim knowledge and point of view.
> Unlimited yanking from kill rings
vi has named buffers, which aren’t the same thing you’re talking about, but definitely more than a single clipboard
> Macro recording and playback
vi can “execute a buffer” which are arbitrary commands, and at least nvi can do automatic substitutions as well in a “dumb macro” sort of way
> Two or more code frames...
Same for vi. In nvi it’s :E for vertically stacked or :vsplit for side-by-side. Like emacs, you can even run an interactive shell in a buffer (frame) and cut/copy/paste with another.
> Remote file editing
I presume you’re talking Tramp. Not out of the box with nvi, but it interacts with the Unix shell fantastically if you’re lucky enough to be developing in such an env. I’d be surprised if vim doesn’t have a decent Tramp-like feature.
I think vim does columnar edits, but I’m not a vim user; nvi is out of luck there, unless again one finds a solution punting to the shell - which isn’t the end of the world. But this case I think would disappoint you the most from your feature list (speaking for nvi).
I remember a friend of mine showing how easy it was to block select in vim. I waited 30 secs or so. I showed him the same in visual c++ (circa 2000s). We then had a "vim-off". eg. Find/replace/regex across a range of things -- using only the keyboard. The best I conceded was how the highlighting of results was probably superior... (sublime text, and vs code are as good as that now)
I know a lot of people here love vi (and Emacs), but personally, the only command I'm happy to learn is :q (and I presume negative karma for this comment will result) :D
I always install le for my terminal connections, and fall back to nano where needed. I've been meaning to write a console editor of my own that matches ye-o olde vc++ and visual studio...
I think there's something in the vi evangelism that I haven't quite grasped... otherwise I'm sure I'd have been using it for decades.
edit: not sure about the yank/ clipboard history... but that's part of the os in gui world.
It's embarrassing how much better emacs/vim/tmux/others are at windowing compared to supposedly advanced IDE's built on advanced windowing systems.
I hear about this from time to time, but have never seen it people do it successfully first hand, what I do see is silly mistakes in their checkins; incomplete variable renames, formatting is off, syntax errors, switching between browsers and their code while looking at manuals, or other obvious mistakes that can be caught inline by IDEs while you type.
edit/ A word.
I use regex search and replace fairly often; why are you so opposed to it?
If I need to change $t1 into t1 in a group of 6 lines (something I did today), its pretty easy to just make that replacement automatically. Doing it by hand would just take longer.
> ... with an occasional refactoring
That's exactly what I use the feature for.
Even then, the most common cases for me are searching for a string only at the beginning or ending of a line, or only searching for instances that are not part of a larger word.
For those purposes, IdeaVim works just fine, and gives me all the little speed boosts of vim with the added bonus of (in my opinion) a much more robust coding environment. It even makes some functions better; for example, `gd` works super well and nearly instantly in IntelliJ since the definitions are supplied by the IDE's 'Go To Declaration' rather than some hacky vim plugin. Other editors have similarly sufficient vim plugins, e.g. VSCodeVim.
And yes, I completely agree about switching between vim and ideavim for different languages, the experience is very different and the sight differences are very noticeable.
Again, I'm not a power user so to me these are the main issues and they're tolerable. For cursor movements I don't do anything too tricky, and all the movements I'm aware of do what I expect them to do.
I agree with you that if you don't use a specialist tool 24/7 you'll be slow, but that is expected vi optimizes for expert users not for novice users.
In the same way that if I don't use Photoshop and then just want to do something simple in it, it's going to take me a lot of time and am probably going to forget how to do it because I don't use it enough.
0 - https://stackoverflow.com/questions/1218390/what-is-your-mos...
Vim on Dvorak is insane, imho.
The formula: number(Optional) action movement
Examples:
2 dl - delete two characters right
dw - delete a word
yb - copy back a word
y/foo - copy to the search foo
4cw - change the next four words
actions: yank(copy, delete, change)
movements: /(search), t(til character), f(to character), many many others (l, h, j, k, *, #, T, F)
Combine as you see fit.
In terms of transferring Vim 'motor memory' from a qwerty layout to a dvorak layout, IMO it meant focussing more on an added indirection of "which letters" rather than "which fingers where".
* Eclipse - Forced to use this in University in the early aughts. I would say that crashing and clobbering systems was its best feature. You moved your mouse it crashed; thought about saving crash; need an update, now you need to format and clean install windows; want to print, printing works! want to compile, your gonna need to try again after restarting windows...
* SSH - In University we had some awesome terminal servers that were a joy to work with. I could access all my work from anywhere, regardless of how limited my local machine was. Vim was always there, chugging right along.
I was going mention a recent article I heard about that vi was going to be removed from upcoming Ubuntu distributions, but it appears that was an April Fools joke... <insert curmudgeon grumbling here>
I could keep going. Again, not hating on Vim. I use Vim keybindings in IntelliJ! I just don't think it's the best tool for working in large codebases.
I use Vim because I love the history behind it and love knowing that investing my time in learning it is unlikely ever to go to waste. It's a solid editor and also helps keep me as close to understanding the ins and outs of my system and build tools. And for better or worse I just enjoy figuring out the best way to configure things exactly how I want them.
>> Here's just a few IntelliJ features I use daily that Vim doesn't have: vim is intended to work with an operating system. The following assumes C or C++ since that's what I use. Maybe someone will find this list of equivalents useful? 1. Go to declaration: I use ctags which is built into vim. clangd can do better, but I've never bothered. 2. find usages: ctags also has support for this I think. 3. rename method/class: I haven't needed to rename something that wasn't exclusively in one file yet, but I expect clang-rename works well. 4. change method signature: not sure what this does. If it's just changing the declaration of the function, that seems pretty easy. ci( 5. auto-import: This one seems harder to get, but I never noticed it wasn't there. For in-project stuff, I just jump to definition. For standard library stuff, it's standard library. 6. shortcut to override method: I don't do much inheritance, so I never really noticed. This seems pretty easy to do a hack job with a macro and jump to definition. 7. easy-to-configure style rules: clang-format 8. really good code completion: basic autocomplete is built into vim. clangd is probably pretty good, but I don't usually need autocomplete. 9. quick access to javadoc: cppman is pretty good. https://stackoverflow.com/questions/2272759/looking-up-c-doc...
Maybe the state of tooling for Java isn't as openly accessible outside of an IDE and isn't as good for vim as C++? If using an IDE works well for you, great. I like using vim because it's lightweight, has good support for different file endings and large files, scales to any size code base I've encountered, and it gets out of my way. I feel like it's optimized enough that my brain is the limiter.
Having Vim bindings in IntelliJ is indeed the best of both worlds.
I don't know about intelliJ specifically, but a good debugger beats the crap off the limited interface an IDE provides to them. It looks like IntelliJ only offers basic breakpoint/step through, etc. For a quick overview of what you're missing out on checkout "Give me 15 minute and I'll change you min on GDB": https://www.youtube.com/watch?v=PorfLSr3DDI (hopefully the right video, can't check at work)
Plain Vim does not have the semantic / refactoring capabilities of a real IDE. This plugin gives the best of both worlds.
used vscode for 2 years on and off, finally decided to part away two months ago and bought webstorm instead, the time spent on vscode with all the configuration and plugins and settingsync(which is not reliable) is way more expensive than webstorm's license fee(same as pycharm)