If you really need an AI and autocompletion to produce working code, I am not sure your code is that good for humans to read - and this is the most important aspect of code. It not only needs to be writable, it needs to be well readable. That is just silly. If I'm working on a server, or another workstation, I can use a common editing environment.
There is nothing stubborn about it, consistency is powerful. Amorymeltzer on Nov 9, parent next [—]. Vi was used sometimes to change a config file or to inspect something while SSH-ed into a server, but IDEs have always been used as the primary ways to write source code. I've mainly worked with Java, JavaScript and Python.
I tried learning vim properly, memorizing the shortcuts etc. I had several attempts at this throughout the years. But I always felt it slowed me down soooo much. And almost everything works out of the box. I don't have to install plugins or configure anything to have syntax highlighting, git etc. I import a Gradle project and IntelliJ knows everything. But throughout the years you'll learn those things eventually.
And in the meantime you don't need to master them to be productive. I completely don't get the comments that you need to constantly Google things like "How to do X in Eclipse".
Some of them you do need to Google, but most things are straightforward. Meanwhile when working with vim I kept constantly Googling things like "how to replace a word", "how to copy a line", "how to delete a line" That's why it looks to be the other way on the internet. I actually think that you have to google a lot more for emacs.
Lots of people in favor of command line editors also tell you that you should look at man pages etc rather than use a UI. I do google "how to delete a line" for every new editor because they are different everywhere and work in different ways. Should I put a cursor at the start of a line to delete it or I can delete from any place? I started programming in the days of punchcards. The idea that I use Vim and Emacs because I don't know better is simply uninformed.
I use Vim because no other editor connects my mind so directly to the code I am working on, as fast as I can think of where I want to be in the code or where I need to make the change, I am there and made the edit with just a few keystrokes. I use Emacs because of its phenominal collection of packages: org-mode for writing text, outlines, interactive agendas, literate-programming; magit for git, auctex for composing LaTeX, tramp for editing remote files over ssh; dired for viewing and organizing my directory contents and hierarchies.
In addition to the hundreds of commands and built in packages there are over contributed packages that provide amazing facilities. All of this in a self documenting, fully programmable system.
I pay for a subscription to the full set of Jetbrain's IDEs, they're great and worth far more to me than the much more expensive Adobe subscription that I have but use very little. Why are so many coders still using Vim and Emacs? Also, unlike most IDEs, Vim will still be there after 5 years, 10 years, or 15 years.
I feel the same way. The beauty of Vim is that it's not only flexible but also respects the user; unlike most IDEs it doesn't blindly make assumptions, auto-format code while it's being written, auto-close brackets and tags, it has no "plugin XY has a new update!
It just reacts to input and nothing more. Vim can have most of those things if needed, but after years of usage my tolerance for "smart" features declines constantly. Which in turn made me gravitate towards using more CLI utilities, as those follow the same philosophy and go hand in hand with Vim.
The "no automation but efficient shortcuts" approach just feels more reliable and predictable. An old coworker Vim user of mine had a good response to another coworker who asked him "why don't you use an IDE?
Knowing a bit of emacs has helped me a lot when fixing code on servers via shell. I also think that while learning, writing code in an even more primitive editor editor. It has made me research topics I might have taken hours to find out for myself. It encourages frequent and easy renaming of variables and functions across the whole project, which has allowed me to be more flexible and maintain sensible names for things even after changes. It encourages consistent naming, too.
It makes navigating code throughout the whole project a breeze. And basically any of the gazillion of features can be assigned a keyboard shortcut. This one is really a good thing, I agree. I stopped reading immediately after this: The endless war between Vim and Emacs users has continued ad nauseam over the years. Honestly emacs and vim haven't been at war for ages.
We joined in an unofficial peace treaty when the common enemy of graphical IDEs appeared. What I want from an editor: 1. To get it to work well, it requires set up, and when I start a project, I don't want to waste time setting anything up.
Also, doesn't work for interesting things, like code generation. I realize most programmers rarely do anything like that, but I do. Customizability -- emacs is super-customizable. Lisp is easy to understand and you can basically do anything. No mouse -- I'm faster just using keyboard shortcuts 4. Runs in terminal or graphical -- When I ssh into a machine, I want to be able to use Emacs through the terminal 5.
Orthogonal user-interface -- In Emacs, everything is a buffer. I can use the same interface to navigate through Emacs 'configuration' as I can through my code. I can use the same interface to navigate through the Emacs terminal emulator as my code as well. This is amazing. Contrast this to 'newer' editors like Sublime or Eclipse, where the configuration dialog, git interface, etc, are all custom UIs.
To understand why this makes a difference compare and contrast the experience of using a Web-based App via a browser to the feeling of using a Native App. There's a reason HTML based interfaces are so popular 6. Universal support -- emacs runs on basically everything. So does VIM Probably more than emacs 7. Support for large numbers of libraries, languages, etc -- I've rarely found any new language, framework, etc, which doesn't have support in Emacs.
With some changes to my init. Easy dot files -- I have several computers. To set up emacs on a new computer, I just copy my. In other words, the advantages of Emacs and VIM over other editors are: 1. Text-based interfaces 2. Universal support 3. Customizability 4.
Adherence to the UNIX philosophy everything represented as text. Considering the popularity of Vim and Emacs I sometimes wonder if I'm missing out by not using them over my preferred editor, but whenever people describe their reasons for using them in lists like this, I see nothing that I would consider an advantage over my current setup, and then just forget about the whole thing. TBF, you've just described exactly how us emacs and vim users feel every time someone says "why aren't you using shiny new editor X?
It has feature Y! As an emacs user who has used a few IDE's in my time, some nice things you might be missing but which you may not care enough about to switch : Easily recording and playing back macros. Thank you. Rectangular selection is available is VSCode and I use it a lot. The generalisation, multiple cursors with each cursor having its own clipboard , is the best thing since sliced bread in a text editor. I don't have undo tree, I can see it being useful sometimes. Hope it appears in VSCode soon [1].
Fequent automated backups file history works OK as an alternative. In VSCode you can also jump a fraction of a word to an underscore or the next part of a camel case name.
Well this I can't do but never needed to. It's your list so make it however you want. But to me it looks more like a list of reasons you love emacs than a list of requirements. Mostly I use it for editing config files and other scripts, and occasionally to perform more complex editing tasks in files I'd usually use other editors for. I have a good configuration for editing these sorts of files. I have tab completion, project search, and the like set up here, but not more complex language-specific editing functionality for the most part.
I'll edit other files here if it's convenient especially if I'm editing a file linked to by my Org agenda - I use Doom Emacs, so there are some sane defaults installed for other languages - but I probably won't adopt Emacs as my primary editor, since it's prone to lag and lock up too often.
Maybe that's due to Org, and I could fix it, but since Emacs' support for multithreading and async isn't the most robust, it seems like a better of use of my time to leave Emacs dedicated to Org mode. I've briefly tried to set up such integration with Vim and Emacs - they exist, but it hasn't been worth my time when a frankly pretty good solution is actively maintained internally.
The Language Server Protocol has been a boon to all the editors I use. Just wanted to mention that Vim and Emacs both support the language server protocol -- I can't speak to vim support since I'm primarily an emacs user, but it's been great for me. I know - if I decide to code outside of work in a non-Emacs Lisp project, I'll give them a try.
Ahh magit, the reason I keep getting back to Emacs. What I like about Vim is that it has a limited set of features out of the box. As a result, I feel that I have a strong understanding and command of Vim. If I want an additional feature I can either add it myself or look for an available plugin. With plugins I usually go through an adoption period where I try to determine if the benefits of the added features outweighs the loss of total understanding of my setup or any degradation in performance.
In other words, I enjoy that Vim is an onion with few layers. Simple workflows are generally easy to get working, but adapting the tool to a complex workflow can have me clicking obscure options on the Nth option page without an understanding of what I've just done to solve the issue.
As someone who works on a variety of codebases, tinkering around with setups for each project can a become a serious time sink and b can increasingly make me feel like I don't understand the tool if each setup seems to be relying on disjoint sets of new-to-me configuration options. Additionally, I personally feel that "magic" utilities can rob me of my understanding of languages and codebases. Regardless of my preference for Vim, I have found that a distributable configuration for a modern feature-rich IDE can be an invaluable asset for open source projects.
Being able to open an IDE, load a configuration, and press the build button can remove significant barriers for contributing to projects where your understanding of the codebase and build system are nonexistent. The last 20 years or so has required me to develop mostly scripting ksh, sh or bash that is executed by some sort of automation.
The shell is where I spend most of my time executing commands that need to be scripted, inspecting various system resources and troubleshooting. The vim editor is readily available to use in places where external tools outside of a terminal emulator may not be readily available or the startup time required to configure those tools may be better spent on configuration tweaks in the shell.
I've also found especially when working with build automation in Jenkins or deployment automation with uDeploy, that a GUI-based client IDE somewhat obscures things I need to see in the environment I am building in. IDEs like Eclipse and IntelliJ IDEA, while providing plugins for Gradle or Maven, may have configurations that are not compatible or differ in some fundamental way from those of the server build environment.
As soon as you go from the generic "mechanic's tool set" or "homeowner's tool set" to a toolchest you've created with all your screwdrivers in one drawer in plain sight, and your wrenches in another You know the immediate productivity boost of just going and getting what you need directly. Most real mechanics add tools to their tool chest for specific jobs they've done, and common jobs start migrating the tools closer at hand.
This is all done organically and good experienced people can do things quickly and efficiently and it works at any employer, cross-platform Doesn't mean these folks can't use visual studio or xcode. Or fix a flat on the side of the road with the tools that came with the car. On top of that, while you have tens of thousands of good tools at your disposal, you can simply forgot about those that you do not happen to need.
Whenever you need them, they will be there for you, but until then, they stay out of your way, and don't waste your attention. Upvoter33 on Nov 9, prev next [—]. Because emacs is awesome. Every key press runs a program! Easily customized by writing code. Easy to pop up in a terminal and pop back out quickly. Can't imagine using something else, unless it's a modernized emacs. Answering the title question as written: Because IDEs are a trap. Skills wither. Whenever I find a spelling error in a variable or field name duplicated hundreds of times throughout a code base, I know an IDE has been there before me.
I find plenty of spelling errors with VIM users. It mostly comes down to who has spellcheck on and pays attention to it. I personally love vim, and have found that setting up vim keybindings for my IDE seems like the best of all worlds. I do appreciate the consistency and speed of plain vim, however I can't fathom trading that for code completion, which in my experience is the biggest missing feature from vim.
Even with plugins like YouCompleteMe which is awesome the completion quality isn't even close to what you get in a real IDE. I'm honestly curious how people code productively in a professional environment without code completion? Seb-C on Nov 10, parent next [—]. I had the same problem until I tried coc. It is really good since it is based on the VSCode's engine.
Like a woodworker who builds their own tool bench exactly how they like it, a programmer needs a toolset that suits them and that they understand intimately. On the other hand customizing Emacs or Vim, but I think Emacs is much easier to dig into is trivial, and with a bit more effort writing really advanced customization that script your editor for whatever you need is pretty easy.
If something breaks, in your code, an installed package, or the core editor, you can just debug it with a first-class built-in debugger. I often have project-specific code to e.
Could I do that in Goland? Probably, with enough effort. Sometimes I need to edit a 10GB text file. Good luck with anything other than vim.
Last time I had to edit a huge file vim failed and vscode succeeded. Is there some special mode you need to be in while using vim on huge files? Sublime can do that. I bet intellij could pull it off if you had sufficient ram which you probably do if your editing 10 gb files.
I don't know why you would ever need to load a 10 gig file to memory. Vim doesn't load it all into memory. Sed and perl means you are writing a program to deal with it. I already have a program that can deal with it.
So I have to work remotely, and the latency of remote desktop is abhorrent, so a graphical IDE is out. Also CLion, which I normally love, simply can't index the massive codebase.
So even before working remotely I started using emacs with lsp-mode. Which is fine because I have been a casual emacs user for 30 years now so my fingers work efficiently in it, and the LSP stuff is fast and competent. It indexes everything I need and has pretty good symbol navigation and even some simple refactorings. I'm a paying CLion customer, but JetBrains can't seem to get their act together with large code bases. I use vim, with only the dumb auto-complete, because it forces me to take it easy, to get a more complete mental model of the area of the code I'm working on, and, if it becomes too tangled to keep in my head, the tool won't save me and I'm forced to rethink that part of the program.
It forces me to concentrate a bit more, to focus and achieve a state of mind that I enjoy a lot, where I feel close to the code, at peace, focused. Back when I started programming, I was using windows notepad, then UltraEdit32, Ms Visual Studio, then on Linux Code::Blocks and Eclipse, and it's so awesome how they can look into the structures and tell me the properties on the objects, but on the other side, it removes the friction of writing ugly structures with too many badly named properties.
So I moved to VIM relatively late. I dunno, it just gives me a different level of peace and understanding.. It's also practical because I can work over ssh and with tmux, and vim does have nice text-editing capabilities, though I'm often not using it to it's full potential.
The article mentions how our fingers are the bottleneck in turning though into code, maybe those guys are brilliant, or maybe they write too much code, I like to spend time on each and every line, not just pound away like a crazed monkey like I did in my teenage years, I like to consider each line I write, and examine it together with the lines around it and the functions around it and the objects around it, does it fit in, does it feel right, does it perform well..
This takes a long time for me. Maybe I've turned into a bad programmer.. Incredible and awesome idea. And Emacs has one of the best implementations of that idea. Try Spacemacs and maybe you'd realize that Emacs can vim better than Vim and Neovim.
I use Orgzly on Android, and it's quite usable. I haven't tried syncing things back and forth, but I use it all the time for quick notes on things. Can't speak to iOS, since I haven't used an iPhone in more than a decade well, except for the work iPhone at a previous job that I promptly "installed" as a hotspot by plugging it into an outlet on the "roof" of the office pod inside the warehouse in which I worked and forgot about, but I don't typically count that.
There was no reason to use Emacs if that's the way you used it. IMO the reason to use Emacs is because you want to customize things. It's a programming language that you interact with in the form of a text editor. That's a pretty small number of people for sure, but for those that want that, Emacs cannot be replaced by a random IDE.
Fishkins on July 22, prev next [—]. I really like the Orgzly app for Android. It does everything I think it feasible on a phone interface, and I sync via Dropbox. But after over forty years, Emacs is still here, and it is being developed and getting improvements. I am sure, as long as the keyboard input stays the primary way to enter information, Emacs still be relevant - ten, twenty, thirty years from now.
Yes, certain IDEs are better suited for specific tasks, but if you need a universal malleable tool that you can bend any way you like, there's simply no better tool in the existence. Have you ever thought about it? Almost nobody whoever contributed to Emacs ecosystem - either by submitting patches, improving documentation or publishing packages plugins , has ever got paid for their work.
I have over packages installed in my config, and it is my primary working environment in fact: besides the browser, it is my only environment. I am not sure that I'll even work. Emacs ecosystem defies any logic, it shouldn't work at all, yet it does.
Many developers successfully use it every single day. Heck, some parts of whatever IDE you are using right now probably were written in Emacs. Yes, Org-mode deemed "a killer app of Emacs" and rightfully so. There are reasons why all attempts to port Org-mode functionality to other editors were never very successful. Org-mode is huge. It has tons of features.
You can do a lot using Org-mode alone. But I also do things outside of the immediate context of what Org-mode made for. I manage my dotfiles using org-mode. I don't lose anything moving from one machine to another. Or here's another example: whenever I like something on Youtube or Twitter, upvote on Reddit, push something to Pocket AKA Read-it-later either on the phone or desktop - that thing appears in my org-mode agenda with a deadline of 30 days.
If I don't review it within that time - it'll keep reminding me. Org-mode has the best markup format, better than markdown. People write and publish books using Org-mode these days. Please inline answers so they are self-standing.
I don't think it is nice to copy and paste just like that from other people's website So I add a tl;dr version instead. It would appear that the apprentice went on to write emacs. That anecdote is same as the propagation idea behind the "Standards" comic strip in XKCD , but switch standards with text editors. I've always considered IDEs to be more of a build environment than a development environment.
It's as if you don't even know what programming languages and editors are. John R. Let me put it this way. I am a trained hypnotist. Hypnotists are taught the importance of precise, clear language. That specifically includes vi. I haven't used VIM, specifically, but it is my understanding that it is a vi clone, which leads me to expect it to share vi's deficiencies.
Open file, open other file, open new terminal, Maybe vim has a better solution for that problem, but if so, I've not observed anyone using it. Agree on the multiple files, but I think customizability is key, and I'm sure vim can be made to have buffers : — bytepusher. Karl Bielefeldt. Well, 20 years later I'm still using emacs, and like you I have slowly gathered a list of tailorings and cusomisings - but only when something irritates me.
I can do things FAST in emacs. I use IDEs as well, and thins like not having multiple source files open alonside each other, or split file panes drives me crazy! I'm a Vim user. Vim even has some built-in features specifically for NetBeans integration. I haven't tried, as I've never needed NetBeans' features. Eclim allows you to use Vim actual Vim, not just Vim emulation as your editor in Eclipse and similarly enables Vim to take advantage of some of Eclipse's features.
Looking back at this question and my answer, it's kind of a non-sequitur. I know that there are usually options to make the stock editor of whatever IDE to work like either Vim or Emacs. The general idea that most users of Vim and Emacs have, when having to work with an IDE all of a sudden, is they can't use their favorite editors.
Don't settle for an IDE when you already have linux. Christopher Mahan. Unfortunately "vi" is standard on Unix systems so you cannot get rid of it. But what do I know, I'm still using Vim. Neither are really from the s. And I agree that Acme should be remembered more often. Am I the only person who still uses ed occasionally? And for those folks who think code bloat is relevant Note that pure binary size isn't everything.
That emacs binary has quite a lot of its supporting library dumped in, so you may want to compare the size of the full "standard" macro library as well. Vatine - my point is not that emacs is large.
My point is that ed is small. I don't need to show how large emacs really is to make that point. Only person? Probably not. Only person doing so voluntarily, probably so. I just want an EDitor!! Show 3 more comments. I supposed I am an odd duck, but I actually use different editors, depending on the situation. Vim : When I am connected ssh'd onto a distant server for example looking at the logs and I want to quickly edit a file and make some tweak.
Matthieu M. I'm pretty much the same. JBuilder hasn't been around for years at least in any meaningful sense. It's been so far outclassed by IntelliJ and Eclipse that there is no reason to try to go back. A few. But none really make it as accessible as Vi. Visual Studio, which seems to be everyone's favourite "bloated IDE" has search-and-replace with regex and reasonably discoverable too.
Emacs has a search-and-replace with regex, you know. The Overflow Blog. Does ES6 make JavaScript frameworks obsolete? Podcast Do polyglots have an edge when it comes to mastering programming Emacs identifies error lines containing filenames and line numbers, and you can click on them to jump directly to the corresponding buffer and line. Invokes gdb in a new buffer. You can use the gdb command line as usual in that buffer.
However, Emacs lets you set breakpoints directly from your source buffers and shows execution by marking the active line in your source buffers. Emacs can also display breakpoints, the stack, and locals, simultaneously and each in their own window. Invokes grep and prints results in a new buffer.
Like M-x compile , when you click on a match Emacs opens the correct file and takes you to the matching line. If you need to execute a simple shell command, these commands can save you the trouble of switching to an xterm or starting a new Emacs shell buffer:.
Executes a command, piping in the current region as input; displays the output in a new buffer. For either command, a C-u prefix will insert the output in your current buffer rather than using a temporary buffer. Emacs helps you manipulate and edit files stored in version control. Emacs supports CVS, Subversion, bzr, git, hg, and other systems, but it offers a uniform interface, called VC, regardless of the version control system you are using.
Emacs automatically detects when a file you're editing is under version control, and displays something like this in the mode line: CVS M-x vc-next-action or C-x v v commits the current file prompting you for a log message if you've modified it. Under version control systems that require locking, this command also acquires a lock for you. Prompts you for a version number and shows you that version of the current file in another window.
Displays an annotated version of the file showing, for each line, the commit where that line was last changed and by whom. On any line you can press L to view the log message for that commit or D to view the associated diff.
Displays a log of previous changes to the file. When the cursor is on a particular log entry, you can press d to view the diff associated with that change or f to view that version of the file. See info " emacs Version Control" for more information.
Some special features are enabled when you are looking at a diff whether from a file, or one produced by VC. Emacs lets you move around in a diff by hunks or files, apply individual hunks to a file, reverse a diff, and do other operations useful for reading or manually editing diffs. See info " emacs Diff Mode" for more information.
Emacs can edit remote files transparently as if they were local using a feature called Tramp. With Tramp you can edit files on different computers using a single Emacs session, even if Emacs is not installed on the remote side.
You can also use Tramp to edit local files with another user's permissions. Some people like to keep only a single instance of Emacs open and edit all their files in there. Doing this has a few advantages:. You can avoid this by using emacsclient , which instead opens a new frame connected to an existing instance of Emacs:. For more information, see info " emacs Emacs Server".
We've also seen a prefix argument used to modify the following command the numeric argument, if provided, is ignored :. If you ever get confused, the documentation for any command accessible with C-h f or C-h k describes the effect of the prefix argument, if any. See info " emacs Arguments" for more information. Every buffer has an associated major mode , which alters certain behaviors, key bindings, and text display in that buffer.
The idea is to customize the appearance and features available based on the contents of the buffer. Emacs ships with dozens of major modes for editing widely used programming languages, markup languages, and configuration file formats. These major modes tell Emacs how to:. Some commands we've seen, like M-x dired , M-x compile , and M-x shell , in fact use their own special major modes to make their buffers provide certain features such as highlighting compile errors and making them clickable.
The current major mode is displayed in the mode line. The last thing on the mode line should be one or more items in parentheses, like Python Narrow. The first of these is the name of the major mode. Emacs is very good at determining the right mode to use when you open a file, so you'll rarely have to use the above commands. In almost all cases, major modes for unsupported formats are available as extension packages. You can find many of them on EmacsWiki.
See info " emacs Major Modes" for more information. Every buffer can also have any number of minor modes , which are extra pieces of functionality you can enable, independently of each other and of the major mode. Minor modes are listed in the mode line after the major mode inside the parentheses.
Here are a few commonly used ones:. If you have a buffer displayed in two windows side by side, follow-mode forces them to scroll together such that the text displayed in the second window comes right after the text in the first window, and moving your cursor off the bottom of the left window causes it to appear at the top of the right window:.
Some minor modes are global, i.
0コメント