<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.issarice.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Issa</id>
	<title>Issawiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.issarice.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Issa"/>
	<link rel="alternate" type="text/html" href="https://wiki.issarice.com/wiki/Special:Contributions/Issa"/>
	<updated>2026-05-30T03:19:45Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.31.6</generator>
	<entry>
		<id>https://wiki.issarice.com/index.php?title=Design_philosophies_of_Vim_vs_Emacs&amp;diff=2971</id>
		<title>Design philosophies of Vim vs Emacs</title>
		<link rel="alternate" type="text/html" href="https://wiki.issarice.com/index.php?title=Design_philosophies_of_Vim_vs_Emacs&amp;diff=2971"/>
		<updated>2026-01-16T02:58:31Z</updated>

		<summary type="html">&lt;p&gt;Issa: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
==Modal vs chording==&lt;br /&gt;
&lt;br /&gt;
* Atomic edits and the dot command in Vim: When you use Vim, you naturally start to think in terms of repeatable edits that you can then use the &amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt; command to repeat. But this has a side-effect in that Vim requires you to manually chunk your undo history. Emacs instead automatically chunks undos.&lt;br /&gt;
* One consequence of the modal editing is that I think Vim degrades gracefully to having worse keyboards/a less ergonomic setup in general ([https://youtu.be/SY8L-cj4x6k?t=3594 or big hands]). For example, I bought a fairly crappy external USB keyboard for $25 where if I don&amp;#039;t press the Ctrl key very firmly, sometimes it will not register. This hasn&amp;#039;t been a problem in most software, but &amp;#039;&amp;#039;has&amp;#039;&amp;#039; become a problem when I use Emacs because I need to hold down the Ctrl key a lot for navigating with Ctrl+p and Ctrl+n. In Vim, I don&amp;#039;t have this problem at all because Ctrl just isn&amp;#039;t a key I need to hold down for long periods; it&amp;#039;s something I momentarily hold down, just long enough to press another key. So I have never run into this problem when using Vim (or even Firefox or other software). Emacs is the editor, and really only software, that in some sense &amp;#039;&amp;#039;requires&amp;#039;&amp;#039; me to have a nice keyboard.&lt;br /&gt;
* Another consequence of modal editing (in particular, the fact that Vi decided to use the escape key as the modal switch to move out of insert and command-line modes) is that since escape is also use in terminal escape sequences, now there is a conflict in interpreting key sequences containing the escape key: is it the user switching out of insert mode and typing some normal-mode commands? Or is it the start of a terminal escape sequence (e.g. use of the arrow keys)? Because of this, Vim added options like ttimeout, ttimeoutlen, esckeys, and probably more, and tmux also has an option called escape-time which used to be necessary to set. If these options are not set correctly, one may have to wait up to 1-3 seconds for the effect of typing an escape key to show up on screen (because without waiting, Vim is not sure if you meant to just type an escape key or if you typed something that began a terminal escape sequence). It also means that unlike in all other terminal applications, you cannot easily use alt-key bindings, and in particular you cannot do the esc-key alternative to send an alt-key binding. If Vim had chosen literally any other key to represent mode switching (such as Ctrl-c, or maybe Ctrl-z which is used in evil-mode on Emacs to toggle between Vim-mode and Emacs-mode), this would not have been a problem. (Not to mention that if such a replacement key was chosen well, it would have been easier to type than Ctrl-[ or the escape key, since the escape key on modern keyboards is far from the home row of the keyboard and the left-square-bracket is vaguely hard to reach for!) Modern terminals like Kitty, and also Neovim, are finally fixing this so that you don&amp;#039;t have to ever think about this anymore. But there is still a sort of burden I feel from years of Vim use.&lt;br /&gt;
&lt;br /&gt;
==Unix as IDE vs Emacs as OS==&lt;br /&gt;
&lt;br /&gt;
Vim tries to just be a text editor, and tries to play nice with the other tools on your computer, using commands like &amp;lt;code&amp;gt;:!command&amp;lt;/code&amp;gt; (runs external command) or &amp;lt;code&amp;gt;:w !command&amp;lt;/code&amp;gt; (pipes text to external command via stdin) or &amp;lt;code&amp;gt;:r !command&amp;lt;/code&amp;gt; (reads from external command via stdout).&lt;br /&gt;
&lt;br /&gt;
===...with some exceptions===&lt;br /&gt;
&lt;br /&gt;
Vim has a built-in spellchecker, whereas Emacs doesn&amp;#039;t (it does come with flyspell, which works with an external spellchecker like hunspell or aspell). (Emacs comes with tetris, an RPN calculator, an email client, etc., but not a spell-checker!)&lt;br /&gt;
&lt;br /&gt;
==Session management: per project vs single instance==&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;right way&amp;quot; to use Vim is to have one instance of Vim open per &amp;quot;project&amp;quot;. Each Vim instance maintains its own current directory, so you can e.g. open files relative to that current directory.&lt;br /&gt;
&lt;br /&gt;
In Emacs, the expectation is that you will have a single Emacs instance open. Emacs itself doesn&amp;#039;t maintain its current directory, and instead all file-open actions are relative to the buffer&amp;#039;s directory.&lt;br /&gt;
&lt;br /&gt;
Vim can do the Emacs thing with :set autochdir, but this is disabled by default.&lt;br /&gt;
&lt;br /&gt;
See [https://nullprogram.com/blog/2017/08/22/ this blog post] for more details.&lt;br /&gt;
&lt;br /&gt;
==Line-based vs character-based==&lt;br /&gt;
&lt;br /&gt;
Vim comes from a lineage of line-based editors. Registers can be linewise or characterwise, which means that actions like pasting text can act on entire lines or on characters. Some commands, like :substitute or :global, only work linewise. This is even reflected in the motion to move up or down a line: by default, j and k move down or up by logical lines instead of screen lines. However, due to this lineage, Vim does not deal well with long lines of text. Recent version of Vim have :set smoothscroll, but this only partially works.&lt;br /&gt;
&lt;br /&gt;
Emacs is like most other text editors in that it has no concept of linewise. Ctrl-n and Ctrl-p move by screen-lines, not logical lines, which makes sense when you think of the buffer of text as a stream of characters rather than an array of lines.&lt;br /&gt;
&lt;br /&gt;
==Mappings: keystroke based vs function-based==&lt;br /&gt;
&lt;br /&gt;
In Vim, commands like &amp;quot;copy text&amp;quot; don&amp;#039;t have a &amp;quot;name&amp;quot;; they are simply the keystroke that is used to perform that action. So if you want to &amp;quot;program&amp;quot; Vim to repeat some action, such as when defining a mapping, you simply tell Vim which keystrokes you want to repeat.&lt;br /&gt;
&lt;br /&gt;
In Emacs, every keystroke, even entering a single character, has a function that is associated with it. Emacs is simply an interpreter that runs the function associated with the keystroke. You can always do Ctrl-h k followed by the keystroke to find which function is bound to that particular keystroke.&lt;br /&gt;
&lt;br /&gt;
I think that being keystroke-based is one of the reasons Vim is so conservative about default keybindings (even when they are terrible, like Ctrl-b to go to the beginning of the line in command-line mode, or Y to copy the entire line instead of copying to the end of the line), because if you change the default keybinding inside of the C source code, it actually breaks all user mappings and scripts that rely on replaying keystrokes. So then eventually Vim came up with defaults.vim, which is not implemented on the level of C, but instead implemented on the level of Vimscript. By implementing it in Vimscript, it functions like user configuration, so it doesn&amp;#039;t change what the original keybindings mean. But doing this also means now you have to reason about multiple levels, the &amp;quot;base layer C keybindings&amp;quot; vs the &amp;quot;default keybindings that you actually interact with&amp;quot;. And at that point you&amp;#039;ve kind of reinvented the thing that Emacs does.&lt;br /&gt;
&lt;br /&gt;
==Actions: commands vs keybindings==&lt;br /&gt;
&lt;br /&gt;
Vim often uses the command-line for even common actions, e.g. :w to save a file [https://www.reddit.com/r/vim/comments/267vrv/i_am_tim_pope_crafter_of_plugins_ama/chojzsb/]. Emacs relies more on keybindings, e.g. Ctrl-x Ctrl-s to save a file.&lt;br /&gt;
&lt;br /&gt;
But there are some exceptions. To open the file that the cursor is on, Vim has various keybindings, including &amp;lt;code&amp;gt;gf&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;gF&amp;lt;/code&amp;gt;, Ctrl-w f, etc., but Emacs only has M-x ffap.&lt;br /&gt;
&lt;br /&gt;
==Tree-based undo vs stack-based undo==&lt;br /&gt;
&lt;br /&gt;
(I think the mark ring in Emacs is also stack-based.)&lt;br /&gt;
&lt;br /&gt;
==Multiple similar commands vs single repeated command==&lt;br /&gt;
&lt;br /&gt;
This one is a bit hard to explain, but there is a definite pattern where Vim prefers to give the user multiple similar commands, while Emacs prefers to give a single command that you can then repeat or use creatively. The best way to explain is to give a bunch of examples:&lt;br /&gt;
&lt;br /&gt;
* Changing the screen view relative to cursor: Vim gives you zz to scroll so as to leave the cursor at the center of the screen, zt to scroll and put the cursor at the top, and zb to scroll and put the cursor at the bottom. Emacs just gives you a single command, Ctrl-l, which when repeatedly pressed, will cycle between all three views.&lt;br /&gt;
* Moving cursor to top, middle, bottom: Vim gives you H to move cursor to the top of the screen, M to move to middle, and L to move to bottom. Emacs just gives you Alt-r, which will cycle between the three configurations.&lt;br /&gt;
* Indenting: The way TAB indenting works in Emacs is very distinctive. You press TAB and Emacs just indents the line to whatever it thinks is the right level. Vim&amp;#039;s TAB in insert mode just inserts a literal tab or spaces depending on the &amp;#039;expandtab&amp;#039; option. But Vim also gives you, in insert mode, Ctrl-f to do the Emacs-like thing, Ctrl-t to indent the current line, Ctrl-d to decrease the indent of the current line. And many more commands in normal mode.&lt;br /&gt;
* Folding: Vim gives you fine-grained commands like zo to open a fold, zc to close a fold, zR to globally reduce the fold level in the file, etc. Emacs as far as I know doesn&amp;#039;t have folding by default, but certain major modes like org-mode and markdown-mode do have folding, and in these, you simply press TAB to cycle the different folding levels, or Shift-TAB to do the cycling globally across the entire file.&lt;br /&gt;
* Vim gives you Y, D, C, to copy, delete, and change (respectively) until the end of the line. Emacs just gives you Ctrl-k, which it then expects you to creatively make use of (e.g. if you want to copy until the end of the line, you do Ctrl-k to delete until the end of the line, then Ctrl-/ to undo).&lt;br /&gt;
* Vim has / to search forward, ? to search backward, then n or N to repeat that search in the same direction or opposite direction. Emacs just has Ctrl-s and Ctrl-r to do the search forward or backward. If you want to repeat the search, you just keep pressing Ctrl-s.&lt;br /&gt;
* When you have multiple split windows, Vim has Ctrl-w followed by h, j, k, or l to move to that window. It also has Ctrl-w followed by w to keep cycling between the splits. It also has Ctrl-w followed by p to toggle between the two most recent splits. There are just a lot of fine-grained choices you can make. Emacs just gives you Ctrl-x o which cycles.&lt;br /&gt;
* Text formatting: Vim gives you two operators, gq and gw, which format text; gq moves the cursor to the end of the formatted text, while gw tries to keep the cursor where it was before the formatting. You can then combine these operators with any motion, e.g. gwip to format the current paragraph, gww to format the current line, gwib to format inside parentheses. Emacs just gives you Alt-q to format the paragraph. It is then up to you to creatively combine that with text selection; you can select some text and then do Alt-q to format just the text that is selected.&lt;br /&gt;
* Copy-pasting: Vim gives you named registers, so if you want to copy two different lines and remember both, you do something like &amp;lt;code&amp;gt;&amp;quot;ayy&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;quot;byy&amp;lt;/code&amp;gt;; then you can paste them with &amp;lt;code&amp;gt;&amp;quot;ap&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;quot;bp&amp;lt;/code&amp;gt;. In Emacs, you instead kill both lines, and then when you go to paste them, you first Ctrl-y to paste the most recent, and then you do Alt-y to cycle between the most recently killed text.&lt;br /&gt;
* Vim has j and k to move down and up by logical lines, and also has gj and gk to move down and up by screen-lines. Emacs only has Ctrl-n and Ctrl-p to move down and up by screen-lines. To move by logical lines, you need to do something creative like Ctrl-e Ctrl-f or Ctrl-a Ctrl-b, or just repeatedly press Ctrl-n or Ctrl-p.&lt;br /&gt;
* Probably another manifestation of this is that Vim has a jump list, a change list, and a tag stack. Whereas I think Emacs only has a mark ring.&lt;br /&gt;
&lt;br /&gt;
In general, I feel that Vim requires more mental energy to use (by forcing the user to pick the action more precisely, and by having the user plan ahead). You need to pick the specific action you wanted to perform. You need to think ahead and decide which registers to use. This also comes from Vim&amp;#039;s modal nature, but Vim gives you more decisions and a grammar, whereas Emacs gives you a way to quickly do the common thing. I think much of this may have been forced on the design of Vim by deciding to be keystroke-based, so that the only way to make some action available in normal mode was to assign some key to it. Whereas Emacs went more in the direction of being functions-first, and once you have functions, it is natural to pass arguments to the function to modify the behavior.&lt;br /&gt;
&lt;br /&gt;
==Word movement: consistent vs &amp;quot;do the common thing&amp;quot;==&lt;br /&gt;
&lt;br /&gt;
Vim&amp;#039;s word-based motions like w, b, and e always treat contiguous alphanumeric sequences as single words, and also treats contiguous symbols as single words. This leads to a very consistent word movement, which means you will never have to backtrack.&lt;br /&gt;
&lt;br /&gt;
Emacs does the thing that most other text editors do, which is that if the cursor is before/on a symbol, then moving forward by one word will not just jump to the end of the symbols, but will jump to the end of the alphanumeric sequence &amp;#039;&amp;#039;after&amp;#039;&amp;#039; the symbols. Emacs caters to the most common thing, and sometimes you need to backtrack.&lt;br /&gt;
&lt;br /&gt;
Suppose you have some text like: &amp;lt;code&amp;gt;Hello, world.&amp;lt;/code&amp;gt; and the cursor is past the final period. You want to add the word &amp;lt;code&amp;gt;there&amp;lt;/code&amp;gt; before the comma, to make it &amp;lt;code&amp;gt;Hello there, world.&amp;lt;/code&amp;gt; In Vim, you press b a few times to move backwards by word, until the cursor is on the comma, at which point you can go into insert mode to type the &amp;quot;there&amp;quot;. In Emacs, Alt-b will move the cursor back by word, but once the cursor is on the &amp;#039;w&amp;#039;, pressing Alt-b again will jump past the comma onto the &amp;#039;H&amp;#039; -- in other words, it overshoots. So then you need to backtrack by pressing Alt-f to move forward by word.&lt;br /&gt;
&lt;br /&gt;
==Scrolling: scrolloff vs scroll-into-view==&lt;br /&gt;
&lt;br /&gt;
In Vim, defaults.vim sets scrolloff=5, which means that when the cursor is at the edge of the window, it will always show 5 lines of context. You can never &amp;quot;touch&amp;quot; the very edge of the screen, because the screen will scroll when you try to move to the edge. (But due to Vim&amp;#039;s line-oriented heritage, this will scroll into view an entire logical line instead of just one visual line.)&lt;br /&gt;
&lt;br /&gt;
In Emacs, the default behavior is instead to jerk the screen to the center &amp;#039;&amp;#039;after&amp;#039;&amp;#039; you step off the edge.&lt;br /&gt;
&lt;br /&gt;
==Search and replace==&lt;br /&gt;
&lt;br /&gt;
Emacs automatically does all the case variants, e.g. if you search and replace foo → bar, it also does Foo → Bar, FOO → Bar, etc. Vim doesn&amp;#039;t do this.&lt;br /&gt;
&lt;br /&gt;
==Visual noise==&lt;br /&gt;
&lt;br /&gt;
Emacs has more visual noise, e.g. the line continuation markers, incremental search by default, highlighting of all search matches as you type, a status bar. Vim comes from an environment where terminals were very slow so it tries by default to not draw to the screen very much. This means fewer things flash on the screen as you do things -- quite monastic vibes.&lt;br /&gt;
&lt;br /&gt;
Of course, by modern standards of things like VS Code, Zed, JetBrains, etc., even Emacs will feel minimal! No line numbers, sidebar with a file tree, no minimap that shows a zoomed out view of the file, no tabs shown by default, no git gutter, no git blame next to every line as the cursor moves, no popups nagging you about updates or extensions to install, no breadcrumbs (path of nested scope at the top), no hover-over documentation.&lt;br /&gt;
&lt;br /&gt;
Both Vim and Emacs have prominent comment colors in their syntax highlighting by default (in Vim it&amp;#039;s blue, in Emacs it&amp;#039;s red), which I think says a lot. By making most things invisible but making comments stand out, it tells the user that comments are something worth paying attention to. They both come from a saner culture in which programmers were intelligent and comments meant something. Now modern editors have all this crap in your face, and not just that, they make comments &amp;#039;&amp;#039;grayed out&amp;#039;&amp;#039; so that they almost fade into the background (VS Code is the one exception, where its default colorscheme has green comments).&lt;br /&gt;
&lt;br /&gt;
==Prompting the user==&lt;br /&gt;
&lt;br /&gt;
For Vim, see [https://www.reddit.com/r/vim/comments/267vrv/i_am_tim_pope_crafter_of_plugins_ama/chojzsb/].&lt;br /&gt;
&lt;br /&gt;
Emacs often prompts the user.&lt;br /&gt;
&lt;br /&gt;
==Documentation: graph/linear vs tree==&lt;br /&gt;
&lt;br /&gt;
Vim uses a wiki-like help system, where you can click on links to read the sections. It also contains a linear book under :help user-manual. Emacs has a GNU-like hierarchical tree documentation system.&lt;br /&gt;
&lt;br /&gt;
Both have a way to look things up based on keystroke or command name though. Vim has a universal :help command, while Emacs has e.g. Ctrl-h k for keystrokes or Ctrl-h f for functions.&lt;br /&gt;
&lt;br /&gt;
==Selection endpoint==&lt;br /&gt;
&lt;br /&gt;
Vim includes the selection endpoint, whereas Emacs doesn&amp;#039;t. The need to make this decision comes from both editors originating on the terminal with block cursors, rather than the more modern I-beam cursors.&lt;br /&gt;
&lt;br /&gt;
==Messages: clear as late as possible/explicitly vs clear as soon as possible==&lt;br /&gt;
&lt;br /&gt;
Vim only clears messages when the user does ctrl-l or does something that would redraw the screen somehow. Emacs clears as soon as the cursor is moved.&lt;br /&gt;
&lt;br /&gt;
[[Category:Design]]&lt;/div&gt;</summary>
		<author><name>Issa</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.issarice.com/index.php?title=Design_philosophies_of_Vim_vs_Emacs&amp;diff=2970</id>
		<title>Design philosophies of Vim vs Emacs</title>
		<link rel="alternate" type="text/html" href="https://wiki.issarice.com/index.php?title=Design_philosophies_of_Vim_vs_Emacs&amp;diff=2970"/>
		<updated>2025-12-22T03:26:14Z</updated>

		<summary type="html">&lt;p&gt;Issa: /* Tree-based undo vs stack-based undo */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
==Modal vs chording==&lt;br /&gt;
&lt;br /&gt;
* Atomic edits and the dot command in Vim: When you use Vim, you naturally start to think in terms of repeatable edits that you can then use the &amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt; command to repeat. But this has a side-effect in that Vim requires you to manually chunk your undo history. Emacs instead automatically chunks undos.&lt;br /&gt;
* One consequence of the modal editing is that I think Vim degrades gracefully to having worse keyboards/a less ergonomic setup in general ([https://youtu.be/SY8L-cj4x6k?t=3594 or big hands]). For example, I bought a fairly crappy external USB keyboard for $25 where if I don&amp;#039;t press the Ctrl key very firmly, sometimes it will not register. This hasn&amp;#039;t been a problem in most software, but &amp;#039;&amp;#039;has&amp;#039;&amp;#039; become a problem when I use Emacs because I need to hold down the Ctrl key a lot for navigating with Ctrl+p and Ctrl+n. In Vim, I don&amp;#039;t have this problem at all because Ctrl just isn&amp;#039;t a key I need to hold down for long periods; it&amp;#039;s something I momentarily hold down, just long enough to press another key. So I have never run into this problem when using Vim (or even Firefox or other software). Emacs is the editor, and really only software, that in some sense &amp;#039;&amp;#039;requires&amp;#039;&amp;#039; me to have a nice keyboard.&lt;br /&gt;
* Another consequence of modal editing (in particular, the fact that Vi decided to use the escape key as the modal switch to move out of insert and command-line modes) is that since escape is also use in terminal escape sequences, now there is a conflict in interpreting key sequences containing the escape key: is it the user switching out of insert mode and typing some normal-mode commands? Or is it the start of a terminal escape sequence (e.g. use of the arrow keys)? Because of this, Vim added options like ttimeout, ttimeoutlen, esckeys, and probably more, and tmux also has an option called escape-time which used to be necessary to set. If these options are not set correctly, one may have to wait up to 1-3 seconds for the effect of typing an escape key to show up on screen (because without waiting, Vim is not sure if you meant to just type an escape key or if you typed something that began a terminal escape sequence). It also means that unlike in all other terminal applications, you cannot easily use alt-key bindings, and in particular you cannot do the esc-key alternative to send an alt-key binding. If Vim had chosen literally any other key to represent mode switching (such as Ctrl-c, or maybe Ctrl-z which is used in evil-mode on Emacs to toggle between Vim-mode and Emacs-mode), this would not have been a problem. (Not to mention that if such a replacement key was chosen well, it would have been easier to type than Ctrl-[ or the escape key, since the escape key on modern keyboards is far from the home row of the keyboard and the left-square-bracket is vaguely hard to reach for!) Modern terminals like Kitty, and also Neovim, are finally fixing this so that you don&amp;#039;t have to ever think about this anymore. But there is still a sort of burden I feel from years of Vim use.&lt;br /&gt;
&lt;br /&gt;
==Unix as IDE vs Emacs as OS==&lt;br /&gt;
&lt;br /&gt;
Vim tries to just be a text editor, and tries to play nice with the other tools on your computer, using commands like &amp;lt;code&amp;gt;:!command&amp;lt;/code&amp;gt; (runs external command) or &amp;lt;code&amp;gt;:w !command&amp;lt;/code&amp;gt; (pipes text to external command via stdin) or &amp;lt;code&amp;gt;:r !command&amp;lt;/code&amp;gt; (reads from external command via stdout).&lt;br /&gt;
&lt;br /&gt;
===...with some exceptions===&lt;br /&gt;
&lt;br /&gt;
Vim has a built-in spellchecker, whereas Emacs doesn&amp;#039;t (it does come with flyspell, which works with an external spellchecker like hunspell or aspell). (Emacs comes with tetris, an RPN calculator, an email client, etc., but not a spell-checker!)&lt;br /&gt;
&lt;br /&gt;
==Session management: per project vs single instance==&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;right way&amp;quot; to use Vim is to have one instance of Vim open per &amp;quot;project&amp;quot;. Each Vim instance maintains its own current directory, so you can e.g. open files relative to that current directory.&lt;br /&gt;
&lt;br /&gt;
In Emacs, the expectation is that you will have a single Emacs instance open. Emacs itself doesn&amp;#039;t maintain its current directory, and instead all file-open actions are relative to the buffer&amp;#039;s directory.&lt;br /&gt;
&lt;br /&gt;
Vim can do the Emacs thing with :set autochdir, but this is disabled by default.&lt;br /&gt;
&lt;br /&gt;
See [https://nullprogram.com/blog/2017/08/22/ this blog post] for more details.&lt;br /&gt;
&lt;br /&gt;
==Line-based vs character-based==&lt;br /&gt;
&lt;br /&gt;
Vim comes from a lineage of line-based editors. Registers can be linewise or characterwise, which means that actions like pasting text can act on entire lines or on characters. Some commands, like :substitute or :global, only work linewise. This is even reflected in the motion to move up or down a line: by default, j and k move down or up by logical lines instead of screen lines. However, due to this lineage, Vim does not deal well with long lines of text. Recent version of Vim have :set smoothscroll, but this only partially works.&lt;br /&gt;
&lt;br /&gt;
Emacs is like most other text editors in that it has no concept of linewise. Ctrl-n and Ctrl-p move by screen-lines, not logical lines, which makes sense when you think of the buffer of text as a stream of characters rather than an array of lines.&lt;br /&gt;
&lt;br /&gt;
==Mappings: keystroke based vs function-based==&lt;br /&gt;
&lt;br /&gt;
In Vim, commands like &amp;quot;copy text&amp;quot; don&amp;#039;t have a &amp;quot;name&amp;quot;; they are simply the keystroke that is used to perform that action. So if you want to &amp;quot;program&amp;quot; Vim to repeat some action, such as when defining a mapping, you simply tell Vim which keystrokes you want to repeat.&lt;br /&gt;
&lt;br /&gt;
In Emacs, every keystroke, even entering a single character, has a function that is associated with it. Emacs is simply an interpreter that runs the function associated with the keystroke. You can always do Ctrl-h k followed by the keystroke to find which function is bound to that particular keystroke.&lt;br /&gt;
&lt;br /&gt;
I think that being keystroke-based is one of the reasons Vim is so conservative about default keybindings (even when they are terrible, like Ctrl-b to go to the beginning of the line in command-line mode, or Y to copy the entire line instead of copying to the end of the line), because if you change the default keybinding inside of the C source code, it actually breaks all user mappings and scripts that rely on replaying keystrokes. So then eventually Vim came up with defaults.vim, which is not implemented on the level of C, but instead implemented on the level of Vimscript. By implementing it in Vimscript, it functions like user configuration, so it doesn&amp;#039;t change what the original keybindings mean. But doing this also means now you have to reason about multiple levels, the &amp;quot;base layer C keybindings&amp;quot; vs the &amp;quot;default keybindings that you actually interact with&amp;quot;. And at that point you&amp;#039;ve kind of reinvented the thing that Emacs does.&lt;br /&gt;
&lt;br /&gt;
==Actions: commands vs keybindings==&lt;br /&gt;
&lt;br /&gt;
Vim often uses the command-line for even common actions, e.g. :w to save a file [https://www.reddit.com/r/vim/comments/267vrv/i_am_tim_pope_crafter_of_plugins_ama/chojzsb/]. Emacs relies more on keybindings, e.g. Ctrl-x Ctrl-s to save a file.&lt;br /&gt;
&lt;br /&gt;
But there are some exceptions. To open the file that the cursor is on, Vim has various keybindings, including &amp;lt;code&amp;gt;gf&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;gF&amp;lt;/code&amp;gt;, Ctrl-w f, etc., but Emacs only has M-x ffap.&lt;br /&gt;
&lt;br /&gt;
==Tree-based undo vs stack-based undo==&lt;br /&gt;
&lt;br /&gt;
(I think the mark ring in Emacs is also stack-based.)&lt;br /&gt;
&lt;br /&gt;
==Multiple similar commands vs single repeated command==&lt;br /&gt;
&lt;br /&gt;
This one is a bit hard to explain, but there is a definite pattern where Vim prefers to give the user multiple similar commands, while Emacs prefers to give a single command that you can then repeat or use creatively. The best way to explain is to give a bunch of examples:&lt;br /&gt;
&lt;br /&gt;
* Changing the screen view relative to cursor: Vim gives you zz to scroll so as to leave the cursor at the center of the screen, zt to scroll and put the cursor at the top, and zb to scroll and put the cursor at the bottom. Emacs just gives you a single command, Ctrl-l, which when repeatedly pressed, will cycle between all three views.&lt;br /&gt;
* Moving cursor to top, middle, bottom: Vim gives you H to move cursor to the top of the screen, M to move to middle, and L to move to bottom. Emacs just gives you Alt-r, which will cycle between the three configurations.&lt;br /&gt;
* Indenting: The way TAB indenting works in Emacs is very distinctive. You press TAB and Emacs just indents the line to whatever it thinks is the right level. Vim&amp;#039;s TAB in insert mode just inserts a literal tab or spaces depending on the &amp;#039;expandtab&amp;#039; option. But Vim also gives you, in insert mode, Ctrl-f to do the Emacs-like thing, Ctrl-t to indent the current line, Ctrl-d to decrease the indent of the current line. And many more commands in normal mode.&lt;br /&gt;
* Folding: Vim gives you fine-grained commands like zo to open a fold, zc to close a fold, zR to globally reduce the fold level in the file, etc. Emacs as far as I know doesn&amp;#039;t have folding by default, but certain major modes like org-mode and markdown-mode do have folding, and in these, you simply press TAB to cycle the different folding levels, or Shift-TAB to do the cycling globally across the entire file.&lt;br /&gt;
* Vim gives you Y, D, C, to copy, delete, and change (respectively) until the end of the line. Emacs just gives you Ctrl-k, which it then expects you to creatively make use of (e.g. if you want to copy until the end of the line, you do Ctrl-k to delete until the end of the line, then Ctrl-/ to undo).&lt;br /&gt;
* Vim has / to search forward, ? to search backward, then n or N to repeat that search in the same direction or opposite direction. Emacs just has Ctrl-s and Ctrl-r to do the search forward or backward. If you want to repeat the search, you just keep pressing Ctrl-s.&lt;br /&gt;
* When you have multiple split windows, Vim has Ctrl-w followed by h, j, k, or l to move to that window. It also has Ctrl-w followed by w to keep cycling between the splits. It also has Ctrl-w followed by p to toggle between the two most recent splits. There are just a lot of fine-grained choices you can make. Emacs just gives you Ctrl-x o which cycles.&lt;br /&gt;
* Text formatting: Vim gives you two operators, gq and gw, which format text; gq moves the cursor to the end of the formatted text, while gw tries to keep the cursor where it was before the formatting. You can then combine these operators with any motion, e.g. gwip to format the current paragraph, gww to format the current line, gwib to format inside parentheses. Emacs just gives you Alt-q to format the paragraph. It is then up to you to creatively combine that with text selection; you can select some text and then do Alt-q to format just the text that is selected.&lt;br /&gt;
* Copy-pasting: Vim gives you named registers, so if you want to copy two different lines and remember both, you do something like &amp;lt;code&amp;gt;&amp;quot;ayy&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;quot;byy&amp;lt;/code&amp;gt;; then you can paste them with &amp;lt;code&amp;gt;&amp;quot;ap&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;quot;bp&amp;lt;/code&amp;gt;. In Emacs, you instead kill both lines, and then when you go to paste them, you first Ctrl-y to paste the most recent, and then you do Alt-y to cycle between the most recently killed text.&lt;br /&gt;
* Vim has j and k to move down and up by logical lines, and also has gj and gk to move down and up by screen-lines. Emacs only has Ctrl-n and Ctrl-p to move down and up by screen-lines. To move by logical lines, you need to do something creative like Ctrl-e Ctrl-f or Ctrl-a Ctrl-b, or just repeatedly press Ctrl-n or Ctrl-p.&lt;br /&gt;
* Probably another manifestation of this is that Vim has a jump list, a change list, and a tag stack. Whereas I think Emacs only has a mark ring.&lt;br /&gt;
&lt;br /&gt;
In general, I feel that Vim requires more mental energy to use (by forcing the user to pick the action more precisely, and by having the user plan ahead). You need to pick the specific action you wanted to perform. You need to think ahead and decide which registers to use. This also comes from Vim&amp;#039;s modal nature, but Vim gives you more decisions and a grammar, whereas Emacs gives you a way to quickly do the common thing. I think much of this may have been forced on the design of Vim by deciding to be keystroke-based, so that the only way to make some action available in normal mode was to assign some key to it. Whereas Emacs went more in the direction of being functions-first, and once you have functions, it is natural to pass arguments to the function to modify the behavior.&lt;br /&gt;
&lt;br /&gt;
==Word movement: consistent vs &amp;quot;do the common thing&amp;quot;==&lt;br /&gt;
&lt;br /&gt;
Vim&amp;#039;s word-based motions like w, b, and e always treat contiguous alphanumeric sequences as single words, and also treats contiguous symbols as single words. This leads to a very consistent word movement, which means you will never have to backtrack.&lt;br /&gt;
&lt;br /&gt;
Emacs does the thing that most other text editors do, which is that if the cursor is before/on a symbol, then moving forward by one word will not just jump to the end of the symbols, but will jump to the end of the alphanumeric sequence &amp;#039;&amp;#039;after&amp;#039;&amp;#039; the symbols. Emacs caters to the most common thing, and sometimes you need to backtrack.&lt;br /&gt;
&lt;br /&gt;
Suppose you have some text like: &amp;lt;code&amp;gt;Hello, world.&amp;lt;/code&amp;gt; and the cursor is past the final period. You want to add the word &amp;lt;code&amp;gt;there&amp;lt;/code&amp;gt; before the comma, to make it &amp;lt;code&amp;gt;Hello there, world.&amp;lt;/code&amp;gt; In Vim, you press b a few times to move backwards by word, until the cursor is on the comma, at which point you can go into insert mode to type the &amp;quot;there&amp;quot;. In Emacs, Alt-b will move the cursor back by word, but once the cursor is on the &amp;#039;w&amp;#039;, pressing Alt-b again will jump past the comma onto the &amp;#039;H&amp;#039; -- in other words, it overshoots. So then you need to backtrack by pressing Alt-f to move forward by word.&lt;br /&gt;
&lt;br /&gt;
==Scrolling: scrolloff vs scroll-into-view==&lt;br /&gt;
&lt;br /&gt;
In Vim, defaults.vim sets scrolloff=5, which means that when the cursor is at the edge of the window, it will always show 5 lines of context. You can never &amp;quot;touch&amp;quot; the very edge of the screen, because the screen will scroll when you try to move to the edge. (But due to Vim&amp;#039;s line-oriented heritage, this will scroll into view an entire logical line instead of just one visual line.)&lt;br /&gt;
&lt;br /&gt;
In Emacs, the default behavior is instead to jerk the screen to the center &amp;#039;&amp;#039;after&amp;#039;&amp;#039; you step off the edge.&lt;br /&gt;
&lt;br /&gt;
==Search and replace==&lt;br /&gt;
&lt;br /&gt;
Emacs automatically does all the case variants, e.g. if you search and replace foo → bar, it also does Foo → Bar, FOO → Bar, etc. Vim doesn&amp;#039;t do this.&lt;br /&gt;
&lt;br /&gt;
==Visual noise==&lt;br /&gt;
&lt;br /&gt;
Emacs has more visual noise, e.g. the line continuation markers, incremental search by default, highlighting of all search matches as you type, a status bar. Vim comes from an environment where terminals were very slow so it tries by default to not draw to the screen very much. This means fewer things flash on the screen as you do things -- quite monastic vibes.&lt;br /&gt;
&lt;br /&gt;
Of course, by modern standards of things like VS Code, Zed, JetBrains, etc., even Emacs will feel minimal! No line numbers, sidebar with a file tree, no minimap that shows a zoomed out view of the file, no tabs shown by default, no git gutter, no git blame next to every line as the cursor moves, no popups nagging you about updates or extensions to install, no breadcrumbs (path of nested scope at the top), no hover-over documentation.&lt;br /&gt;
&lt;br /&gt;
Both Vim and Emacs have prominent comment colors in their syntax highlighting by default (in Vim it&amp;#039;s blue, in Emacs it&amp;#039;s red), which I think says a lot. By making most things invisible but making comments stand out, it tells the user that comments are something worth paying attention to. They both come from a saner culture in which programmers were intelligent and comments meant something. Now modern editors have all this crap in your face, and not just that, they make comments &amp;#039;&amp;#039;grayed out&amp;#039;&amp;#039; so that they almost fade into the background (VS Code is the one exception, where its default colorscheme has green comments).&lt;br /&gt;
&lt;br /&gt;
==Prompting the user==&lt;br /&gt;
&lt;br /&gt;
For Vim, see [https://www.reddit.com/r/vim/comments/267vrv/i_am_tim_pope_crafter_of_plugins_ama/chojzsb/].&lt;br /&gt;
&lt;br /&gt;
Emacs often prompts the user.&lt;br /&gt;
&lt;br /&gt;
==Documentation: graph/linear vs tree==&lt;br /&gt;
&lt;br /&gt;
Vim uses a wiki-like help system, where you can click on links to read the sections. It also contains a linear book under :help user-manual. Emacs has a GNU-like hierarchical tree documentation system.&lt;br /&gt;
&lt;br /&gt;
Both have a way to look things up based on keystroke or command name though. Vim has a universal :help command, while Emacs has e.g. Ctrl-h k for keystrokes or Ctrl-h f for functions.&lt;br /&gt;
&lt;br /&gt;
==Selection endpoint==&lt;br /&gt;
&lt;br /&gt;
Vim includes the selection endpoint, whereas Emacs doesn&amp;#039;t. The need to make this decision comes from both editors originating on the terminal with block cursors, rather than the more modern I-beam cursors.&lt;br /&gt;
&lt;br /&gt;
[[Category:Design]]&lt;/div&gt;</summary>
		<author><name>Issa</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.issarice.com/index.php?title=Design_philosophies_of_Vim_vs_Emacs&amp;diff=2969</id>
		<title>Design philosophies of Vim vs Emacs</title>
		<link rel="alternate" type="text/html" href="https://wiki.issarice.com/index.php?title=Design_philosophies_of_Vim_vs_Emacs&amp;diff=2969"/>
		<updated>2025-12-22T03:24:25Z</updated>

		<summary type="html">&lt;p&gt;Issa: /* Multiple similar commands vs single repeated command */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
==Modal vs chording==&lt;br /&gt;
&lt;br /&gt;
* Atomic edits and the dot command in Vim: When you use Vim, you naturally start to think in terms of repeatable edits that you can then use the &amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt; command to repeat. But this has a side-effect in that Vim requires you to manually chunk your undo history. Emacs instead automatically chunks undos.&lt;br /&gt;
* One consequence of the modal editing is that I think Vim degrades gracefully to having worse keyboards/a less ergonomic setup in general ([https://youtu.be/SY8L-cj4x6k?t=3594 or big hands]). For example, I bought a fairly crappy external USB keyboard for $25 where if I don&amp;#039;t press the Ctrl key very firmly, sometimes it will not register. This hasn&amp;#039;t been a problem in most software, but &amp;#039;&amp;#039;has&amp;#039;&amp;#039; become a problem when I use Emacs because I need to hold down the Ctrl key a lot for navigating with Ctrl+p and Ctrl+n. In Vim, I don&amp;#039;t have this problem at all because Ctrl just isn&amp;#039;t a key I need to hold down for long periods; it&amp;#039;s something I momentarily hold down, just long enough to press another key. So I have never run into this problem when using Vim (or even Firefox or other software). Emacs is the editor, and really only software, that in some sense &amp;#039;&amp;#039;requires&amp;#039;&amp;#039; me to have a nice keyboard.&lt;br /&gt;
* Another consequence of modal editing (in particular, the fact that Vi decided to use the escape key as the modal switch to move out of insert and command-line modes) is that since escape is also use in terminal escape sequences, now there is a conflict in interpreting key sequences containing the escape key: is it the user switching out of insert mode and typing some normal-mode commands? Or is it the start of a terminal escape sequence (e.g. use of the arrow keys)? Because of this, Vim added options like ttimeout, ttimeoutlen, esckeys, and probably more, and tmux also has an option called escape-time which used to be necessary to set. If these options are not set correctly, one may have to wait up to 1-3 seconds for the effect of typing an escape key to show up on screen (because without waiting, Vim is not sure if you meant to just type an escape key or if you typed something that began a terminal escape sequence). It also means that unlike in all other terminal applications, you cannot easily use alt-key bindings, and in particular you cannot do the esc-key alternative to send an alt-key binding. If Vim had chosen literally any other key to represent mode switching (such as Ctrl-c, or maybe Ctrl-z which is used in evil-mode on Emacs to toggle between Vim-mode and Emacs-mode), this would not have been a problem. (Not to mention that if such a replacement key was chosen well, it would have been easier to type than Ctrl-[ or the escape key, since the escape key on modern keyboards is far from the home row of the keyboard and the left-square-bracket is vaguely hard to reach for!) Modern terminals like Kitty, and also Neovim, are finally fixing this so that you don&amp;#039;t have to ever think about this anymore. But there is still a sort of burden I feel from years of Vim use.&lt;br /&gt;
&lt;br /&gt;
==Unix as IDE vs Emacs as OS==&lt;br /&gt;
&lt;br /&gt;
Vim tries to just be a text editor, and tries to play nice with the other tools on your computer, using commands like &amp;lt;code&amp;gt;:!command&amp;lt;/code&amp;gt; (runs external command) or &amp;lt;code&amp;gt;:w !command&amp;lt;/code&amp;gt; (pipes text to external command via stdin) or &amp;lt;code&amp;gt;:r !command&amp;lt;/code&amp;gt; (reads from external command via stdout).&lt;br /&gt;
&lt;br /&gt;
===...with some exceptions===&lt;br /&gt;
&lt;br /&gt;
Vim has a built-in spellchecker, whereas Emacs doesn&amp;#039;t (it does come with flyspell, which works with an external spellchecker like hunspell or aspell). (Emacs comes with tetris, an RPN calculator, an email client, etc., but not a spell-checker!)&lt;br /&gt;
&lt;br /&gt;
==Session management: per project vs single instance==&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;right way&amp;quot; to use Vim is to have one instance of Vim open per &amp;quot;project&amp;quot;. Each Vim instance maintains its own current directory, so you can e.g. open files relative to that current directory.&lt;br /&gt;
&lt;br /&gt;
In Emacs, the expectation is that you will have a single Emacs instance open. Emacs itself doesn&amp;#039;t maintain its current directory, and instead all file-open actions are relative to the buffer&amp;#039;s directory.&lt;br /&gt;
&lt;br /&gt;
Vim can do the Emacs thing with :set autochdir, but this is disabled by default.&lt;br /&gt;
&lt;br /&gt;
See [https://nullprogram.com/blog/2017/08/22/ this blog post] for more details.&lt;br /&gt;
&lt;br /&gt;
==Line-based vs character-based==&lt;br /&gt;
&lt;br /&gt;
Vim comes from a lineage of line-based editors. Registers can be linewise or characterwise, which means that actions like pasting text can act on entire lines or on characters. Some commands, like :substitute or :global, only work linewise. This is even reflected in the motion to move up or down a line: by default, j and k move down or up by logical lines instead of screen lines. However, due to this lineage, Vim does not deal well with long lines of text. Recent version of Vim have :set smoothscroll, but this only partially works.&lt;br /&gt;
&lt;br /&gt;
Emacs is like most other text editors in that it has no concept of linewise. Ctrl-n and Ctrl-p move by screen-lines, not logical lines, which makes sense when you think of the buffer of text as a stream of characters rather than an array of lines.&lt;br /&gt;
&lt;br /&gt;
==Mappings: keystroke based vs function-based==&lt;br /&gt;
&lt;br /&gt;
In Vim, commands like &amp;quot;copy text&amp;quot; don&amp;#039;t have a &amp;quot;name&amp;quot;; they are simply the keystroke that is used to perform that action. So if you want to &amp;quot;program&amp;quot; Vim to repeat some action, such as when defining a mapping, you simply tell Vim which keystrokes you want to repeat.&lt;br /&gt;
&lt;br /&gt;
In Emacs, every keystroke, even entering a single character, has a function that is associated with it. Emacs is simply an interpreter that runs the function associated with the keystroke. You can always do Ctrl-h k followed by the keystroke to find which function is bound to that particular keystroke.&lt;br /&gt;
&lt;br /&gt;
I think that being keystroke-based is one of the reasons Vim is so conservative about default keybindings (even when they are terrible, like Ctrl-b to go to the beginning of the line in command-line mode, or Y to copy the entire line instead of copying to the end of the line), because if you change the default keybinding inside of the C source code, it actually breaks all user mappings and scripts that rely on replaying keystrokes. So then eventually Vim came up with defaults.vim, which is not implemented on the level of C, but instead implemented on the level of Vimscript. By implementing it in Vimscript, it functions like user configuration, so it doesn&amp;#039;t change what the original keybindings mean. But doing this also means now you have to reason about multiple levels, the &amp;quot;base layer C keybindings&amp;quot; vs the &amp;quot;default keybindings that you actually interact with&amp;quot;. And at that point you&amp;#039;ve kind of reinvented the thing that Emacs does.&lt;br /&gt;
&lt;br /&gt;
==Actions: commands vs keybindings==&lt;br /&gt;
&lt;br /&gt;
Vim often uses the command-line for even common actions, e.g. :w to save a file [https://www.reddit.com/r/vim/comments/267vrv/i_am_tim_pope_crafter_of_plugins_ama/chojzsb/]. Emacs relies more on keybindings, e.g. Ctrl-x Ctrl-s to save a file.&lt;br /&gt;
&lt;br /&gt;
But there are some exceptions. To open the file that the cursor is on, Vim has various keybindings, including &amp;lt;code&amp;gt;gf&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;gF&amp;lt;/code&amp;gt;, Ctrl-w f, etc., but Emacs only has M-x ffap.&lt;br /&gt;
&lt;br /&gt;
==Tree-based undo vs stack-based undo==&lt;br /&gt;
&lt;br /&gt;
==Multiple similar commands vs single repeated command==&lt;br /&gt;
&lt;br /&gt;
This one is a bit hard to explain, but there is a definite pattern where Vim prefers to give the user multiple similar commands, while Emacs prefers to give a single command that you can then repeat or use creatively. The best way to explain is to give a bunch of examples:&lt;br /&gt;
&lt;br /&gt;
* Changing the screen view relative to cursor: Vim gives you zz to scroll so as to leave the cursor at the center of the screen, zt to scroll and put the cursor at the top, and zb to scroll and put the cursor at the bottom. Emacs just gives you a single command, Ctrl-l, which when repeatedly pressed, will cycle between all three views.&lt;br /&gt;
* Moving cursor to top, middle, bottom: Vim gives you H to move cursor to the top of the screen, M to move to middle, and L to move to bottom. Emacs just gives you Alt-r, which will cycle between the three configurations.&lt;br /&gt;
* Indenting: The way TAB indenting works in Emacs is very distinctive. You press TAB and Emacs just indents the line to whatever it thinks is the right level. Vim&amp;#039;s TAB in insert mode just inserts a literal tab or spaces depending on the &amp;#039;expandtab&amp;#039; option. But Vim also gives you, in insert mode, Ctrl-f to do the Emacs-like thing, Ctrl-t to indent the current line, Ctrl-d to decrease the indent of the current line. And many more commands in normal mode.&lt;br /&gt;
* Folding: Vim gives you fine-grained commands like zo to open a fold, zc to close a fold, zR to globally reduce the fold level in the file, etc. Emacs as far as I know doesn&amp;#039;t have folding by default, but certain major modes like org-mode and markdown-mode do have folding, and in these, you simply press TAB to cycle the different folding levels, or Shift-TAB to do the cycling globally across the entire file.&lt;br /&gt;
* Vim gives you Y, D, C, to copy, delete, and change (respectively) until the end of the line. Emacs just gives you Ctrl-k, which it then expects you to creatively make use of (e.g. if you want to copy until the end of the line, you do Ctrl-k to delete until the end of the line, then Ctrl-/ to undo).&lt;br /&gt;
* Vim has / to search forward, ? to search backward, then n or N to repeat that search in the same direction or opposite direction. Emacs just has Ctrl-s and Ctrl-r to do the search forward or backward. If you want to repeat the search, you just keep pressing Ctrl-s.&lt;br /&gt;
* When you have multiple split windows, Vim has Ctrl-w followed by h, j, k, or l to move to that window. It also has Ctrl-w followed by w to keep cycling between the splits. It also has Ctrl-w followed by p to toggle between the two most recent splits. There are just a lot of fine-grained choices you can make. Emacs just gives you Ctrl-x o which cycles.&lt;br /&gt;
* Text formatting: Vim gives you two operators, gq and gw, which format text; gq moves the cursor to the end of the formatted text, while gw tries to keep the cursor where it was before the formatting. You can then combine these operators with any motion, e.g. gwip to format the current paragraph, gww to format the current line, gwib to format inside parentheses. Emacs just gives you Alt-q to format the paragraph. It is then up to you to creatively combine that with text selection; you can select some text and then do Alt-q to format just the text that is selected.&lt;br /&gt;
* Copy-pasting: Vim gives you named registers, so if you want to copy two different lines and remember both, you do something like &amp;lt;code&amp;gt;&amp;quot;ayy&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;quot;byy&amp;lt;/code&amp;gt;; then you can paste them with &amp;lt;code&amp;gt;&amp;quot;ap&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;quot;bp&amp;lt;/code&amp;gt;. In Emacs, you instead kill both lines, and then when you go to paste them, you first Ctrl-y to paste the most recent, and then you do Alt-y to cycle between the most recently killed text.&lt;br /&gt;
* Vim has j and k to move down and up by logical lines, and also has gj and gk to move down and up by screen-lines. Emacs only has Ctrl-n and Ctrl-p to move down and up by screen-lines. To move by logical lines, you need to do something creative like Ctrl-e Ctrl-f or Ctrl-a Ctrl-b, or just repeatedly press Ctrl-n or Ctrl-p.&lt;br /&gt;
* Probably another manifestation of this is that Vim has a jump list, a change list, and a tag stack. Whereas I think Emacs only has a mark ring.&lt;br /&gt;
&lt;br /&gt;
In general, I feel that Vim requires more mental energy to use (by forcing the user to pick the action more precisely, and by having the user plan ahead). You need to pick the specific action you wanted to perform. You need to think ahead and decide which registers to use. This also comes from Vim&amp;#039;s modal nature, but Vim gives you more decisions and a grammar, whereas Emacs gives you a way to quickly do the common thing. I think much of this may have been forced on the design of Vim by deciding to be keystroke-based, so that the only way to make some action available in normal mode was to assign some key to it. Whereas Emacs went more in the direction of being functions-first, and once you have functions, it is natural to pass arguments to the function to modify the behavior.&lt;br /&gt;
&lt;br /&gt;
==Word movement: consistent vs &amp;quot;do the common thing&amp;quot;==&lt;br /&gt;
&lt;br /&gt;
Vim&amp;#039;s word-based motions like w, b, and e always treat contiguous alphanumeric sequences as single words, and also treats contiguous symbols as single words. This leads to a very consistent word movement, which means you will never have to backtrack.&lt;br /&gt;
&lt;br /&gt;
Emacs does the thing that most other text editors do, which is that if the cursor is before/on a symbol, then moving forward by one word will not just jump to the end of the symbols, but will jump to the end of the alphanumeric sequence &amp;#039;&amp;#039;after&amp;#039;&amp;#039; the symbols. Emacs caters to the most common thing, and sometimes you need to backtrack.&lt;br /&gt;
&lt;br /&gt;
Suppose you have some text like: &amp;lt;code&amp;gt;Hello, world.&amp;lt;/code&amp;gt; and the cursor is past the final period. You want to add the word &amp;lt;code&amp;gt;there&amp;lt;/code&amp;gt; before the comma, to make it &amp;lt;code&amp;gt;Hello there, world.&amp;lt;/code&amp;gt; In Vim, you press b a few times to move backwards by word, until the cursor is on the comma, at which point you can go into insert mode to type the &amp;quot;there&amp;quot;. In Emacs, Alt-b will move the cursor back by word, but once the cursor is on the &amp;#039;w&amp;#039;, pressing Alt-b again will jump past the comma onto the &amp;#039;H&amp;#039; -- in other words, it overshoots. So then you need to backtrack by pressing Alt-f to move forward by word.&lt;br /&gt;
&lt;br /&gt;
==Scrolling: scrolloff vs scroll-into-view==&lt;br /&gt;
&lt;br /&gt;
In Vim, defaults.vim sets scrolloff=5, which means that when the cursor is at the edge of the window, it will always show 5 lines of context. You can never &amp;quot;touch&amp;quot; the very edge of the screen, because the screen will scroll when you try to move to the edge. (But due to Vim&amp;#039;s line-oriented heritage, this will scroll into view an entire logical line instead of just one visual line.)&lt;br /&gt;
&lt;br /&gt;
In Emacs, the default behavior is instead to jerk the screen to the center &amp;#039;&amp;#039;after&amp;#039;&amp;#039; you step off the edge.&lt;br /&gt;
&lt;br /&gt;
==Search and replace==&lt;br /&gt;
&lt;br /&gt;
Emacs automatically does all the case variants, e.g. if you search and replace foo → bar, it also does Foo → Bar, FOO → Bar, etc. Vim doesn&amp;#039;t do this.&lt;br /&gt;
&lt;br /&gt;
==Visual noise==&lt;br /&gt;
&lt;br /&gt;
Emacs has more visual noise, e.g. the line continuation markers, incremental search by default, highlighting of all search matches as you type, a status bar. Vim comes from an environment where terminals were very slow so it tries by default to not draw to the screen very much. This means fewer things flash on the screen as you do things -- quite monastic vibes.&lt;br /&gt;
&lt;br /&gt;
Of course, by modern standards of things like VS Code, Zed, JetBrains, etc., even Emacs will feel minimal! No line numbers, sidebar with a file tree, no minimap that shows a zoomed out view of the file, no tabs shown by default, no git gutter, no git blame next to every line as the cursor moves, no popups nagging you about updates or extensions to install, no breadcrumbs (path of nested scope at the top), no hover-over documentation.&lt;br /&gt;
&lt;br /&gt;
Both Vim and Emacs have prominent comment colors in their syntax highlighting by default (in Vim it&amp;#039;s blue, in Emacs it&amp;#039;s red), which I think says a lot. By making most things invisible but making comments stand out, it tells the user that comments are something worth paying attention to. They both come from a saner culture in which programmers were intelligent and comments meant something. Now modern editors have all this crap in your face, and not just that, they make comments &amp;#039;&amp;#039;grayed out&amp;#039;&amp;#039; so that they almost fade into the background (VS Code is the one exception, where its default colorscheme has green comments).&lt;br /&gt;
&lt;br /&gt;
==Prompting the user==&lt;br /&gt;
&lt;br /&gt;
For Vim, see [https://www.reddit.com/r/vim/comments/267vrv/i_am_tim_pope_crafter_of_plugins_ama/chojzsb/].&lt;br /&gt;
&lt;br /&gt;
Emacs often prompts the user.&lt;br /&gt;
&lt;br /&gt;
==Documentation: graph/linear vs tree==&lt;br /&gt;
&lt;br /&gt;
Vim uses a wiki-like help system, where you can click on links to read the sections. It also contains a linear book under :help user-manual. Emacs has a GNU-like hierarchical tree documentation system.&lt;br /&gt;
&lt;br /&gt;
Both have a way to look things up based on keystroke or command name though. Vim has a universal :help command, while Emacs has e.g. Ctrl-h k for keystrokes or Ctrl-h f for functions.&lt;br /&gt;
&lt;br /&gt;
==Selection endpoint==&lt;br /&gt;
&lt;br /&gt;
Vim includes the selection endpoint, whereas Emacs doesn&amp;#039;t. The need to make this decision comes from both editors originating on the terminal with block cursors, rather than the more modern I-beam cursors.&lt;br /&gt;
&lt;br /&gt;
[[Category:Design]]&lt;/div&gt;</summary>
		<author><name>Issa</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.issarice.com/index.php?title=Design_philosophies_of_Vim_vs_Emacs&amp;diff=2968</id>
		<title>Design philosophies of Vim vs Emacs</title>
		<link rel="alternate" type="text/html" href="https://wiki.issarice.com/index.php?title=Design_philosophies_of_Vim_vs_Emacs&amp;diff=2968"/>
		<updated>2025-12-09T23:38:50Z</updated>

		<summary type="html">&lt;p&gt;Issa: /* Modal vs chording */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
==Modal vs chording==&lt;br /&gt;
&lt;br /&gt;
* Atomic edits and the dot command in Vim: When you use Vim, you naturally start to think in terms of repeatable edits that you can then use the &amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt; command to repeat. But this has a side-effect in that Vim requires you to manually chunk your undo history. Emacs instead automatically chunks undos.&lt;br /&gt;
* One consequence of the modal editing is that I think Vim degrades gracefully to having worse keyboards/a less ergonomic setup in general ([https://youtu.be/SY8L-cj4x6k?t=3594 or big hands]). For example, I bought a fairly crappy external USB keyboard for $25 where if I don&amp;#039;t press the Ctrl key very firmly, sometimes it will not register. This hasn&amp;#039;t been a problem in most software, but &amp;#039;&amp;#039;has&amp;#039;&amp;#039; become a problem when I use Emacs because I need to hold down the Ctrl key a lot for navigating with Ctrl+p and Ctrl+n. In Vim, I don&amp;#039;t have this problem at all because Ctrl just isn&amp;#039;t a key I need to hold down for long periods; it&amp;#039;s something I momentarily hold down, just long enough to press another key. So I have never run into this problem when using Vim (or even Firefox or other software). Emacs is the editor, and really only software, that in some sense &amp;#039;&amp;#039;requires&amp;#039;&amp;#039; me to have a nice keyboard.&lt;br /&gt;
* Another consequence of modal editing (in particular, the fact that Vi decided to use the escape key as the modal switch to move out of insert and command-line modes) is that since escape is also use in terminal escape sequences, now there is a conflict in interpreting key sequences containing the escape key: is it the user switching out of insert mode and typing some normal-mode commands? Or is it the start of a terminal escape sequence (e.g. use of the arrow keys)? Because of this, Vim added options like ttimeout, ttimeoutlen, esckeys, and probably more, and tmux also has an option called escape-time which used to be necessary to set. If these options are not set correctly, one may have to wait up to 1-3 seconds for the effect of typing an escape key to show up on screen (because without waiting, Vim is not sure if you meant to just type an escape key or if you typed something that began a terminal escape sequence). It also means that unlike in all other terminal applications, you cannot easily use alt-key bindings, and in particular you cannot do the esc-key alternative to send an alt-key binding. If Vim had chosen literally any other key to represent mode switching (such as Ctrl-c, or maybe Ctrl-z which is used in evil-mode on Emacs to toggle between Vim-mode and Emacs-mode), this would not have been a problem. (Not to mention that if such a replacement key was chosen well, it would have been easier to type than Ctrl-[ or the escape key, since the escape key on modern keyboards is far from the home row of the keyboard and the left-square-bracket is vaguely hard to reach for!) Modern terminals like Kitty, and also Neovim, are finally fixing this so that you don&amp;#039;t have to ever think about this anymore. But there is still a sort of burden I feel from years of Vim use.&lt;br /&gt;
&lt;br /&gt;
==Unix as IDE vs Emacs as OS==&lt;br /&gt;
&lt;br /&gt;
Vim tries to just be a text editor, and tries to play nice with the other tools on your computer, using commands like &amp;lt;code&amp;gt;:!command&amp;lt;/code&amp;gt; (runs external command) or &amp;lt;code&amp;gt;:w !command&amp;lt;/code&amp;gt; (pipes text to external command via stdin) or &amp;lt;code&amp;gt;:r !command&amp;lt;/code&amp;gt; (reads from external command via stdout).&lt;br /&gt;
&lt;br /&gt;
===...with some exceptions===&lt;br /&gt;
&lt;br /&gt;
Vim has a built-in spellchecker, whereas Emacs doesn&amp;#039;t (it does come with flyspell, which works with an external spellchecker like hunspell or aspell). (Emacs comes with tetris, an RPN calculator, an email client, etc., but not a spell-checker!)&lt;br /&gt;
&lt;br /&gt;
==Session management: per project vs single instance==&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;right way&amp;quot; to use Vim is to have one instance of Vim open per &amp;quot;project&amp;quot;. Each Vim instance maintains its own current directory, so you can e.g. open files relative to that current directory.&lt;br /&gt;
&lt;br /&gt;
In Emacs, the expectation is that you will have a single Emacs instance open. Emacs itself doesn&amp;#039;t maintain its current directory, and instead all file-open actions are relative to the buffer&amp;#039;s directory.&lt;br /&gt;
&lt;br /&gt;
Vim can do the Emacs thing with :set autochdir, but this is disabled by default.&lt;br /&gt;
&lt;br /&gt;
See [https://nullprogram.com/blog/2017/08/22/ this blog post] for more details.&lt;br /&gt;
&lt;br /&gt;
==Line-based vs character-based==&lt;br /&gt;
&lt;br /&gt;
Vim comes from a lineage of line-based editors. Registers can be linewise or characterwise, which means that actions like pasting text can act on entire lines or on characters. Some commands, like :substitute or :global, only work linewise. This is even reflected in the motion to move up or down a line: by default, j and k move down or up by logical lines instead of screen lines. However, due to this lineage, Vim does not deal well with long lines of text. Recent version of Vim have :set smoothscroll, but this only partially works.&lt;br /&gt;
&lt;br /&gt;
Emacs is like most other text editors in that it has no concept of linewise. Ctrl-n and Ctrl-p move by screen-lines, not logical lines, which makes sense when you think of the buffer of text as a stream of characters rather than an array of lines.&lt;br /&gt;
&lt;br /&gt;
==Mappings: keystroke based vs function-based==&lt;br /&gt;
&lt;br /&gt;
In Vim, commands like &amp;quot;copy text&amp;quot; don&amp;#039;t have a &amp;quot;name&amp;quot;; they are simply the keystroke that is used to perform that action. So if you want to &amp;quot;program&amp;quot; Vim to repeat some action, such as when defining a mapping, you simply tell Vim which keystrokes you want to repeat.&lt;br /&gt;
&lt;br /&gt;
In Emacs, every keystroke, even entering a single character, has a function that is associated with it. Emacs is simply an interpreter that runs the function associated with the keystroke. You can always do Ctrl-h k followed by the keystroke to find which function is bound to that particular keystroke.&lt;br /&gt;
&lt;br /&gt;
I think that being keystroke-based is one of the reasons Vim is so conservative about default keybindings (even when they are terrible, like Ctrl-b to go to the beginning of the line in command-line mode, or Y to copy the entire line instead of copying to the end of the line), because if you change the default keybinding inside of the C source code, it actually breaks all user mappings and scripts that rely on replaying keystrokes. So then eventually Vim came up with defaults.vim, which is not implemented on the level of C, but instead implemented on the level of Vimscript. By implementing it in Vimscript, it functions like user configuration, so it doesn&amp;#039;t change what the original keybindings mean. But doing this also means now you have to reason about multiple levels, the &amp;quot;base layer C keybindings&amp;quot; vs the &amp;quot;default keybindings that you actually interact with&amp;quot;. And at that point you&amp;#039;ve kind of reinvented the thing that Emacs does.&lt;br /&gt;
&lt;br /&gt;
==Actions: commands vs keybindings==&lt;br /&gt;
&lt;br /&gt;
Vim often uses the command-line for even common actions, e.g. :w to save a file [https://www.reddit.com/r/vim/comments/267vrv/i_am_tim_pope_crafter_of_plugins_ama/chojzsb/]. Emacs relies more on keybindings, e.g. Ctrl-x Ctrl-s to save a file.&lt;br /&gt;
&lt;br /&gt;
But there are some exceptions. To open the file that the cursor is on, Vim has various keybindings, including &amp;lt;code&amp;gt;gf&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;gF&amp;lt;/code&amp;gt;, Ctrl-w f, etc., but Emacs only has M-x ffap.&lt;br /&gt;
&lt;br /&gt;
==Tree-based undo vs stack-based undo==&lt;br /&gt;
&lt;br /&gt;
==Multiple similar commands vs single repeated command==&lt;br /&gt;
&lt;br /&gt;
This one is a bit hard to explain, but there is a definite pattern where Vim prefers to give the user multiple similar commands, while Emacs prefers to give a single command that you can then repeat or use creatively. The best way to explain is to give a bunch of examples:&lt;br /&gt;
&lt;br /&gt;
* Changing the screen view relative to cursor: Vim gives you zz to scroll so as to leave the cursor at the center of the screen, zt to scroll and put the cursor at the top, and zb to scroll and put the cursor at the bottom. Emacs just gives you a single command, Ctrl-l, which when repeatedly pressed, will cycle between all three views.&lt;br /&gt;
* Moving cursor to top, middle, bottom: Vim gives you H to move cursor to the top of the screen, M to move to middle, and L to move to bottom. Emacs just gives you Alt-r, which will cycle between the three configurations.&lt;br /&gt;
* Indenting: The way TAB indenting works in Emacs is very distinctive. You press TAB and Emacs just indents the line to whatever it thinks is the right level. Vim&amp;#039;s TAB in insert mode just inserts a literal tab or spaces depending on the &amp;#039;expandtab&amp;#039; option. But Vim also gives you, in insert mode, Ctrl-f to do the Emacs-like thing, Ctrl-t to indent the current line, Ctrl-d to decrease the indent of the current line. And many more commands in normal mode.&lt;br /&gt;
* Folding: Vim gives you fine-grained commands like zo to open a fold, zc to close a fold, zR to globally reduce the fold level in the file, etc. Emacs as far as I know doesn&amp;#039;t have folding by default, but certain major modes like org-mode and markdown-mode do have folding, and in these, you simply press TAB to cycle the different folding levels, or Shift-TAB to do the cycling globally across the entire file.&lt;br /&gt;
* Vim gives you Y, D, C, to copy, delete, and change (respectively) until the end of the line. Emacs just gives you Ctrl-k, which it then expects you to creatively make use of (e.g. if you want to copy until the end of the line, you do Ctrl-k to delete until the end of the line, then Ctrl-/ to undo).&lt;br /&gt;
* Vim has / to search forward, ? to search backward, then n or N to repeat that search in the same direction or opposite direction. Emacs just has Ctrl-s and Ctrl-r to do the search forward or backward. If you want to repeat the search, you just keep pressing Ctrl-s.&lt;br /&gt;
* When you have multiple split windows, Vim has Ctrl-w followed by h, j, k, or l to move to that window. It also has Ctrl-w followed by w to keep cycling between the splits. It also has Ctrl-w followed by p to toggle between the two most recent splits. There are just a lot of fine-grained choices you can make. Emacs just gives you Ctrl-x o which cycles.&lt;br /&gt;
* Text formatting: Vim gives you two operators, gq and gw, which format text; gq moves the cursor to the end of the formatted text, while gw tries to keep the cursor where it was before the formatting. You can then combine these operators with any motion, e.g. gwip to format the current paragraph, gww to format the current line, gwib to format inside parentheses. Emacs just gives you Alt-q to format the paragraph. It is then up to you to creatively combine that with text selection; you can select some text and then do Alt-q to format just the text that is selected.&lt;br /&gt;
* Copy-pasting: Vim gives you named registers, so if you want to copy two different lines and remember both, you do something like &amp;lt;code&amp;gt;&amp;quot;ayy&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;quot;byy&amp;lt;/code&amp;gt;; then you can paste them with &amp;lt;code&amp;gt;&amp;quot;ap&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;quot;bp&amp;lt;/code&amp;gt;. In Emacs, you instead kill both lines, and then when you go to paste them, you first Ctrl-y to paste the most recent, and then you do Alt-y to cycle between the most recently killed text.&lt;br /&gt;
* Vim has j and k to move down and up by logical lines, and also has gj and gk to move down and up by screen-lines. Emacs only has Ctrl-n and Ctrl-p to move down and up by screen-lines. To move by logical lines, you need to do something creative like Ctrl-e Ctrl-f or Ctrl-a Ctrl-b, or just repeatedly press Ctrl-n or Ctrl-p. &lt;br /&gt;
&lt;br /&gt;
In general, I feel that Vim requires more mental energy to use (by forcing the user to pick the action more precisely, and by having the user plan ahead). You need to pick the specific action you wanted to perform. You need to think ahead and decide which registers to use. This also comes from Vim&amp;#039;s modal nature, but Vim gives you more decisions and a grammar, whereas Emacs gives you a way to quickly do the common thing. I think much of this may have been forced on the design of Vim by deciding to be keystroke-based, so that the only way to make some action available in normal mode was to assign some key to it. Whereas Emacs went more in the direction of being functions-first, and once you have functions, it is natural to pass arguments to the function to modify the behavior.&lt;br /&gt;
&lt;br /&gt;
==Word movement: consistent vs &amp;quot;do the common thing&amp;quot;==&lt;br /&gt;
&lt;br /&gt;
Vim&amp;#039;s word-based motions like w, b, and e always treat contiguous alphanumeric sequences as single words, and also treats contiguous symbols as single words. This leads to a very consistent word movement, which means you will never have to backtrack.&lt;br /&gt;
&lt;br /&gt;
Emacs does the thing that most other text editors do, which is that if the cursor is before/on a symbol, then moving forward by one word will not just jump to the end of the symbols, but will jump to the end of the alphanumeric sequence &amp;#039;&amp;#039;after&amp;#039;&amp;#039; the symbols. Emacs caters to the most common thing, and sometimes you need to backtrack.&lt;br /&gt;
&lt;br /&gt;
Suppose you have some text like: &amp;lt;code&amp;gt;Hello, world.&amp;lt;/code&amp;gt; and the cursor is past the final period. You want to add the word &amp;lt;code&amp;gt;there&amp;lt;/code&amp;gt; before the comma, to make it &amp;lt;code&amp;gt;Hello there, world.&amp;lt;/code&amp;gt; In Vim, you press b a few times to move backwards by word, until the cursor is on the comma, at which point you can go into insert mode to type the &amp;quot;there&amp;quot;. In Emacs, Alt-b will move the cursor back by word, but once the cursor is on the &amp;#039;w&amp;#039;, pressing Alt-b again will jump past the comma onto the &amp;#039;H&amp;#039; -- in other words, it overshoots. So then you need to backtrack by pressing Alt-f to move forward by word.&lt;br /&gt;
&lt;br /&gt;
==Scrolling: scrolloff vs scroll-into-view==&lt;br /&gt;
&lt;br /&gt;
In Vim, defaults.vim sets scrolloff=5, which means that when the cursor is at the edge of the window, it will always show 5 lines of context. You can never &amp;quot;touch&amp;quot; the very edge of the screen, because the screen will scroll when you try to move to the edge. (But due to Vim&amp;#039;s line-oriented heritage, this will scroll into view an entire logical line instead of just one visual line.)&lt;br /&gt;
&lt;br /&gt;
In Emacs, the default behavior is instead to jerk the screen to the center &amp;#039;&amp;#039;after&amp;#039;&amp;#039; you step off the edge.&lt;br /&gt;
&lt;br /&gt;
==Search and replace==&lt;br /&gt;
&lt;br /&gt;
Emacs automatically does all the case variants, e.g. if you search and replace foo → bar, it also does Foo → Bar, FOO → Bar, etc. Vim doesn&amp;#039;t do this.&lt;br /&gt;
&lt;br /&gt;
==Visual noise==&lt;br /&gt;
&lt;br /&gt;
Emacs has more visual noise, e.g. the line continuation markers, incremental search by default, highlighting of all search matches as you type, a status bar. Vim comes from an environment where terminals were very slow so it tries by default to not draw to the screen very much. This means fewer things flash on the screen as you do things -- quite monastic vibes.&lt;br /&gt;
&lt;br /&gt;
Of course, by modern standards of things like VS Code, Zed, JetBrains, etc., even Emacs will feel minimal! No line numbers, sidebar with a file tree, no minimap that shows a zoomed out view of the file, no tabs shown by default, no git gutter, no git blame next to every line as the cursor moves, no popups nagging you about updates or extensions to install, no breadcrumbs (path of nested scope at the top), no hover-over documentation.&lt;br /&gt;
&lt;br /&gt;
Both Vim and Emacs have prominent comment colors in their syntax highlighting by default (in Vim it&amp;#039;s blue, in Emacs it&amp;#039;s red), which I think says a lot. By making most things invisible but making comments stand out, it tells the user that comments are something worth paying attention to. They both come from a saner culture in which programmers were intelligent and comments meant something. Now modern editors have all this crap in your face, and not just that, they make comments &amp;#039;&amp;#039;grayed out&amp;#039;&amp;#039; so that they almost fade into the background (VS Code is the one exception, where its default colorscheme has green comments).&lt;br /&gt;
&lt;br /&gt;
==Prompting the user==&lt;br /&gt;
&lt;br /&gt;
For Vim, see [https://www.reddit.com/r/vim/comments/267vrv/i_am_tim_pope_crafter_of_plugins_ama/chojzsb/].&lt;br /&gt;
&lt;br /&gt;
Emacs often prompts the user.&lt;br /&gt;
&lt;br /&gt;
==Documentation: graph/linear vs tree==&lt;br /&gt;
&lt;br /&gt;
Vim uses a wiki-like help system, where you can click on links to read the sections. It also contains a linear book under :help user-manual. Emacs has a GNU-like hierarchical tree documentation system.&lt;br /&gt;
&lt;br /&gt;
Both have a way to look things up based on keystroke or command name though. Vim has a universal :help command, while Emacs has e.g. Ctrl-h k for keystrokes or Ctrl-h f for functions.&lt;br /&gt;
&lt;br /&gt;
==Selection endpoint==&lt;br /&gt;
&lt;br /&gt;
Vim includes the selection endpoint, whereas Emacs doesn&amp;#039;t. The need to make this decision comes from both editors originating on the terminal with block cursors, rather than the more modern I-beam cursors.&lt;br /&gt;
&lt;br /&gt;
[[Category:Design]]&lt;/div&gt;</summary>
		<author><name>Issa</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.issarice.com/index.php?title=Design_philosophies_of_Vim_vs_Emacs&amp;diff=2967</id>
		<title>Design philosophies of Vim vs Emacs</title>
		<link rel="alternate" type="text/html" href="https://wiki.issarice.com/index.php?title=Design_philosophies_of_Vim_vs_Emacs&amp;diff=2967"/>
		<updated>2025-12-09T23:37:44Z</updated>

		<summary type="html">&lt;p&gt;Issa: /* Modal vs chording */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
==Modal vs chording==&lt;br /&gt;
&lt;br /&gt;
* Atomic edits and the dot command in Vim: When you use Vim, you naturally start to think in terms of repeatable edits that you can then use the &amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt; command to repeat. But this has a side-effect in that Vim requires you to manually chunk your undo history. Emacs instead automatically chunks undos.&lt;br /&gt;
* One consequence of the modal editing is that I think Vim degrades gracefully to having worse keyboards/a less ergonomic setup in general ([https://youtu.be/SY8L-cj4x6k?t=3594 or big hands]). For example, I bought a fairly crappy external USB keyboard for $25 where if I don&amp;#039;t press the Ctrl key very firmly, sometimes it will not register. This hasn&amp;#039;t been a problem in most software, but &amp;#039;&amp;#039;has&amp;#039;&amp;#039; become a problem when I use Emacs because I need to hold down the Ctrl key a lot for navigating with Ctrl+p and Ctrl+n. In Vim, I don&amp;#039;t have this problem at all because Ctrl just isn&amp;#039;t a key I need to hold down for long periods; it&amp;#039;s something I momentarily hold down, just long enough to press another key. So I have never run into this problem when using Vim (or even Firefox or other software). Emacs is the editor, and really only software, that in some sense &amp;#039;&amp;#039;requires&amp;#039;&amp;#039; me to have a nice keyboard.&lt;br /&gt;
* Another consequence of modal editing (in particular, the fact that Vi decided to use the escape key as the modal switch to move out of insert and command-line modes) is that since escape is also use in terminal escape sequences, now there is a conflict in interpreting key sequences containing the escape key: is it the user switching out of insert mode and typing some normal-mode commands? Or is it the start of a terminal escape sequence (e.g. use of the arrow keys)? Because of this, Vim added options like ttimeout, ttimeoutlen, esckeys, and probably more, and tmux also has an option called escape-time which used to be necessary to set. If these options are not set correctly, one may have to wait up to 1-3 seconds for the effect of typing an escape key to show up on screen (because without waiting, Vim is not sure if you meant to just type an escape key or if you typed something that began a terminal escape sequence). It also means that unlike in all other terminal applications, you cannot easily use alt-key bindings, and in particular you cannot do the esc-key alternative to send an alt-key binding. If Vim had chosen literally any other key to represent mode switching (such as Ctrl-c, or maybe Ctrl-z which is used in evil-mode on Emacs to toggle between Vim-mode and Emacs-mode), this would not have been a problem. (Not to mention that if such a replacement key was chosen well, it would have been easier to type than Ctrl-[ or the escape key, since the escape key on modern keyboards is far from the home row of the keyboard!) Modern terminals like Kitty, and also Neovim, are finally fixing this so that you don&amp;#039;t have to ever think about this anymore. But there is still a sort of burden I feel from years of Vim use.&lt;br /&gt;
&lt;br /&gt;
==Unix as IDE vs Emacs as OS==&lt;br /&gt;
&lt;br /&gt;
Vim tries to just be a text editor, and tries to play nice with the other tools on your computer, using commands like &amp;lt;code&amp;gt;:!command&amp;lt;/code&amp;gt; (runs external command) or &amp;lt;code&amp;gt;:w !command&amp;lt;/code&amp;gt; (pipes text to external command via stdin) or &amp;lt;code&amp;gt;:r !command&amp;lt;/code&amp;gt; (reads from external command via stdout).&lt;br /&gt;
&lt;br /&gt;
===...with some exceptions===&lt;br /&gt;
&lt;br /&gt;
Vim has a built-in spellchecker, whereas Emacs doesn&amp;#039;t (it does come with flyspell, which works with an external spellchecker like hunspell or aspell). (Emacs comes with tetris, an RPN calculator, an email client, etc., but not a spell-checker!)&lt;br /&gt;
&lt;br /&gt;
==Session management: per project vs single instance==&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;right way&amp;quot; to use Vim is to have one instance of Vim open per &amp;quot;project&amp;quot;. Each Vim instance maintains its own current directory, so you can e.g. open files relative to that current directory.&lt;br /&gt;
&lt;br /&gt;
In Emacs, the expectation is that you will have a single Emacs instance open. Emacs itself doesn&amp;#039;t maintain its current directory, and instead all file-open actions are relative to the buffer&amp;#039;s directory.&lt;br /&gt;
&lt;br /&gt;
Vim can do the Emacs thing with :set autochdir, but this is disabled by default.&lt;br /&gt;
&lt;br /&gt;
See [https://nullprogram.com/blog/2017/08/22/ this blog post] for more details.&lt;br /&gt;
&lt;br /&gt;
==Line-based vs character-based==&lt;br /&gt;
&lt;br /&gt;
Vim comes from a lineage of line-based editors. Registers can be linewise or characterwise, which means that actions like pasting text can act on entire lines or on characters. Some commands, like :substitute or :global, only work linewise. This is even reflected in the motion to move up or down a line: by default, j and k move down or up by logical lines instead of screen lines. However, due to this lineage, Vim does not deal well with long lines of text. Recent version of Vim have :set smoothscroll, but this only partially works.&lt;br /&gt;
&lt;br /&gt;
Emacs is like most other text editors in that it has no concept of linewise. Ctrl-n and Ctrl-p move by screen-lines, not logical lines, which makes sense when you think of the buffer of text as a stream of characters rather than an array of lines.&lt;br /&gt;
&lt;br /&gt;
==Mappings: keystroke based vs function-based==&lt;br /&gt;
&lt;br /&gt;
In Vim, commands like &amp;quot;copy text&amp;quot; don&amp;#039;t have a &amp;quot;name&amp;quot;; they are simply the keystroke that is used to perform that action. So if you want to &amp;quot;program&amp;quot; Vim to repeat some action, such as when defining a mapping, you simply tell Vim which keystrokes you want to repeat.&lt;br /&gt;
&lt;br /&gt;
In Emacs, every keystroke, even entering a single character, has a function that is associated with it. Emacs is simply an interpreter that runs the function associated with the keystroke. You can always do Ctrl-h k followed by the keystroke to find which function is bound to that particular keystroke.&lt;br /&gt;
&lt;br /&gt;
I think that being keystroke-based is one of the reasons Vim is so conservative about default keybindings (even when they are terrible, like Ctrl-b to go to the beginning of the line in command-line mode, or Y to copy the entire line instead of copying to the end of the line), because if you change the default keybinding inside of the C source code, it actually breaks all user mappings and scripts that rely on replaying keystrokes. So then eventually Vim came up with defaults.vim, which is not implemented on the level of C, but instead implemented on the level of Vimscript. By implementing it in Vimscript, it functions like user configuration, so it doesn&amp;#039;t change what the original keybindings mean. But doing this also means now you have to reason about multiple levels, the &amp;quot;base layer C keybindings&amp;quot; vs the &amp;quot;default keybindings that you actually interact with&amp;quot;. And at that point you&amp;#039;ve kind of reinvented the thing that Emacs does.&lt;br /&gt;
&lt;br /&gt;
==Actions: commands vs keybindings==&lt;br /&gt;
&lt;br /&gt;
Vim often uses the command-line for even common actions, e.g. :w to save a file [https://www.reddit.com/r/vim/comments/267vrv/i_am_tim_pope_crafter_of_plugins_ama/chojzsb/]. Emacs relies more on keybindings, e.g. Ctrl-x Ctrl-s to save a file.&lt;br /&gt;
&lt;br /&gt;
But there are some exceptions. To open the file that the cursor is on, Vim has various keybindings, including &amp;lt;code&amp;gt;gf&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;gF&amp;lt;/code&amp;gt;, Ctrl-w f, etc., but Emacs only has M-x ffap.&lt;br /&gt;
&lt;br /&gt;
==Tree-based undo vs stack-based undo==&lt;br /&gt;
&lt;br /&gt;
==Multiple similar commands vs single repeated command==&lt;br /&gt;
&lt;br /&gt;
This one is a bit hard to explain, but there is a definite pattern where Vim prefers to give the user multiple similar commands, while Emacs prefers to give a single command that you can then repeat or use creatively. The best way to explain is to give a bunch of examples:&lt;br /&gt;
&lt;br /&gt;
* Changing the screen view relative to cursor: Vim gives you zz to scroll so as to leave the cursor at the center of the screen, zt to scroll and put the cursor at the top, and zb to scroll and put the cursor at the bottom. Emacs just gives you a single command, Ctrl-l, which when repeatedly pressed, will cycle between all three views.&lt;br /&gt;
* Moving cursor to top, middle, bottom: Vim gives you H to move cursor to the top of the screen, M to move to middle, and L to move to bottom. Emacs just gives you Alt-r, which will cycle between the three configurations.&lt;br /&gt;
* Indenting: The way TAB indenting works in Emacs is very distinctive. You press TAB and Emacs just indents the line to whatever it thinks is the right level. Vim&amp;#039;s TAB in insert mode just inserts a literal tab or spaces depending on the &amp;#039;expandtab&amp;#039; option. But Vim also gives you, in insert mode, Ctrl-f to do the Emacs-like thing, Ctrl-t to indent the current line, Ctrl-d to decrease the indent of the current line. And many more commands in normal mode.&lt;br /&gt;
* Folding: Vim gives you fine-grained commands like zo to open a fold, zc to close a fold, zR to globally reduce the fold level in the file, etc. Emacs as far as I know doesn&amp;#039;t have folding by default, but certain major modes like org-mode and markdown-mode do have folding, and in these, you simply press TAB to cycle the different folding levels, or Shift-TAB to do the cycling globally across the entire file.&lt;br /&gt;
* Vim gives you Y, D, C, to copy, delete, and change (respectively) until the end of the line. Emacs just gives you Ctrl-k, which it then expects you to creatively make use of (e.g. if you want to copy until the end of the line, you do Ctrl-k to delete until the end of the line, then Ctrl-/ to undo).&lt;br /&gt;
* Vim has / to search forward, ? to search backward, then n or N to repeat that search in the same direction or opposite direction. Emacs just has Ctrl-s and Ctrl-r to do the search forward or backward. If you want to repeat the search, you just keep pressing Ctrl-s.&lt;br /&gt;
* When you have multiple split windows, Vim has Ctrl-w followed by h, j, k, or l to move to that window. It also has Ctrl-w followed by w to keep cycling between the splits. It also has Ctrl-w followed by p to toggle between the two most recent splits. There are just a lot of fine-grained choices you can make. Emacs just gives you Ctrl-x o which cycles.&lt;br /&gt;
* Text formatting: Vim gives you two operators, gq and gw, which format text; gq moves the cursor to the end of the formatted text, while gw tries to keep the cursor where it was before the formatting. You can then combine these operators with any motion, e.g. gwip to format the current paragraph, gww to format the current line, gwib to format inside parentheses. Emacs just gives you Alt-q to format the paragraph. It is then up to you to creatively combine that with text selection; you can select some text and then do Alt-q to format just the text that is selected.&lt;br /&gt;
* Copy-pasting: Vim gives you named registers, so if you want to copy two different lines and remember both, you do something like &amp;lt;code&amp;gt;&amp;quot;ayy&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;quot;byy&amp;lt;/code&amp;gt;; then you can paste them with &amp;lt;code&amp;gt;&amp;quot;ap&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;quot;bp&amp;lt;/code&amp;gt;. In Emacs, you instead kill both lines, and then when you go to paste them, you first Ctrl-y to paste the most recent, and then you do Alt-y to cycle between the most recently killed text.&lt;br /&gt;
* Vim has j and k to move down and up by logical lines, and also has gj and gk to move down and up by screen-lines. Emacs only has Ctrl-n and Ctrl-p to move down and up by screen-lines. To move by logical lines, you need to do something creative like Ctrl-e Ctrl-f or Ctrl-a Ctrl-b, or just repeatedly press Ctrl-n or Ctrl-p. &lt;br /&gt;
&lt;br /&gt;
In general, I feel that Vim requires more mental energy to use (by forcing the user to pick the action more precisely, and by having the user plan ahead). You need to pick the specific action you wanted to perform. You need to think ahead and decide which registers to use. This also comes from Vim&amp;#039;s modal nature, but Vim gives you more decisions and a grammar, whereas Emacs gives you a way to quickly do the common thing. I think much of this may have been forced on the design of Vim by deciding to be keystroke-based, so that the only way to make some action available in normal mode was to assign some key to it. Whereas Emacs went more in the direction of being functions-first, and once you have functions, it is natural to pass arguments to the function to modify the behavior.&lt;br /&gt;
&lt;br /&gt;
==Word movement: consistent vs &amp;quot;do the common thing&amp;quot;==&lt;br /&gt;
&lt;br /&gt;
Vim&amp;#039;s word-based motions like w, b, and e always treat contiguous alphanumeric sequences as single words, and also treats contiguous symbols as single words. This leads to a very consistent word movement, which means you will never have to backtrack.&lt;br /&gt;
&lt;br /&gt;
Emacs does the thing that most other text editors do, which is that if the cursor is before/on a symbol, then moving forward by one word will not just jump to the end of the symbols, but will jump to the end of the alphanumeric sequence &amp;#039;&amp;#039;after&amp;#039;&amp;#039; the symbols. Emacs caters to the most common thing, and sometimes you need to backtrack.&lt;br /&gt;
&lt;br /&gt;
Suppose you have some text like: &amp;lt;code&amp;gt;Hello, world.&amp;lt;/code&amp;gt; and the cursor is past the final period. You want to add the word &amp;lt;code&amp;gt;there&amp;lt;/code&amp;gt; before the comma, to make it &amp;lt;code&amp;gt;Hello there, world.&amp;lt;/code&amp;gt; In Vim, you press b a few times to move backwards by word, until the cursor is on the comma, at which point you can go into insert mode to type the &amp;quot;there&amp;quot;. In Emacs, Alt-b will move the cursor back by word, but once the cursor is on the &amp;#039;w&amp;#039;, pressing Alt-b again will jump past the comma onto the &amp;#039;H&amp;#039; -- in other words, it overshoots. So then you need to backtrack by pressing Alt-f to move forward by word.&lt;br /&gt;
&lt;br /&gt;
==Scrolling: scrolloff vs scroll-into-view==&lt;br /&gt;
&lt;br /&gt;
In Vim, defaults.vim sets scrolloff=5, which means that when the cursor is at the edge of the window, it will always show 5 lines of context. You can never &amp;quot;touch&amp;quot; the very edge of the screen, because the screen will scroll when you try to move to the edge. (But due to Vim&amp;#039;s line-oriented heritage, this will scroll into view an entire logical line instead of just one visual line.)&lt;br /&gt;
&lt;br /&gt;
In Emacs, the default behavior is instead to jerk the screen to the center &amp;#039;&amp;#039;after&amp;#039;&amp;#039; you step off the edge.&lt;br /&gt;
&lt;br /&gt;
==Search and replace==&lt;br /&gt;
&lt;br /&gt;
Emacs automatically does all the case variants, e.g. if you search and replace foo → bar, it also does Foo → Bar, FOO → Bar, etc. Vim doesn&amp;#039;t do this.&lt;br /&gt;
&lt;br /&gt;
==Visual noise==&lt;br /&gt;
&lt;br /&gt;
Emacs has more visual noise, e.g. the line continuation markers, incremental search by default, highlighting of all search matches as you type, a status bar. Vim comes from an environment where terminals were very slow so it tries by default to not draw to the screen very much. This means fewer things flash on the screen as you do things -- quite monastic vibes.&lt;br /&gt;
&lt;br /&gt;
Of course, by modern standards of things like VS Code, Zed, JetBrains, etc., even Emacs will feel minimal! No line numbers, sidebar with a file tree, no minimap that shows a zoomed out view of the file, no tabs shown by default, no git gutter, no git blame next to every line as the cursor moves, no popups nagging you about updates or extensions to install, no breadcrumbs (path of nested scope at the top), no hover-over documentation.&lt;br /&gt;
&lt;br /&gt;
Both Vim and Emacs have prominent comment colors in their syntax highlighting by default (in Vim it&amp;#039;s blue, in Emacs it&amp;#039;s red), which I think says a lot. By making most things invisible but making comments stand out, it tells the user that comments are something worth paying attention to. They both come from a saner culture in which programmers were intelligent and comments meant something. Now modern editors have all this crap in your face, and not just that, they make comments &amp;#039;&amp;#039;grayed out&amp;#039;&amp;#039; so that they almost fade into the background (VS Code is the one exception, where its default colorscheme has green comments).&lt;br /&gt;
&lt;br /&gt;
==Prompting the user==&lt;br /&gt;
&lt;br /&gt;
For Vim, see [https://www.reddit.com/r/vim/comments/267vrv/i_am_tim_pope_crafter_of_plugins_ama/chojzsb/].&lt;br /&gt;
&lt;br /&gt;
Emacs often prompts the user.&lt;br /&gt;
&lt;br /&gt;
==Documentation: graph/linear vs tree==&lt;br /&gt;
&lt;br /&gt;
Vim uses a wiki-like help system, where you can click on links to read the sections. It also contains a linear book under :help user-manual. Emacs has a GNU-like hierarchical tree documentation system.&lt;br /&gt;
&lt;br /&gt;
Both have a way to look things up based on keystroke or command name though. Vim has a universal :help command, while Emacs has e.g. Ctrl-h k for keystrokes or Ctrl-h f for functions.&lt;br /&gt;
&lt;br /&gt;
==Selection endpoint==&lt;br /&gt;
&lt;br /&gt;
Vim includes the selection endpoint, whereas Emacs doesn&amp;#039;t. The need to make this decision comes from both editors originating on the terminal with block cursors, rather than the more modern I-beam cursors.&lt;br /&gt;
&lt;br /&gt;
[[Category:Design]]&lt;/div&gt;</summary>
		<author><name>Issa</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.issarice.com/index.php?title=Design_philosophies_of_Vim_vs_Emacs&amp;diff=2966</id>
		<title>Design philosophies of Vim vs Emacs</title>
		<link rel="alternate" type="text/html" href="https://wiki.issarice.com/index.php?title=Design_philosophies_of_Vim_vs_Emacs&amp;diff=2966"/>
		<updated>2025-12-09T23:35:42Z</updated>

		<summary type="html">&lt;p&gt;Issa: /* Modal vs chording */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
==Modal vs chording==&lt;br /&gt;
&lt;br /&gt;
* Atomic edits and the dot command in Vim: When you use Vim, you naturally start to think in terms of repeatable edits that you can then use the &amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt; command to repeat. But this has a side-effect in that Vim requires you to manually chunk your undo history. Emacs instead automatically chunks undos.&lt;br /&gt;
* One consequence of the modal editing is that I think Vim degrades gracefully to having worse keyboards/a less ergonomic setup in general ([https://youtu.be/SY8L-cj4x6k?t=3594 or big hands]). For example, I bought a fairly crappy external USB keyboard for $25 where if I don&amp;#039;t press the Ctrl key very firmly, sometimes it will not register. This hasn&amp;#039;t been a problem in most software, but &amp;#039;&amp;#039;has&amp;#039;&amp;#039; become a problem when I use Emacs because I need to hold down the Ctrl key a lot for navigating with Ctrl+p and Ctrl+n. In Vim, I don&amp;#039;t have this problem at all because Ctrl just isn&amp;#039;t a key I need to hold down for long periods; it&amp;#039;s something I momentarily hold down, just long enough to press another key. So I have never run into this problem when using Vim (or even Firefox or other software). Emacs is the editor, and really only software, that in some sense &amp;#039;&amp;#039;requires&amp;#039;&amp;#039; me to have a nice keyboard.&lt;br /&gt;
* Another consequence of modal editing (in particular, the fact that Vi decided to use the escape key as the modal switch to move out of insert and command-line modes) is that since escape is also use in terminal escape sequences, now there is a conflict in interpreting key sequences containing the escape key: is it the user switching out of insert mode and typing some normal-mode commands? Or is it the start of a terminal escape sequence (e.g. use of the arrow keys)? Because of this, Vim added options like ttimeout, ttimeoutlen, esckeys, and probably more, and tmux also has an option called escape-time which used to be necessary to set. If these options are not set correctly, one may have to wait up to 1-3 seconds for the effect of typing an escape key to show up on screen (because without waiting, Vim is not sure if you meant to just type an escape key or if you typed something that began a terminal escape sequence). It also means that unlike in all other terminal applications, you cannot easily use alt-key bindings, and in particular you cannot do the esc-key alternative to send an alt-key binding. If Vim had chosen literally any other key to represent mode switching (such as Ctrl-c, or maybe Ctrl-z which is used in evil-mode on Emacs to toggle between Vim-mode and Emacs-mode), this would not have been a problem. Modern terminals like Kitty, and also Neovim, are finally fixing this so that you don&amp;#039;t have to ever think about this anymore. But there is still a sort of burden I feel from years of Vim use.&lt;br /&gt;
&lt;br /&gt;
==Unix as IDE vs Emacs as OS==&lt;br /&gt;
&lt;br /&gt;
Vim tries to just be a text editor, and tries to play nice with the other tools on your computer, using commands like &amp;lt;code&amp;gt;:!command&amp;lt;/code&amp;gt; (runs external command) or &amp;lt;code&amp;gt;:w !command&amp;lt;/code&amp;gt; (pipes text to external command via stdin) or &amp;lt;code&amp;gt;:r !command&amp;lt;/code&amp;gt; (reads from external command via stdout).&lt;br /&gt;
&lt;br /&gt;
===...with some exceptions===&lt;br /&gt;
&lt;br /&gt;
Vim has a built-in spellchecker, whereas Emacs doesn&amp;#039;t (it does come with flyspell, which works with an external spellchecker like hunspell or aspell). (Emacs comes with tetris, an RPN calculator, an email client, etc., but not a spell-checker!)&lt;br /&gt;
&lt;br /&gt;
==Session management: per project vs single instance==&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;right way&amp;quot; to use Vim is to have one instance of Vim open per &amp;quot;project&amp;quot;. Each Vim instance maintains its own current directory, so you can e.g. open files relative to that current directory.&lt;br /&gt;
&lt;br /&gt;
In Emacs, the expectation is that you will have a single Emacs instance open. Emacs itself doesn&amp;#039;t maintain its current directory, and instead all file-open actions are relative to the buffer&amp;#039;s directory.&lt;br /&gt;
&lt;br /&gt;
Vim can do the Emacs thing with :set autochdir, but this is disabled by default.&lt;br /&gt;
&lt;br /&gt;
See [https://nullprogram.com/blog/2017/08/22/ this blog post] for more details.&lt;br /&gt;
&lt;br /&gt;
==Line-based vs character-based==&lt;br /&gt;
&lt;br /&gt;
Vim comes from a lineage of line-based editors. Registers can be linewise or characterwise, which means that actions like pasting text can act on entire lines or on characters. Some commands, like :substitute or :global, only work linewise. This is even reflected in the motion to move up or down a line: by default, j and k move down or up by logical lines instead of screen lines. However, due to this lineage, Vim does not deal well with long lines of text. Recent version of Vim have :set smoothscroll, but this only partially works.&lt;br /&gt;
&lt;br /&gt;
Emacs is like most other text editors in that it has no concept of linewise. Ctrl-n and Ctrl-p move by screen-lines, not logical lines, which makes sense when you think of the buffer of text as a stream of characters rather than an array of lines.&lt;br /&gt;
&lt;br /&gt;
==Mappings: keystroke based vs function-based==&lt;br /&gt;
&lt;br /&gt;
In Vim, commands like &amp;quot;copy text&amp;quot; don&amp;#039;t have a &amp;quot;name&amp;quot;; they are simply the keystroke that is used to perform that action. So if you want to &amp;quot;program&amp;quot; Vim to repeat some action, such as when defining a mapping, you simply tell Vim which keystrokes you want to repeat.&lt;br /&gt;
&lt;br /&gt;
In Emacs, every keystroke, even entering a single character, has a function that is associated with it. Emacs is simply an interpreter that runs the function associated with the keystroke. You can always do Ctrl-h k followed by the keystroke to find which function is bound to that particular keystroke.&lt;br /&gt;
&lt;br /&gt;
I think that being keystroke-based is one of the reasons Vim is so conservative about default keybindings (even when they are terrible, like Ctrl-b to go to the beginning of the line in command-line mode, or Y to copy the entire line instead of copying to the end of the line), because if you change the default keybinding inside of the C source code, it actually breaks all user mappings and scripts that rely on replaying keystrokes. So then eventually Vim came up with defaults.vim, which is not implemented on the level of C, but instead implemented on the level of Vimscript. By implementing it in Vimscript, it functions like user configuration, so it doesn&amp;#039;t change what the original keybindings mean. But doing this also means now you have to reason about multiple levels, the &amp;quot;base layer C keybindings&amp;quot; vs the &amp;quot;default keybindings that you actually interact with&amp;quot;. And at that point you&amp;#039;ve kind of reinvented the thing that Emacs does.&lt;br /&gt;
&lt;br /&gt;
==Actions: commands vs keybindings==&lt;br /&gt;
&lt;br /&gt;
Vim often uses the command-line for even common actions, e.g. :w to save a file [https://www.reddit.com/r/vim/comments/267vrv/i_am_tim_pope_crafter_of_plugins_ama/chojzsb/]. Emacs relies more on keybindings, e.g. Ctrl-x Ctrl-s to save a file.&lt;br /&gt;
&lt;br /&gt;
But there are some exceptions. To open the file that the cursor is on, Vim has various keybindings, including &amp;lt;code&amp;gt;gf&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;gF&amp;lt;/code&amp;gt;, Ctrl-w f, etc., but Emacs only has M-x ffap.&lt;br /&gt;
&lt;br /&gt;
==Tree-based undo vs stack-based undo==&lt;br /&gt;
&lt;br /&gt;
==Multiple similar commands vs single repeated command==&lt;br /&gt;
&lt;br /&gt;
This one is a bit hard to explain, but there is a definite pattern where Vim prefers to give the user multiple similar commands, while Emacs prefers to give a single command that you can then repeat or use creatively. The best way to explain is to give a bunch of examples:&lt;br /&gt;
&lt;br /&gt;
* Changing the screen view relative to cursor: Vim gives you zz to scroll so as to leave the cursor at the center of the screen, zt to scroll and put the cursor at the top, and zb to scroll and put the cursor at the bottom. Emacs just gives you a single command, Ctrl-l, which when repeatedly pressed, will cycle between all three views.&lt;br /&gt;
* Moving cursor to top, middle, bottom: Vim gives you H to move cursor to the top of the screen, M to move to middle, and L to move to bottom. Emacs just gives you Alt-r, which will cycle between the three configurations.&lt;br /&gt;
* Indenting: The way TAB indenting works in Emacs is very distinctive. You press TAB and Emacs just indents the line to whatever it thinks is the right level. Vim&amp;#039;s TAB in insert mode just inserts a literal tab or spaces depending on the &amp;#039;expandtab&amp;#039; option. But Vim also gives you, in insert mode, Ctrl-f to do the Emacs-like thing, Ctrl-t to indent the current line, Ctrl-d to decrease the indent of the current line. And many more commands in normal mode.&lt;br /&gt;
* Folding: Vim gives you fine-grained commands like zo to open a fold, zc to close a fold, zR to globally reduce the fold level in the file, etc. Emacs as far as I know doesn&amp;#039;t have folding by default, but certain major modes like org-mode and markdown-mode do have folding, and in these, you simply press TAB to cycle the different folding levels, or Shift-TAB to do the cycling globally across the entire file.&lt;br /&gt;
* Vim gives you Y, D, C, to copy, delete, and change (respectively) until the end of the line. Emacs just gives you Ctrl-k, which it then expects you to creatively make use of (e.g. if you want to copy until the end of the line, you do Ctrl-k to delete until the end of the line, then Ctrl-/ to undo).&lt;br /&gt;
* Vim has / to search forward, ? to search backward, then n or N to repeat that search in the same direction or opposite direction. Emacs just has Ctrl-s and Ctrl-r to do the search forward or backward. If you want to repeat the search, you just keep pressing Ctrl-s.&lt;br /&gt;
* When you have multiple split windows, Vim has Ctrl-w followed by h, j, k, or l to move to that window. It also has Ctrl-w followed by w to keep cycling between the splits. It also has Ctrl-w followed by p to toggle between the two most recent splits. There are just a lot of fine-grained choices you can make. Emacs just gives you Ctrl-x o which cycles.&lt;br /&gt;
* Text formatting: Vim gives you two operators, gq and gw, which format text; gq moves the cursor to the end of the formatted text, while gw tries to keep the cursor where it was before the formatting. You can then combine these operators with any motion, e.g. gwip to format the current paragraph, gww to format the current line, gwib to format inside parentheses. Emacs just gives you Alt-q to format the paragraph. It is then up to you to creatively combine that with text selection; you can select some text and then do Alt-q to format just the text that is selected.&lt;br /&gt;
* Copy-pasting: Vim gives you named registers, so if you want to copy two different lines and remember both, you do something like &amp;lt;code&amp;gt;&amp;quot;ayy&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;quot;byy&amp;lt;/code&amp;gt;; then you can paste them with &amp;lt;code&amp;gt;&amp;quot;ap&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;quot;bp&amp;lt;/code&amp;gt;. In Emacs, you instead kill both lines, and then when you go to paste them, you first Ctrl-y to paste the most recent, and then you do Alt-y to cycle between the most recently killed text.&lt;br /&gt;
* Vim has j and k to move down and up by logical lines, and also has gj and gk to move down and up by screen-lines. Emacs only has Ctrl-n and Ctrl-p to move down and up by screen-lines. To move by logical lines, you need to do something creative like Ctrl-e Ctrl-f or Ctrl-a Ctrl-b, or just repeatedly press Ctrl-n or Ctrl-p. &lt;br /&gt;
&lt;br /&gt;
In general, I feel that Vim requires more mental energy to use (by forcing the user to pick the action more precisely, and by having the user plan ahead). You need to pick the specific action you wanted to perform. You need to think ahead and decide which registers to use. This also comes from Vim&amp;#039;s modal nature, but Vim gives you more decisions and a grammar, whereas Emacs gives you a way to quickly do the common thing. I think much of this may have been forced on the design of Vim by deciding to be keystroke-based, so that the only way to make some action available in normal mode was to assign some key to it. Whereas Emacs went more in the direction of being functions-first, and once you have functions, it is natural to pass arguments to the function to modify the behavior.&lt;br /&gt;
&lt;br /&gt;
==Word movement: consistent vs &amp;quot;do the common thing&amp;quot;==&lt;br /&gt;
&lt;br /&gt;
Vim&amp;#039;s word-based motions like w, b, and e always treat contiguous alphanumeric sequences as single words, and also treats contiguous symbols as single words. This leads to a very consistent word movement, which means you will never have to backtrack.&lt;br /&gt;
&lt;br /&gt;
Emacs does the thing that most other text editors do, which is that if the cursor is before/on a symbol, then moving forward by one word will not just jump to the end of the symbols, but will jump to the end of the alphanumeric sequence &amp;#039;&amp;#039;after&amp;#039;&amp;#039; the symbols. Emacs caters to the most common thing, and sometimes you need to backtrack.&lt;br /&gt;
&lt;br /&gt;
Suppose you have some text like: &amp;lt;code&amp;gt;Hello, world.&amp;lt;/code&amp;gt; and the cursor is past the final period. You want to add the word &amp;lt;code&amp;gt;there&amp;lt;/code&amp;gt; before the comma, to make it &amp;lt;code&amp;gt;Hello there, world.&amp;lt;/code&amp;gt; In Vim, you press b a few times to move backwards by word, until the cursor is on the comma, at which point you can go into insert mode to type the &amp;quot;there&amp;quot;. In Emacs, Alt-b will move the cursor back by word, but once the cursor is on the &amp;#039;w&amp;#039;, pressing Alt-b again will jump past the comma onto the &amp;#039;H&amp;#039; -- in other words, it overshoots. So then you need to backtrack by pressing Alt-f to move forward by word.&lt;br /&gt;
&lt;br /&gt;
==Scrolling: scrolloff vs scroll-into-view==&lt;br /&gt;
&lt;br /&gt;
In Vim, defaults.vim sets scrolloff=5, which means that when the cursor is at the edge of the window, it will always show 5 lines of context. You can never &amp;quot;touch&amp;quot; the very edge of the screen, because the screen will scroll when you try to move to the edge. (But due to Vim&amp;#039;s line-oriented heritage, this will scroll into view an entire logical line instead of just one visual line.)&lt;br /&gt;
&lt;br /&gt;
In Emacs, the default behavior is instead to jerk the screen to the center &amp;#039;&amp;#039;after&amp;#039;&amp;#039; you step off the edge.&lt;br /&gt;
&lt;br /&gt;
==Search and replace==&lt;br /&gt;
&lt;br /&gt;
Emacs automatically does all the case variants, e.g. if you search and replace foo → bar, it also does Foo → Bar, FOO → Bar, etc. Vim doesn&amp;#039;t do this.&lt;br /&gt;
&lt;br /&gt;
==Visual noise==&lt;br /&gt;
&lt;br /&gt;
Emacs has more visual noise, e.g. the line continuation markers, incremental search by default, highlighting of all search matches as you type, a status bar. Vim comes from an environment where terminals were very slow so it tries by default to not draw to the screen very much. This means fewer things flash on the screen as you do things -- quite monastic vibes.&lt;br /&gt;
&lt;br /&gt;
Of course, by modern standards of things like VS Code, Zed, JetBrains, etc., even Emacs will feel minimal! No line numbers, sidebar with a file tree, no minimap that shows a zoomed out view of the file, no tabs shown by default, no git gutter, no git blame next to every line as the cursor moves, no popups nagging you about updates or extensions to install, no breadcrumbs (path of nested scope at the top), no hover-over documentation.&lt;br /&gt;
&lt;br /&gt;
Both Vim and Emacs have prominent comment colors in their syntax highlighting by default (in Vim it&amp;#039;s blue, in Emacs it&amp;#039;s red), which I think says a lot. By making most things invisible but making comments stand out, it tells the user that comments are something worth paying attention to. They both come from a saner culture in which programmers were intelligent and comments meant something. Now modern editors have all this crap in your face, and not just that, they make comments &amp;#039;&amp;#039;grayed out&amp;#039;&amp;#039; so that they almost fade into the background (VS Code is the one exception, where its default colorscheme has green comments).&lt;br /&gt;
&lt;br /&gt;
==Prompting the user==&lt;br /&gt;
&lt;br /&gt;
For Vim, see [https://www.reddit.com/r/vim/comments/267vrv/i_am_tim_pope_crafter_of_plugins_ama/chojzsb/].&lt;br /&gt;
&lt;br /&gt;
Emacs often prompts the user.&lt;br /&gt;
&lt;br /&gt;
==Documentation: graph/linear vs tree==&lt;br /&gt;
&lt;br /&gt;
Vim uses a wiki-like help system, where you can click on links to read the sections. It also contains a linear book under :help user-manual. Emacs has a GNU-like hierarchical tree documentation system.&lt;br /&gt;
&lt;br /&gt;
Both have a way to look things up based on keystroke or command name though. Vim has a universal :help command, while Emacs has e.g. Ctrl-h k for keystrokes or Ctrl-h f for functions.&lt;br /&gt;
&lt;br /&gt;
==Selection endpoint==&lt;br /&gt;
&lt;br /&gt;
Vim includes the selection endpoint, whereas Emacs doesn&amp;#039;t. The need to make this decision comes from both editors originating on the terminal with block cursors, rather than the more modern I-beam cursors.&lt;br /&gt;
&lt;br /&gt;
[[Category:Design]]&lt;/div&gt;</summary>
		<author><name>Issa</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.issarice.com/index.php?title=Design_philosophies_of_Vim_vs_Emacs&amp;diff=2965</id>
		<title>Design philosophies of Vim vs Emacs</title>
		<link rel="alternate" type="text/html" href="https://wiki.issarice.com/index.php?title=Design_philosophies_of_Vim_vs_Emacs&amp;diff=2965"/>
		<updated>2025-12-09T23:32:53Z</updated>

		<summary type="html">&lt;p&gt;Issa: /* Modal vs chording */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
==Modal vs chording==&lt;br /&gt;
&lt;br /&gt;
* Atomic edits and the dot command in Vim: When you use Vim, you naturally start to think in terms of repeatable edits that you can then use the &amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt; command to repeat. But this has a side-effect in that Vim requires you to manually chunk your undo history. Emacs instead automatically chunks undos.&lt;br /&gt;
* One consequence of the modal editing is that I think Vim degrades gracefully to having worse keyboards/a less ergonomic setup in general ([https://youtu.be/SY8L-cj4x6k?t=3594 or big hands]). For example, I bought a fairly crappy external USB keyboard for $25 where if I don&amp;#039;t press the Ctrl key very firmly, sometimes it will not register. This hasn&amp;#039;t been a problem in most software, but &amp;#039;&amp;#039;has&amp;#039;&amp;#039; become a problem when I use Emacs because I need to hold down the Ctrl key a lot for navigating with Ctrl+p and Ctrl+n. In Vim, I don&amp;#039;t have this problem at all because Ctrl just isn&amp;#039;t a key I need to hold down for long periods; it&amp;#039;s something I momentarily hold down, just long enough to press another key. So I have never run into this problem when using Vim (or even Firefox or other software). Emacs is the editor, and really only software, that in some sense &amp;#039;&amp;#039;requires&amp;#039;&amp;#039; me to have a nice keyboard.&lt;br /&gt;
* Another consequence of modal editing (in particular, the fact that Vi decided to use the escape key as the modal switch to move out of insert and command-line modes) is that since escape is also use in terminal escape sequences, now there is a conflict in interpreting key sequences containing the escape key: is it the user switching out of insert mode and typing some normal-mode commands? Or is it the start of a terminal escape sequence (e.g. use of the arrow keys)? Because of this, Vim added options like ttimeout and ttimeoutlen, and tmux also has an option called escape-time. It also means that unlike in all other terminal applications, you cannot easily use alt-key bindings, and in particular you cannot do the esc-key alternative to send an alt-key binding. If Vim had chosen literally any other key to represent mode switching (such as Ctrl-c, or maybe Ctrl-z which is used in evil-mode on Emacs to toggle between Vim-mode and Emacs-mode), this would not have been a problem. Modern terminals like Kitty, and also Neovim, are finally fixing this so that you don&amp;#039;t have to ever think about this anymore. But there is still a sort of burden I feel from years of Vim use.&lt;br /&gt;
&lt;br /&gt;
==Unix as IDE vs Emacs as OS==&lt;br /&gt;
&lt;br /&gt;
Vim tries to just be a text editor, and tries to play nice with the other tools on your computer, using commands like &amp;lt;code&amp;gt;:!command&amp;lt;/code&amp;gt; (runs external command) or &amp;lt;code&amp;gt;:w !command&amp;lt;/code&amp;gt; (pipes text to external command via stdin) or &amp;lt;code&amp;gt;:r !command&amp;lt;/code&amp;gt; (reads from external command via stdout).&lt;br /&gt;
&lt;br /&gt;
===...with some exceptions===&lt;br /&gt;
&lt;br /&gt;
Vim has a built-in spellchecker, whereas Emacs doesn&amp;#039;t (it does come with flyspell, which works with an external spellchecker like hunspell or aspell). (Emacs comes with tetris, an RPN calculator, an email client, etc., but not a spell-checker!)&lt;br /&gt;
&lt;br /&gt;
==Session management: per project vs single instance==&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;right way&amp;quot; to use Vim is to have one instance of Vim open per &amp;quot;project&amp;quot;. Each Vim instance maintains its own current directory, so you can e.g. open files relative to that current directory.&lt;br /&gt;
&lt;br /&gt;
In Emacs, the expectation is that you will have a single Emacs instance open. Emacs itself doesn&amp;#039;t maintain its current directory, and instead all file-open actions are relative to the buffer&amp;#039;s directory.&lt;br /&gt;
&lt;br /&gt;
Vim can do the Emacs thing with :set autochdir, but this is disabled by default.&lt;br /&gt;
&lt;br /&gt;
See [https://nullprogram.com/blog/2017/08/22/ this blog post] for more details.&lt;br /&gt;
&lt;br /&gt;
==Line-based vs character-based==&lt;br /&gt;
&lt;br /&gt;
Vim comes from a lineage of line-based editors. Registers can be linewise or characterwise, which means that actions like pasting text can act on entire lines or on characters. Some commands, like :substitute or :global, only work linewise. This is even reflected in the motion to move up or down a line: by default, j and k move down or up by logical lines instead of screen lines. However, due to this lineage, Vim does not deal well with long lines of text. Recent version of Vim have :set smoothscroll, but this only partially works.&lt;br /&gt;
&lt;br /&gt;
Emacs is like most other text editors in that it has no concept of linewise. Ctrl-n and Ctrl-p move by screen-lines, not logical lines, which makes sense when you think of the buffer of text as a stream of characters rather than an array of lines.&lt;br /&gt;
&lt;br /&gt;
==Mappings: keystroke based vs function-based==&lt;br /&gt;
&lt;br /&gt;
In Vim, commands like &amp;quot;copy text&amp;quot; don&amp;#039;t have a &amp;quot;name&amp;quot;; they are simply the keystroke that is used to perform that action. So if you want to &amp;quot;program&amp;quot; Vim to repeat some action, such as when defining a mapping, you simply tell Vim which keystrokes you want to repeat.&lt;br /&gt;
&lt;br /&gt;
In Emacs, every keystroke, even entering a single character, has a function that is associated with it. Emacs is simply an interpreter that runs the function associated with the keystroke. You can always do Ctrl-h k followed by the keystroke to find which function is bound to that particular keystroke.&lt;br /&gt;
&lt;br /&gt;
I think that being keystroke-based is one of the reasons Vim is so conservative about default keybindings (even when they are terrible, like Ctrl-b to go to the beginning of the line in command-line mode, or Y to copy the entire line instead of copying to the end of the line), because if you change the default keybinding inside of the C source code, it actually breaks all user mappings and scripts that rely on replaying keystrokes. So then eventually Vim came up with defaults.vim, which is not implemented on the level of C, but instead implemented on the level of Vimscript. By implementing it in Vimscript, it functions like user configuration, so it doesn&amp;#039;t change what the original keybindings mean. But doing this also means now you have to reason about multiple levels, the &amp;quot;base layer C keybindings&amp;quot; vs the &amp;quot;default keybindings that you actually interact with&amp;quot;. And at that point you&amp;#039;ve kind of reinvented the thing that Emacs does.&lt;br /&gt;
&lt;br /&gt;
==Actions: commands vs keybindings==&lt;br /&gt;
&lt;br /&gt;
Vim often uses the command-line for even common actions, e.g. :w to save a file [https://www.reddit.com/r/vim/comments/267vrv/i_am_tim_pope_crafter_of_plugins_ama/chojzsb/]. Emacs relies more on keybindings, e.g. Ctrl-x Ctrl-s to save a file.&lt;br /&gt;
&lt;br /&gt;
But there are some exceptions. To open the file that the cursor is on, Vim has various keybindings, including &amp;lt;code&amp;gt;gf&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;gF&amp;lt;/code&amp;gt;, Ctrl-w f, etc., but Emacs only has M-x ffap.&lt;br /&gt;
&lt;br /&gt;
==Tree-based undo vs stack-based undo==&lt;br /&gt;
&lt;br /&gt;
==Multiple similar commands vs single repeated command==&lt;br /&gt;
&lt;br /&gt;
This one is a bit hard to explain, but there is a definite pattern where Vim prefers to give the user multiple similar commands, while Emacs prefers to give a single command that you can then repeat or use creatively. The best way to explain is to give a bunch of examples:&lt;br /&gt;
&lt;br /&gt;
* Changing the screen view relative to cursor: Vim gives you zz to scroll so as to leave the cursor at the center of the screen, zt to scroll and put the cursor at the top, and zb to scroll and put the cursor at the bottom. Emacs just gives you a single command, Ctrl-l, which when repeatedly pressed, will cycle between all three views.&lt;br /&gt;
* Moving cursor to top, middle, bottom: Vim gives you H to move cursor to the top of the screen, M to move to middle, and L to move to bottom. Emacs just gives you Alt-r, which will cycle between the three configurations.&lt;br /&gt;
* Indenting: The way TAB indenting works in Emacs is very distinctive. You press TAB and Emacs just indents the line to whatever it thinks is the right level. Vim&amp;#039;s TAB in insert mode just inserts a literal tab or spaces depending on the &amp;#039;expandtab&amp;#039; option. But Vim also gives you, in insert mode, Ctrl-f to do the Emacs-like thing, Ctrl-t to indent the current line, Ctrl-d to decrease the indent of the current line. And many more commands in normal mode.&lt;br /&gt;
* Folding: Vim gives you fine-grained commands like zo to open a fold, zc to close a fold, zR to globally reduce the fold level in the file, etc. Emacs as far as I know doesn&amp;#039;t have folding by default, but certain major modes like org-mode and markdown-mode do have folding, and in these, you simply press TAB to cycle the different folding levels, or Shift-TAB to do the cycling globally across the entire file.&lt;br /&gt;
* Vim gives you Y, D, C, to copy, delete, and change (respectively) until the end of the line. Emacs just gives you Ctrl-k, which it then expects you to creatively make use of (e.g. if you want to copy until the end of the line, you do Ctrl-k to delete until the end of the line, then Ctrl-/ to undo).&lt;br /&gt;
* Vim has / to search forward, ? to search backward, then n or N to repeat that search in the same direction or opposite direction. Emacs just has Ctrl-s and Ctrl-r to do the search forward or backward. If you want to repeat the search, you just keep pressing Ctrl-s.&lt;br /&gt;
* When you have multiple split windows, Vim has Ctrl-w followed by h, j, k, or l to move to that window. It also has Ctrl-w followed by w to keep cycling between the splits. It also has Ctrl-w followed by p to toggle between the two most recent splits. There are just a lot of fine-grained choices you can make. Emacs just gives you Ctrl-x o which cycles.&lt;br /&gt;
* Text formatting: Vim gives you two operators, gq and gw, which format text; gq moves the cursor to the end of the formatted text, while gw tries to keep the cursor where it was before the formatting. You can then combine these operators with any motion, e.g. gwip to format the current paragraph, gww to format the current line, gwib to format inside parentheses. Emacs just gives you Alt-q to format the paragraph. It is then up to you to creatively combine that with text selection; you can select some text and then do Alt-q to format just the text that is selected.&lt;br /&gt;
* Copy-pasting: Vim gives you named registers, so if you want to copy two different lines and remember both, you do something like &amp;lt;code&amp;gt;&amp;quot;ayy&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;quot;byy&amp;lt;/code&amp;gt;; then you can paste them with &amp;lt;code&amp;gt;&amp;quot;ap&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;quot;bp&amp;lt;/code&amp;gt;. In Emacs, you instead kill both lines, and then when you go to paste them, you first Ctrl-y to paste the most recent, and then you do Alt-y to cycle between the most recently killed text.&lt;br /&gt;
* Vim has j and k to move down and up by logical lines, and also has gj and gk to move down and up by screen-lines. Emacs only has Ctrl-n and Ctrl-p to move down and up by screen-lines. To move by logical lines, you need to do something creative like Ctrl-e Ctrl-f or Ctrl-a Ctrl-b, or just repeatedly press Ctrl-n or Ctrl-p. &lt;br /&gt;
&lt;br /&gt;
In general, I feel that Vim requires more mental energy to use (by forcing the user to pick the action more precisely, and by having the user plan ahead). You need to pick the specific action you wanted to perform. You need to think ahead and decide which registers to use. This also comes from Vim&amp;#039;s modal nature, but Vim gives you more decisions and a grammar, whereas Emacs gives you a way to quickly do the common thing. I think much of this may have been forced on the design of Vim by deciding to be keystroke-based, so that the only way to make some action available in normal mode was to assign some key to it. Whereas Emacs went more in the direction of being functions-first, and once you have functions, it is natural to pass arguments to the function to modify the behavior.&lt;br /&gt;
&lt;br /&gt;
==Word movement: consistent vs &amp;quot;do the common thing&amp;quot;==&lt;br /&gt;
&lt;br /&gt;
Vim&amp;#039;s word-based motions like w, b, and e always treat contiguous alphanumeric sequences as single words, and also treats contiguous symbols as single words. This leads to a very consistent word movement, which means you will never have to backtrack.&lt;br /&gt;
&lt;br /&gt;
Emacs does the thing that most other text editors do, which is that if the cursor is before/on a symbol, then moving forward by one word will not just jump to the end of the symbols, but will jump to the end of the alphanumeric sequence &amp;#039;&amp;#039;after&amp;#039;&amp;#039; the symbols. Emacs caters to the most common thing, and sometimes you need to backtrack.&lt;br /&gt;
&lt;br /&gt;
Suppose you have some text like: &amp;lt;code&amp;gt;Hello, world.&amp;lt;/code&amp;gt; and the cursor is past the final period. You want to add the word &amp;lt;code&amp;gt;there&amp;lt;/code&amp;gt; before the comma, to make it &amp;lt;code&amp;gt;Hello there, world.&amp;lt;/code&amp;gt; In Vim, you press b a few times to move backwards by word, until the cursor is on the comma, at which point you can go into insert mode to type the &amp;quot;there&amp;quot;. In Emacs, Alt-b will move the cursor back by word, but once the cursor is on the &amp;#039;w&amp;#039;, pressing Alt-b again will jump past the comma onto the &amp;#039;H&amp;#039; -- in other words, it overshoots. So then you need to backtrack by pressing Alt-f to move forward by word.&lt;br /&gt;
&lt;br /&gt;
==Scrolling: scrolloff vs scroll-into-view==&lt;br /&gt;
&lt;br /&gt;
In Vim, defaults.vim sets scrolloff=5, which means that when the cursor is at the edge of the window, it will always show 5 lines of context. You can never &amp;quot;touch&amp;quot; the very edge of the screen, because the screen will scroll when you try to move to the edge. (But due to Vim&amp;#039;s line-oriented heritage, this will scroll into view an entire logical line instead of just one visual line.)&lt;br /&gt;
&lt;br /&gt;
In Emacs, the default behavior is instead to jerk the screen to the center &amp;#039;&amp;#039;after&amp;#039;&amp;#039; you step off the edge.&lt;br /&gt;
&lt;br /&gt;
==Search and replace==&lt;br /&gt;
&lt;br /&gt;
Emacs automatically does all the case variants, e.g. if you search and replace foo → bar, it also does Foo → Bar, FOO → Bar, etc. Vim doesn&amp;#039;t do this.&lt;br /&gt;
&lt;br /&gt;
==Visual noise==&lt;br /&gt;
&lt;br /&gt;
Emacs has more visual noise, e.g. the line continuation markers, incremental search by default, highlighting of all search matches as you type, a status bar. Vim comes from an environment where terminals were very slow so it tries by default to not draw to the screen very much. This means fewer things flash on the screen as you do things -- quite monastic vibes.&lt;br /&gt;
&lt;br /&gt;
Of course, by modern standards of things like VS Code, Zed, JetBrains, etc., even Emacs will feel minimal! No line numbers, sidebar with a file tree, no minimap that shows a zoomed out view of the file, no tabs shown by default, no git gutter, no git blame next to every line as the cursor moves, no popups nagging you about updates or extensions to install, no breadcrumbs (path of nested scope at the top), no hover-over documentation.&lt;br /&gt;
&lt;br /&gt;
Both Vim and Emacs have prominent comment colors in their syntax highlighting by default (in Vim it&amp;#039;s blue, in Emacs it&amp;#039;s red), which I think says a lot. By making most things invisible but making comments stand out, it tells the user that comments are something worth paying attention to. They both come from a saner culture in which programmers were intelligent and comments meant something. Now modern editors have all this crap in your face, and not just that, they make comments &amp;#039;&amp;#039;grayed out&amp;#039;&amp;#039; so that they almost fade into the background (VS Code is the one exception, where its default colorscheme has green comments).&lt;br /&gt;
&lt;br /&gt;
==Prompting the user==&lt;br /&gt;
&lt;br /&gt;
For Vim, see [https://www.reddit.com/r/vim/comments/267vrv/i_am_tim_pope_crafter_of_plugins_ama/chojzsb/].&lt;br /&gt;
&lt;br /&gt;
Emacs often prompts the user.&lt;br /&gt;
&lt;br /&gt;
==Documentation: graph/linear vs tree==&lt;br /&gt;
&lt;br /&gt;
Vim uses a wiki-like help system, where you can click on links to read the sections. It also contains a linear book under :help user-manual. Emacs has a GNU-like hierarchical tree documentation system.&lt;br /&gt;
&lt;br /&gt;
Both have a way to look things up based on keystroke or command name though. Vim has a universal :help command, while Emacs has e.g. Ctrl-h k for keystrokes or Ctrl-h f for functions.&lt;br /&gt;
&lt;br /&gt;
==Selection endpoint==&lt;br /&gt;
&lt;br /&gt;
Vim includes the selection endpoint, whereas Emacs doesn&amp;#039;t. The need to make this decision comes from both editors originating on the terminal with block cursors, rather than the more modern I-beam cursors.&lt;br /&gt;
&lt;br /&gt;
[[Category:Design]]&lt;/div&gt;</summary>
		<author><name>Issa</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.issarice.com/index.php?title=Main_Page&amp;diff=2964</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.issarice.com/index.php?title=Main_Page&amp;diff=2964"/>
		<updated>2025-12-06T20:21:07Z</updated>

		<summary type="html">&lt;p&gt;Issa: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The main things that are going on here:&lt;br /&gt;
&lt;br /&gt;
* [[:Category:AI safety]] -- notes on AI safety strategy&lt;br /&gt;
* [[:Category:Spaced repetition]] -- detailing my approach to using spaced repetition software&lt;br /&gt;
* [[:Category:Learning]] -- pages about learning that aren&amp;#039;t about spaced repetition&lt;br /&gt;
* [[:Category:Design]] -- pages about UI/UX design&lt;br /&gt;
&lt;br /&gt;
For math, see [https://machinelearning.subwiki.org/wiki/User:IssaRice my ML Subwiki userspace pages].&lt;br /&gt;
&lt;br /&gt;
For more on learning, see [https://learning.subwiki.org/w/index.php?title=Special:Contributions&amp;amp;limit=500&amp;amp;contribs=user&amp;amp;target=Issa+Rice&amp;amp;newOnly=1 my page creations on the Learning Subwiki].&lt;/div&gt;</summary>
		<author><name>Issa</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.issarice.com/index.php?title=Plugins_as_search&amp;diff=2963</id>
		<title>Plugins as search</title>
		<link rel="alternate" type="text/html" href="https://wiki.issarice.com/index.php?title=Plugins_as_search&amp;diff=2963"/>
		<updated>2025-12-06T20:18:47Z</updated>

		<summary type="html">&lt;p&gt;Issa: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Similarly to how a programming language should strive to incorporate all useful features into itself, instead of making the user meta-program their way into a usable language, a PDF reader or any application should strive to just simply internalize all the useful features, instead of forcing users to script on features in predictably hacky ways. But how do you know which features are useful to incorporate?&lt;br /&gt;
&lt;br /&gt;
A designer of the program somehow &amp;quot;magically, creatively&amp;quot; comes up with a list of features to include in the program. Maybe they have experience with an existing program of the same type (e.g. if they are designing a new text editor, they probably have experience using an existing text editor), so they know what they are looking to add to their own program. But that only raises the question, how did the designer of the original program of that type come up with a list of features? And if you are designing a program, you probably are looking to include some &amp;#039;&amp;#039;new&amp;#039;&amp;#039; features that do not exist in any program. So how do you come up with those?&lt;br /&gt;
&lt;br /&gt;
I won&amp;#039;t answer that general &amp;quot;What is creativity?&amp;quot; question here. But I want to make the observation that this sort of thing probably, most of the time, happens &amp;#039;&amp;#039;incrementally&amp;#039;&amp;#039;, so that at any given moment, a given designer only comes up with one new feature, one thing to tweak, one aspect to change. (Of course, by the time a new piece of software ships, it might have many such features included within it, so that from the public&amp;#039;s point of view, it might seem revolutionary. I am here only talking about what the creative process looks like internally.)&lt;br /&gt;
&lt;br /&gt;
If we take this incremental view of creativity seriously, it becomes obvious that no single person has &amp;quot;all the answers&amp;quot; to design.&lt;br /&gt;
&lt;br /&gt;
[not quite sure how to connect the above to the below...]&lt;br /&gt;
&lt;br /&gt;
I&amp;#039;ve come to view plugins as one way of making the search process for features more parallelized. It would be &amp;quot;better&amp;quot; for the end-user-experience if all features were built into the main application from the start; this provides a smoother experience because plugins necessarily don&amp;#039;t have access to program internals etc., so can&amp;#039;t provide the features in a fully native way. Plugins are also often buggy because they don&amp;#039;t have the same level of quality control as the main application. But it is impossible to armchair your way into a good design for your software! There is just no way to know which features are useful without getting feedback. Some way to quickly hack together a proof of concept idea without having to mess with the internals and source code of the main program would be useful. (Imagine needing to dig into Vim&amp;#039;s C source code to be able to add a new feature!)&lt;br /&gt;
&lt;br /&gt;
Instead of the designer of the program having to come up with and implement all features, users of the program can script things onto the program. Seeing which plugins are popular among users provides evidence for which features are actually useful.&lt;br /&gt;
&lt;br /&gt;
It&amp;#039;s hard to develop things into the main application, and because it&amp;#039;s hard to experiment with trying out different features, plugins are the main way in which you can run experiments out in the wild, to figure out what users want/what&amp;#039;s popular, and then the main application can take the results of such experiments and implement the best ones. In other words, plugin make it easier to search the space of all possible improvements to make to the main application. So I mainly see plugins as this somewhat expensive way to get data on what works.&lt;br /&gt;
&lt;br /&gt;
People who praise the Helix editor for internalizing things like LSP, treesitter, etc., (but Helix doesn&amp;#039;t have a plugin system) are sort of missing the point here; like, yes, it would be better for the editor to come bundled with all the nice features that users might want, but the only reason Helix is even able to do this in the first place is that there was things like Vim and VS Code and so forth that had a plugin system that allowed for these things to come into existence to be played around with. Without that ability to easily search for what is useful, something like Helix just couldn&amp;#039;t even exist.&lt;br /&gt;
&lt;br /&gt;
[[Category:Design]]&lt;/div&gt;</summary>
		<author><name>Issa</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.issarice.com/index.php?title=Category:Design&amp;diff=2962</id>
		<title>Category:Design</title>
		<link rel="alternate" type="text/html" href="https://wiki.issarice.com/index.php?title=Category:Design&amp;diff=2962"/>
		<updated>2025-12-06T20:08:37Z</updated>

		<summary type="html">&lt;p&gt;Issa: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Pages about design, mostly design of software (in the UI/UX sense, not in the software architecture sense).&lt;/div&gt;</summary>
		<author><name>Issa</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.issarice.com/index.php?title=Plugins_as_search&amp;diff=2961</id>
		<title>Plugins as search</title>
		<link rel="alternate" type="text/html" href="https://wiki.issarice.com/index.php?title=Plugins_as_search&amp;diff=2961"/>
		<updated>2025-12-06T20:08:00Z</updated>

		<summary type="html">&lt;p&gt;Issa: Created page with &amp;quot;Similarly to how a programming language should strive to incorporate all useful features into itself, instead of making the user meta-program their way into a usable language,...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Similarly to how a programming language should strive to incorporate all useful features into itself, instead of making the user meta-program their way into a usable language, a PDF reader or any application should strive to just simply internalize all the useful features, instead of forcing users to script on features in predictably hacky ways. But how do you know which features are useful to incorporate?&lt;br /&gt;
&lt;br /&gt;
A designer of the program somehow &amp;quot;magically, creatively&amp;quot; comes up with a list of features to include in the program. Maybe they have experience with an existing program of the same type (e.g. if they are designing a new text editor, they probably have experience using an existing text editor), so they know what they are looking to add to their own program. But that only raises the question, how did the designer of the original program of that type come up with a list of features? And if you are designing a program, you probably are looking to include some &amp;#039;&amp;#039;new&amp;#039;&amp;#039; features that do not exist in any program. So how do you come up with those?&lt;br /&gt;
&lt;br /&gt;
I won&amp;#039;t answer that general &amp;quot;What is creativity?&amp;quot; question here. But I want to make the observation that this sort of thing probably, most of the time, happens &amp;#039;&amp;#039;incrementally&amp;#039;&amp;#039;, so that at any given moment, a given designer only comes up with one new feature, one thing to tweak, one aspect to change. (Of course, by the time a new piece of software ships, it might have many such features included within it, so that from the public&amp;#039;s point of view, it might seem revolutionary. I am here only talking about what the creative process looks like internally.)&lt;br /&gt;
&lt;br /&gt;
If we take this incremental view of creativity seriously, it becomes obvious that no single person has &amp;quot;all the answers&amp;quot; to design.&lt;br /&gt;
&lt;br /&gt;
[not quite sure how to connect the above to the below...]&lt;br /&gt;
&lt;br /&gt;
I&amp;#039;ve come to view plugins as one way of making the search process for features more parallelized. Instead of the designer of the program having to come up with and implement all features, users of the program can script things onto the program. Seeing which plugins are popular among users provides evidence for which features are actually useful.&lt;br /&gt;
&lt;br /&gt;
It&amp;#039;s hard to develop things into the main application, and because it&amp;#039;s hard to experiment with trying out different features, plugins are the main way in which you can run experiments out in the wild, to figure out what users want/what&amp;#039;s popular, and then the main application can take the results of such experiments and implement the best ones. In other words, plugin make it easier to search the space of all possible improvements to make to the main application. So I mainly see plugins as this somewhat expensive way to get data on what works.&lt;br /&gt;
&lt;br /&gt;
People who praise the Helix editor for internalizing things like LSP, treesitter, etc., (but Helix doesn&amp;#039;t have a plugin system) are sort of missing the point here; like, yes, it would be better for the editor to come bundled with all the nice features that users might want, but the only reason Helix is even able to do this in the first place is that there was things like Vim and VS Code and so forth that had a plugin system that allowed for these things to come into existence to be played around with. Without that ability to easily search for what is useful, something like Helix just couldn&amp;#039;t even exist.&lt;br /&gt;
&lt;br /&gt;
[[Category:Design]]&lt;/div&gt;</summary>
		<author><name>Issa</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.issarice.com/index.php?title=Different_types_of_file_opening_tasks&amp;diff=2960</id>
		<title>Different types of file opening tasks</title>
		<link rel="alternate" type="text/html" href="https://wiki.issarice.com/index.php?title=Different_types_of_file_opening_tasks&amp;diff=2960"/>
		<updated>2025-12-06T19:46:57Z</updated>

		<summary type="html">&lt;p&gt;Issa: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# I have a specific path/file I want to open, and I know exactly where it is. Here, I just want to type it out, possibly with some minimal tab-completions so I don&amp;#039;t have to type out the whole path. It&amp;#039;s also fine if there are some other kinds of &amp;quot;help&amp;quot; the computer provides, like highlighting in red the part of the path that doesn&amp;#039;t exist. But importantly, I &amp;#039;&amp;#039;don&amp;#039;t&amp;#039;&amp;#039; want stuff like fuzzy search or for the program to recursively search my whole filesystem or other annoying things like this. This is why fzf feels so bad to use for me (for file searching; I love it for shell history search), because a lot of the time I &amp;#039;&amp;#039;know&amp;#039;&amp;#039; where the thing is, but fzf wants to search my whole hard drive looking in places that I don&amp;#039;t care about, and then it often doesn&amp;#039;t even find the file I want because other &amp;quot;matches&amp;quot; have filled the results list. Emacs&amp;#039;s ido-mode is a good example of a pretty good UI for this. File Pilot also has a &amp;quot;filter&amp;quot; search mode that does a pretty good job of this.&lt;br /&gt;
# I have already opened the thing before, or the file is nearby to my current file, or I&amp;#039;ve added my &amp;quot;library&amp;quot; or whatever to tell the program where to find files, and then I want to just search &amp;#039;&amp;#039;by the filename&amp;#039;&amp;#039;, very quickly. This is what stuff like fzf, Neovim&amp;#039;s telescope plugin, SumatraPDF&amp;#039;s Ctrl-k, are coming from. You know you only need to search a small space, a very limited region, so you want fuzzy find, you want things to just automagically show up as you&amp;#039;re typing. But importantly, this only works well if you&amp;#039;re searching a small space! If you&amp;#039;re searching your whole hard drive, it doesn&amp;#039;t work well. Vim natively doesn&amp;#039;t have this, which I think is why the plugins like telescope and whatever focus on this use-case, even though in my opinion it&amp;#039;s not the most important one.&lt;br /&gt;
# You only roughly know where the file is, or maybe not at all, or maybe you aren&amp;#039;t even sure if the file exists on your system, so you just want to recursively search from some starting &amp;quot;root&amp;quot; location, and it&amp;#039;s ok if the search takes a little longer, because you&amp;#039;re not doing it on every keystroke, you&amp;#039;re just firing off this search process as a widely cast net to see what comes up. This is Vim&amp;#039;s &amp;lt;code&amp;gt;:e **/*&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;:find&amp;lt;/code&amp;gt; command with &amp;lt;code&amp;gt;path+=**&amp;lt;/code&amp;gt; and stuff is all about. Gnome&amp;#039;s file search thing works pretty well, I think. But it can only do this kind of recursive search. fzf doesn&amp;#039;t work well for this use-case either, even though I think it&amp;#039;s trying to, because it does fuzzy search by default, whereas for this use-case you probably want case-insensitive substring match by default. Also stuff like Google search is kind of in this use-case as well, even though there you&amp;#039;re not searching for a &amp;#039;&amp;#039;file&amp;#039;&amp;#039;, rather some websites (but a URL is kind of like a file anyway).&lt;br /&gt;
&lt;br /&gt;
And I want to be able to have my program just ... seamlessly be able to transition or somehow magically guess which one the user wants? Or at least be able to have all three through separate keybindings. Most programs can only do one or two of these things, so when I want to do the third thing it feels frustrating.&lt;br /&gt;
&lt;br /&gt;
[[Category:Design]]&lt;/div&gt;</summary>
		<author><name>Issa</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.issarice.com/index.php?title=Different_types_of_file_opening_tasks&amp;diff=2959</id>
		<title>Different types of file opening tasks</title>
		<link rel="alternate" type="text/html" href="https://wiki.issarice.com/index.php?title=Different_types_of_file_opening_tasks&amp;diff=2959"/>
		<updated>2025-12-06T19:45:54Z</updated>

		<summary type="html">&lt;p&gt;Issa: Created page with &amp;quot;   # I have a specific path/file I want to open, and I know exactly where it is. Here, I just want to type it out, possibly with some minimal tab-completions so I don&amp;#039;t have t...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# I have a specific path/file I want to open, and I know exactly where it is. Here, I just want to type it out, possibly with some minimal tab-completions so I don&amp;#039;t have to type out the whole path. It&amp;#039;s also fine if there are some other kinds of &amp;quot;help&amp;quot; the computer provides, like highlighting in red the part of the path that doesn&amp;#039;t exist. But importantly, I &amp;#039;&amp;#039;don&amp;#039;t&amp;#039;&amp;#039; want stuff like fuzzy search or for the program to recursively search my whole filesystem or other annoying things like this. This is why fzf feels so bad to use for me (for file searching; I love it for shell history search), because a lot of the time I &amp;#039;&amp;#039;know&amp;#039;&amp;#039; where the thing is, but fzf wants to search my whole hard drive looking in places that I don&amp;#039;t care about, and then it often doesn&amp;#039;t even find the file I want because other &amp;quot;matches&amp;quot; have filled the results list. Emacs&amp;#039;s ido-mode is a good example of a pretty good UI for this. File Pilot also has a &amp;quot;filter&amp;quot; search mode that does a pretty good job of this.&lt;br /&gt;
# I have already opened the thing before, or the file is nearby to my current file, or I&amp;#039;ve added my &amp;quot;library&amp;quot; or whatever to tell the program where to find files, and then I want to just search &amp;#039;&amp;#039;by the filename&amp;#039;&amp;#039;, very quickly. This is what stuff like fzf, Neovim&amp;#039;s telescope plugin, SumatraPDF&amp;#039;s Ctrl-k, are coming from. You know you only need to search a small space, a very limited region, so you want fuzzy find, you want things to just automagically show up as you&amp;#039;re typing. But importantly, this only works well if you&amp;#039;re searching a small space! If you&amp;#039;re searching your whole hard drive, it doesn&amp;#039;t work well. Vim natively doesn&amp;#039;t have this, which I think is why the plugins like telescope and whatever focus on this use-case, even though in my opinion it&amp;#039;s not the most important one.&lt;br /&gt;
# You only roughly know where the file is, or maybe not at all, or maybe you aren&amp;#039;t even sure if the file exists on your system, so you just want to recursively search from some starting &amp;quot;root&amp;quot; location, and it&amp;#039;s ok if the search takes a little longer, because you&amp;#039;re not doing it on every keystroke, you&amp;#039;re just firing off this search process as a widely cast net to see what comes up. This is Vim&amp;#039;s &amp;lt;code&amp;gt;:e **/*&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;:find&amp;lt;/code&amp;gt; command with &amp;lt;code&amp;gt;path+=**&amp;lt;/code&amp;gt; and stuff is all about. Gnome&amp;#039;s file search thing works pretty well, I think. But it can only do this kind of recursive search. fzf doesn&amp;#039;t work well for this use-case either, even though I think it&amp;#039;s trying to, because it does fuzzy search by default, whereas for this use-case you probably want case-insensitive substring match by default. Also stuff like Google search is kind of in this use-case as well, even though there you&amp;#039;re not searching for a &amp;#039;&amp;#039;file&amp;#039;&amp;#039;, rather some websites (but a URL is kind of like a file anyway).&lt;br /&gt;
&lt;br /&gt;
[[Category:Design]]&lt;/div&gt;</summary>
		<author><name>Issa</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.issarice.com/index.php?title=Category:Design&amp;diff=2958</id>
		<title>Category:Design</title>
		<link rel="alternate" type="text/html" href="https://wiki.issarice.com/index.php?title=Category:Design&amp;diff=2958"/>
		<updated>2025-12-06T19:37:03Z</updated>

		<summary type="html">&lt;p&gt;Issa: Created page with &amp;quot;Pages about design, mostly design of software.&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Pages about design, mostly design of software.&lt;/div&gt;</summary>
		<author><name>Issa</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.issarice.com/index.php?title=Design_philosophies_of_Vim_vs_Emacs&amp;diff=2957</id>
		<title>Design philosophies of Vim vs Emacs</title>
		<link rel="alternate" type="text/html" href="https://wiki.issarice.com/index.php?title=Design_philosophies_of_Vim_vs_Emacs&amp;diff=2957"/>
		<updated>2025-12-06T19:36:32Z</updated>

		<summary type="html">&lt;p&gt;Issa: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
==Modal vs chording==&lt;br /&gt;
&lt;br /&gt;
* Atomic edits and the dot command in Vim: When you use Vim, you naturally start to think in terms of repeatable edits that you can then use the &amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt; command to repeat. But this has a side-effect in that Vim requires you to manually chunk your undo history. Emacs instead automatically chunks undos.&lt;br /&gt;
* One consequence of the modal editing is that I think Vim degrades gracefully to having worse keyboards/a less ergonomic setup in general ([https://youtu.be/SY8L-cj4x6k?t=3594 or big hands]). For example, I bought a fairly crappy external USB keyboard for $25 where if I don&amp;#039;t press the Ctrl key very firmly, sometimes it will not register. This hasn&amp;#039;t been a problem in most software, but &amp;#039;&amp;#039;has&amp;#039;&amp;#039; become a problem when I use Emacs because I need to hold down the Ctrl key a lot for navigating with Ctrl+p and Ctrl+n. In Vim, I don&amp;#039;t have this problem at all because Ctrl just isn&amp;#039;t a key I need to hold down for long periods; it&amp;#039;s something I momentarily hold down, just long enough to press another key. So I have never run into this problem when using Vim (or even Firefox or other software). Emacs is the editor, and really only software, that in some sense &amp;#039;&amp;#039;requires&amp;#039;&amp;#039; me to have a nice keyboard.&lt;br /&gt;
&lt;br /&gt;
==Unix as IDE vs Emacs as OS==&lt;br /&gt;
&lt;br /&gt;
Vim tries to just be a text editor, and tries to play nice with the other tools on your computer, using commands like &amp;lt;code&amp;gt;:!command&amp;lt;/code&amp;gt; (runs external command) or &amp;lt;code&amp;gt;:w !command&amp;lt;/code&amp;gt; (pipes text to external command via stdin) or &amp;lt;code&amp;gt;:r !command&amp;lt;/code&amp;gt; (reads from external command via stdout).&lt;br /&gt;
&lt;br /&gt;
===...with some exceptions===&lt;br /&gt;
&lt;br /&gt;
Vim has a built-in spellchecker, whereas Emacs doesn&amp;#039;t (it does come with flyspell, which works with an external spellchecker like hunspell or aspell). (Emacs comes with tetris, an RPN calculator, an email client, etc., but not a spell-checker!)&lt;br /&gt;
&lt;br /&gt;
==Session management: per project vs single instance==&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;right way&amp;quot; to use Vim is to have one instance of Vim open per &amp;quot;project&amp;quot;. Each Vim instance maintains its own current directory, so you can e.g. open files relative to that current directory.&lt;br /&gt;
&lt;br /&gt;
In Emacs, the expectation is that you will have a single Emacs instance open. Emacs itself doesn&amp;#039;t maintain its current directory, and instead all file-open actions are relative to the buffer&amp;#039;s directory.&lt;br /&gt;
&lt;br /&gt;
Vim can do the Emacs thing with :set autochdir, but this is disabled by default.&lt;br /&gt;
&lt;br /&gt;
See [https://nullprogram.com/blog/2017/08/22/ this blog post] for more details.&lt;br /&gt;
&lt;br /&gt;
==Line-based vs character-based==&lt;br /&gt;
&lt;br /&gt;
Vim comes from a lineage of line-based editors. Registers can be linewise or characterwise, which means that actions like pasting text can act on entire lines or on characters. Some commands, like :substitute or :global, only work linewise. This is even reflected in the motion to move up or down a line: by default, j and k move down or up by logical lines instead of screen lines. However, due to this lineage, Vim does not deal well with long lines of text. Recent version of Vim have :set smoothscroll, but this only partially works.&lt;br /&gt;
&lt;br /&gt;
Emacs is like most other text editors in that it has no concept of linewise. Ctrl-n and Ctrl-p move by screen-lines, not logical lines, which makes sense when you think of the buffer of text as a stream of characters rather than an array of lines.&lt;br /&gt;
&lt;br /&gt;
==Mappings: keystroke based vs function-based==&lt;br /&gt;
&lt;br /&gt;
In Vim, commands like &amp;quot;copy text&amp;quot; don&amp;#039;t have a &amp;quot;name&amp;quot;; they are simply the keystroke that is used to perform that action. So if you want to &amp;quot;program&amp;quot; Vim to repeat some action, such as when defining a mapping, you simply tell Vim which keystrokes you want to repeat.&lt;br /&gt;
&lt;br /&gt;
In Emacs, every keystroke, even entering a single character, has a function that is associated with it. Emacs is simply an interpreter that runs the function associated with the keystroke. You can always do Ctrl-h k followed by the keystroke to find which function is bound to that particular keystroke.&lt;br /&gt;
&lt;br /&gt;
I think that being keystroke-based is one of the reasons Vim is so conservative about default keybindings (even when they are terrible, like Ctrl-b to go to the beginning of the line in command-line mode, or Y to copy the entire line instead of copying to the end of the line), because if you change the default keybinding inside of the C source code, it actually breaks all user mappings and scripts that rely on replaying keystrokes. So then eventually Vim came up with defaults.vim, which is not implemented on the level of C, but instead implemented on the level of Vimscript. By implementing it in Vimscript, it functions like user configuration, so it doesn&amp;#039;t change what the original keybindings mean. But doing this also means now you have to reason about multiple levels, the &amp;quot;base layer C keybindings&amp;quot; vs the &amp;quot;default keybindings that you actually interact with&amp;quot;. And at that point you&amp;#039;ve kind of reinvented the thing that Emacs does.&lt;br /&gt;
&lt;br /&gt;
==Actions: commands vs keybindings==&lt;br /&gt;
&lt;br /&gt;
Vim often uses the command-line for even common actions, e.g. :w to save a file [https://www.reddit.com/r/vim/comments/267vrv/i_am_tim_pope_crafter_of_plugins_ama/chojzsb/]. Emacs relies more on keybindings, e.g. Ctrl-x Ctrl-s to save a file.&lt;br /&gt;
&lt;br /&gt;
But there are some exceptions. To open the file that the cursor is on, Vim has various keybindings, including &amp;lt;code&amp;gt;gf&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;gF&amp;lt;/code&amp;gt;, Ctrl-w f, etc., but Emacs only has M-x ffap.&lt;br /&gt;
&lt;br /&gt;
==Tree-based undo vs stack-based undo==&lt;br /&gt;
&lt;br /&gt;
==Multiple similar commands vs single repeated command==&lt;br /&gt;
&lt;br /&gt;
This one is a bit hard to explain, but there is a definite pattern where Vim prefers to give the user multiple similar commands, while Emacs prefers to give a single command that you can then repeat or use creatively. The best way to explain is to give a bunch of examples:&lt;br /&gt;
&lt;br /&gt;
* Changing the screen view relative to cursor: Vim gives you zz to scroll so as to leave the cursor at the center of the screen, zt to scroll and put the cursor at the top, and zb to scroll and put the cursor at the bottom. Emacs just gives you a single command, Ctrl-l, which when repeatedly pressed, will cycle between all three views.&lt;br /&gt;
* Moving cursor to top, middle, bottom: Vim gives you H to move cursor to the top of the screen, M to move to middle, and L to move to bottom. Emacs just gives you Alt-r, which will cycle between the three configurations.&lt;br /&gt;
* Indenting: The way TAB indenting works in Emacs is very distinctive. You press TAB and Emacs just indents the line to whatever it thinks is the right level. Vim&amp;#039;s TAB in insert mode just inserts a literal tab or spaces depending on the &amp;#039;expandtab&amp;#039; option. But Vim also gives you, in insert mode, Ctrl-f to do the Emacs-like thing, Ctrl-t to indent the current line, Ctrl-d to decrease the indent of the current line. And many more commands in normal mode.&lt;br /&gt;
* Folding: Vim gives you fine-grained commands like zo to open a fold, zc to close a fold, zR to globally reduce the fold level in the file, etc. Emacs as far as I know doesn&amp;#039;t have folding by default, but certain major modes like org-mode and markdown-mode do have folding, and in these, you simply press TAB to cycle the different folding levels, or Shift-TAB to do the cycling globally across the entire file.&lt;br /&gt;
* Vim gives you Y, D, C, to copy, delete, and change (respectively) until the end of the line. Emacs just gives you Ctrl-k, which it then expects you to creatively make use of (e.g. if you want to copy until the end of the line, you do Ctrl-k to delete until the end of the line, then Ctrl-/ to undo).&lt;br /&gt;
* Vim has / to search forward, ? to search backward, then n or N to repeat that search in the same direction or opposite direction. Emacs just has Ctrl-s and Ctrl-r to do the search forward or backward. If you want to repeat the search, you just keep pressing Ctrl-s.&lt;br /&gt;
* When you have multiple split windows, Vim has Ctrl-w followed by h, j, k, or l to move to that window. It also has Ctrl-w followed by w to keep cycling between the splits. It also has Ctrl-w followed by p to toggle between the two most recent splits. There are just a lot of fine-grained choices you can make. Emacs just gives you Ctrl-x o which cycles.&lt;br /&gt;
* Text formatting: Vim gives you two operators, gq and gw, which format text; gq moves the cursor to the end of the formatted text, while gw tries to keep the cursor where it was before the formatting. You can then combine these operators with any motion, e.g. gwip to format the current paragraph, gww to format the current line, gwib to format inside parentheses. Emacs just gives you Alt-q to format the paragraph. It is then up to you to creatively combine that with text selection; you can select some text and then do Alt-q to format just the text that is selected.&lt;br /&gt;
* Copy-pasting: Vim gives you named registers, so if you want to copy two different lines and remember both, you do something like &amp;lt;code&amp;gt;&amp;quot;ayy&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;quot;byy&amp;lt;/code&amp;gt;; then you can paste them with &amp;lt;code&amp;gt;&amp;quot;ap&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;quot;bp&amp;lt;/code&amp;gt;. In Emacs, you instead kill both lines, and then when you go to paste them, you first Ctrl-y to paste the most recent, and then you do Alt-y to cycle between the most recently killed text.&lt;br /&gt;
* Vim has j and k to move down and up by logical lines, and also has gj and gk to move down and up by screen-lines. Emacs only has Ctrl-n and Ctrl-p to move down and up by screen-lines. To move by logical lines, you need to do something creative like Ctrl-e Ctrl-f or Ctrl-a Ctrl-b, or just repeatedly press Ctrl-n or Ctrl-p. &lt;br /&gt;
&lt;br /&gt;
In general, I feel that Vim requires more mental energy to use (by forcing the user to pick the action more precisely, and by having the user plan ahead). You need to pick the specific action you wanted to perform. You need to think ahead and decide which registers to use. This also comes from Vim&amp;#039;s modal nature, but Vim gives you more decisions and a grammar, whereas Emacs gives you a way to quickly do the common thing. I think much of this may have been forced on the design of Vim by deciding to be keystroke-based, so that the only way to make some action available in normal mode was to assign some key to it. Whereas Emacs went more in the direction of being functions-first, and once you have functions, it is natural to pass arguments to the function to modify the behavior.&lt;br /&gt;
&lt;br /&gt;
==Word movement: consistent vs &amp;quot;do the common thing&amp;quot;==&lt;br /&gt;
&lt;br /&gt;
Vim&amp;#039;s word-based motions like w, b, and e always treat contiguous alphanumeric sequences as single words, and also treats contiguous symbols as single words. This leads to a very consistent word movement, which means you will never have to backtrack.&lt;br /&gt;
&lt;br /&gt;
Emacs does the thing that most other text editors do, which is that if the cursor is before/on a symbol, then moving forward by one word will not just jump to the end of the symbols, but will jump to the end of the alphanumeric sequence &amp;#039;&amp;#039;after&amp;#039;&amp;#039; the symbols. Emacs caters to the most common thing, and sometimes you need to backtrack.&lt;br /&gt;
&lt;br /&gt;
Suppose you have some text like: &amp;lt;code&amp;gt;Hello, world.&amp;lt;/code&amp;gt; and the cursor is past the final period. You want to add the word &amp;lt;code&amp;gt;there&amp;lt;/code&amp;gt; before the comma, to make it &amp;lt;code&amp;gt;Hello there, world.&amp;lt;/code&amp;gt; In Vim, you press b a few times to move backwards by word, until the cursor is on the comma, at which point you can go into insert mode to type the &amp;quot;there&amp;quot;. In Emacs, Alt-b will move the cursor back by word, but once the cursor is on the &amp;#039;w&amp;#039;, pressing Alt-b again will jump past the comma onto the &amp;#039;H&amp;#039; -- in other words, it overshoots. So then you need to backtrack by pressing Alt-f to move forward by word.&lt;br /&gt;
&lt;br /&gt;
==Scrolling: scrolloff vs scroll-into-view==&lt;br /&gt;
&lt;br /&gt;
In Vim, defaults.vim sets scrolloff=5, which means that when the cursor is at the edge of the window, it will always show 5 lines of context. You can never &amp;quot;touch&amp;quot; the very edge of the screen, because the screen will scroll when you try to move to the edge. (But due to Vim&amp;#039;s line-oriented heritage, this will scroll into view an entire logical line instead of just one visual line.)&lt;br /&gt;
&lt;br /&gt;
In Emacs, the default behavior is instead to jerk the screen to the center &amp;#039;&amp;#039;after&amp;#039;&amp;#039; you step off the edge.&lt;br /&gt;
&lt;br /&gt;
==Search and replace==&lt;br /&gt;
&lt;br /&gt;
Emacs automatically does all the case variants, e.g. if you search and replace foo → bar, it also does Foo → Bar, FOO → Bar, etc. Vim doesn&amp;#039;t do this.&lt;br /&gt;
&lt;br /&gt;
==Visual noise==&lt;br /&gt;
&lt;br /&gt;
Emacs has more visual noise, e.g. the line continuation markers, incremental search by default, highlighting of all search matches as you type, a status bar. Vim comes from an environment where terminals were very slow so it tries by default to not draw to the screen very much. This means fewer things flash on the screen as you do things -- quite monastic vibes.&lt;br /&gt;
&lt;br /&gt;
Of course, by modern standards of things like VS Code, Zed, JetBrains, etc., even Emacs will feel minimal! No line numbers, sidebar with a file tree, no minimap that shows a zoomed out view of the file, no tabs shown by default, no git gutter, no git blame next to every line as the cursor moves, no popups nagging you about updates or extensions to install, no breadcrumbs (path of nested scope at the top), no hover-over documentation.&lt;br /&gt;
&lt;br /&gt;
Both Vim and Emacs have prominent comment colors in their syntax highlighting by default (in Vim it&amp;#039;s blue, in Emacs it&amp;#039;s red), which I think says a lot. By making most things invisible but making comments stand out, it tells the user that comments are something worth paying attention to. They both come from a saner culture in which programmers were intelligent and comments meant something. Now modern editors have all this crap in your face, and not just that, they make comments &amp;#039;&amp;#039;grayed out&amp;#039;&amp;#039; so that they almost fade into the background (VS Code is the one exception, where its default colorscheme has green comments).&lt;br /&gt;
&lt;br /&gt;
==Prompting the user==&lt;br /&gt;
&lt;br /&gt;
For Vim, see [https://www.reddit.com/r/vim/comments/267vrv/i_am_tim_pope_crafter_of_plugins_ama/chojzsb/].&lt;br /&gt;
&lt;br /&gt;
Emacs often prompts the user.&lt;br /&gt;
&lt;br /&gt;
==Documentation: graph/linear vs tree==&lt;br /&gt;
&lt;br /&gt;
Vim uses a wiki-like help system, where you can click on links to read the sections. It also contains a linear book under :help user-manual. Emacs has a GNU-like hierarchical tree documentation system.&lt;br /&gt;
&lt;br /&gt;
Both have a way to look things up based on keystroke or command name though. Vim has a universal :help command, while Emacs has e.g. Ctrl-h k for keystrokes or Ctrl-h f for functions.&lt;br /&gt;
&lt;br /&gt;
==Selection endpoint==&lt;br /&gt;
&lt;br /&gt;
Vim includes the selection endpoint, whereas Emacs doesn&amp;#039;t. The need to make this decision comes from both editors originating on the terminal with block cursors, rather than the more modern I-beam cursors.&lt;br /&gt;
&lt;br /&gt;
[[Category:Design]]&lt;/div&gt;</summary>
		<author><name>Issa</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.issarice.com/index.php?title=Design_philosophies_of_Vim_vs_Emacs&amp;diff=2956</id>
		<title>Design philosophies of Vim vs Emacs</title>
		<link rel="alternate" type="text/html" href="https://wiki.issarice.com/index.php?title=Design_philosophies_of_Vim_vs_Emacs&amp;diff=2956"/>
		<updated>2025-12-04T21:29:40Z</updated>

		<summary type="html">&lt;p&gt;Issa: /* Modal vs chording */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
==Modal vs chording==&lt;br /&gt;
&lt;br /&gt;
* Atomic edits and the dot command in Vim: When you use Vim, you naturally start to think in terms of repeatable edits that you can then use the &amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt; command to repeat. But this has a side-effect in that Vim requires you to manually chunk your undo history. Emacs instead automatically chunks undos.&lt;br /&gt;
* One consequence of the modal editing is that I think Vim degrades gracefully to having worse keyboards/a less ergonomic setup in general ([https://youtu.be/SY8L-cj4x6k?t=3594 or big hands]). For example, I bought a fairly crappy external USB keyboard for $25 where if I don&amp;#039;t press the Ctrl key very firmly, sometimes it will not register. This hasn&amp;#039;t been a problem in most software, but &amp;#039;&amp;#039;has&amp;#039;&amp;#039; become a problem when I use Emacs because I need to hold down the Ctrl key a lot for navigating with Ctrl+p and Ctrl+n. In Vim, I don&amp;#039;t have this problem at all because Ctrl just isn&amp;#039;t a key I need to hold down for long periods; it&amp;#039;s something I momentarily hold down, just long enough to press another key. So I have never run into this problem when using Vim (or even Firefox or other software). Emacs is the editor, and really only software, that in some sense &amp;#039;&amp;#039;requires&amp;#039;&amp;#039; me to have a nice keyboard.&lt;br /&gt;
&lt;br /&gt;
==Unix as IDE vs Emacs as OS==&lt;br /&gt;
&lt;br /&gt;
Vim tries to just be a text editor, and tries to play nice with the other tools on your computer, using commands like &amp;lt;code&amp;gt;:!command&amp;lt;/code&amp;gt; (runs external command) or &amp;lt;code&amp;gt;:w !command&amp;lt;/code&amp;gt; (pipes text to external command via stdin) or &amp;lt;code&amp;gt;:r !command&amp;lt;/code&amp;gt; (reads from external command via stdout).&lt;br /&gt;
&lt;br /&gt;
===...with some exceptions===&lt;br /&gt;
&lt;br /&gt;
Vim has a built-in spellchecker, whereas Emacs doesn&amp;#039;t (it does come with flyspell, which works with an external spellchecker like hunspell or aspell). (Emacs comes with tetris, an RPN calculator, an email client, etc., but not a spell-checker!)&lt;br /&gt;
&lt;br /&gt;
==Session management: per project vs single instance==&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;right way&amp;quot; to use Vim is to have one instance of Vim open per &amp;quot;project&amp;quot;. Each Vim instance maintains its own current directory, so you can e.g. open files relative to that current directory.&lt;br /&gt;
&lt;br /&gt;
In Emacs, the expectation is that you will have a single Emacs instance open. Emacs itself doesn&amp;#039;t maintain its current directory, and instead all file-open actions are relative to the buffer&amp;#039;s directory.&lt;br /&gt;
&lt;br /&gt;
Vim can do the Emacs thing with :set autochdir, but this is disabled by default.&lt;br /&gt;
&lt;br /&gt;
See [https://nullprogram.com/blog/2017/08/22/ this blog post] for more details.&lt;br /&gt;
&lt;br /&gt;
==Line-based vs character-based==&lt;br /&gt;
&lt;br /&gt;
Vim comes from a lineage of line-based editors. Registers can be linewise or characterwise, which means that actions like pasting text can act on entire lines or on characters. Some commands, like :substitute or :global, only work linewise. This is even reflected in the motion to move up or down a line: by default, j and k move down or up by logical lines instead of screen lines. However, due to this lineage, Vim does not deal well with long lines of text. Recent version of Vim have :set smoothscroll, but this only partially works.&lt;br /&gt;
&lt;br /&gt;
Emacs is like most other text editors in that it has no concept of linewise. Ctrl-n and Ctrl-p move by screen-lines, not logical lines, which makes sense when you think of the buffer of text as a stream of characters rather than an array of lines.&lt;br /&gt;
&lt;br /&gt;
==Mappings: keystroke based vs function-based==&lt;br /&gt;
&lt;br /&gt;
In Vim, commands like &amp;quot;copy text&amp;quot; don&amp;#039;t have a &amp;quot;name&amp;quot;; they are simply the keystroke that is used to perform that action. So if you want to &amp;quot;program&amp;quot; Vim to repeat some action, such as when defining a mapping, you simply tell Vim which keystrokes you want to repeat.&lt;br /&gt;
&lt;br /&gt;
In Emacs, every keystroke, even entering a single character, has a function that is associated with it. Emacs is simply an interpreter that runs the function associated with the keystroke. You can always do Ctrl-h k followed by the keystroke to find which function is bound to that particular keystroke.&lt;br /&gt;
&lt;br /&gt;
I think that being keystroke-based is one of the reasons Vim is so conservative about default keybindings (even when they are terrible, like Ctrl-b to go to the beginning of the line in command-line mode, or Y to copy the entire line instead of copying to the end of the line), because if you change the default keybinding inside of the C source code, it actually breaks all user mappings and scripts that rely on replaying keystrokes. So then eventually Vim came up with defaults.vim, which is not implemented on the level of C, but instead implemented on the level of Vimscript. By implementing it in Vimscript, it functions like user configuration, so it doesn&amp;#039;t change what the original keybindings mean. But doing this also means now you have to reason about multiple levels, the &amp;quot;base layer C keybindings&amp;quot; vs the &amp;quot;default keybindings that you actually interact with&amp;quot;. And at that point you&amp;#039;ve kind of reinvented the thing that Emacs does.&lt;br /&gt;
&lt;br /&gt;
==Actions: commands vs keybindings==&lt;br /&gt;
&lt;br /&gt;
Vim often uses the command-line for even common actions, e.g. :w to save a file [https://www.reddit.com/r/vim/comments/267vrv/i_am_tim_pope_crafter_of_plugins_ama/chojzsb/]. Emacs relies more on keybindings, e.g. Ctrl-x Ctrl-s to save a file.&lt;br /&gt;
&lt;br /&gt;
But there are some exceptions. To open the file that the cursor is on, Vim has various keybindings, including &amp;lt;code&amp;gt;gf&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;gF&amp;lt;/code&amp;gt;, Ctrl-w f, etc., but Emacs only has M-x ffap.&lt;br /&gt;
&lt;br /&gt;
==Tree-based undo vs stack-based undo==&lt;br /&gt;
&lt;br /&gt;
==Multiple similar commands vs single repeated command==&lt;br /&gt;
&lt;br /&gt;
This one is a bit hard to explain, but there is a definite pattern where Vim prefers to give the user multiple similar commands, while Emacs prefers to give a single command that you can then repeat or use creatively. The best way to explain is to give a bunch of examples:&lt;br /&gt;
&lt;br /&gt;
* Changing the screen view relative to cursor: Vim gives you zz to scroll so as to leave the cursor at the center of the screen, zt to scroll and put the cursor at the top, and zb to scroll and put the cursor at the bottom. Emacs just gives you a single command, Ctrl-l, which when repeatedly pressed, will cycle between all three views.&lt;br /&gt;
* Moving cursor to top, middle, bottom: Vim gives you H to move cursor to the top of the screen, M to move to middle, and L to move to bottom. Emacs just gives you Alt-r, which will cycle between the three configurations.&lt;br /&gt;
* Indenting: The way TAB indenting works in Emacs is very distinctive. You press TAB and Emacs just indents the line to whatever it thinks is the right level. Vim&amp;#039;s TAB in insert mode just inserts a literal tab or spaces depending on the &amp;#039;expandtab&amp;#039; option. But Vim also gives you, in insert mode, Ctrl-f to do the Emacs-like thing, Ctrl-t to indent the current line, Ctrl-d to decrease the indent of the current line. And many more commands in normal mode.&lt;br /&gt;
* Folding: Vim gives you fine-grained commands like zo to open a fold, zc to close a fold, zR to globally reduce the fold level in the file, etc. Emacs as far as I know doesn&amp;#039;t have folding by default, but certain major modes like org-mode and markdown-mode do have folding, and in these, you simply press TAB to cycle the different folding levels, or Shift-TAB to do the cycling globally across the entire file.&lt;br /&gt;
* Vim gives you Y, D, C, to copy, delete, and change (respectively) until the end of the line. Emacs just gives you Ctrl-k, which it then expects you to creatively make use of (e.g. if you want to copy until the end of the line, you do Ctrl-k to delete until the end of the line, then Ctrl-/ to undo).&lt;br /&gt;
* Vim has / to search forward, ? to search backward, then n or N to repeat that search in the same direction or opposite direction. Emacs just has Ctrl-s and Ctrl-r to do the search forward or backward. If you want to repeat the search, you just keep pressing Ctrl-s.&lt;br /&gt;
* When you have multiple split windows, Vim has Ctrl-w followed by h, j, k, or l to move to that window. It also has Ctrl-w followed by w to keep cycling between the splits. It also has Ctrl-w followed by p to toggle between the two most recent splits. There are just a lot of fine-grained choices you can make. Emacs just gives you Ctrl-x o which cycles.&lt;br /&gt;
* Text formatting: Vim gives you two operators, gq and gw, which format text; gq moves the cursor to the end of the formatted text, while gw tries to keep the cursor where it was before the formatting. You can then combine these operators with any motion, e.g. gwip to format the current paragraph, gww to format the current line, gwib to format inside parentheses. Emacs just gives you Alt-q to format the paragraph. It is then up to you to creatively combine that with text selection; you can select some text and then do Alt-q to format just the text that is selected.&lt;br /&gt;
* Copy-pasting: Vim gives you named registers, so if you want to copy two different lines and remember both, you do something like &amp;lt;code&amp;gt;&amp;quot;ayy&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;quot;byy&amp;lt;/code&amp;gt;; then you can paste them with &amp;lt;code&amp;gt;&amp;quot;ap&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;quot;bp&amp;lt;/code&amp;gt;. In Emacs, you instead kill both lines, and then when you go to paste them, you first Ctrl-y to paste the most recent, and then you do Alt-y to cycle between the most recently killed text.&lt;br /&gt;
* Vim has j and k to move down and up by logical lines, and also has gj and gk to move down and up by screen-lines. Emacs only has Ctrl-n and Ctrl-p to move down and up by screen-lines. To move by logical lines, you need to do something creative like Ctrl-e Ctrl-f or Ctrl-a Ctrl-b, or just repeatedly press Ctrl-n or Ctrl-p. &lt;br /&gt;
&lt;br /&gt;
In general, I feel that Vim requires more mental energy to use (by forcing the user to pick the action more precisely, and by having the user plan ahead). You need to pick the specific action you wanted to perform. You need to think ahead and decide which registers to use. This also comes from Vim&amp;#039;s modal nature, but Vim gives you more decisions and a grammar, whereas Emacs gives you a way to quickly do the common thing. I think much of this may have been forced on the design of Vim by deciding to be keystroke-based, so that the only way to make some action available in normal mode was to assign some key to it. Whereas Emacs went more in the direction of being functions-first, and once you have functions, it is natural to pass arguments to the function to modify the behavior.&lt;br /&gt;
&lt;br /&gt;
==Word movement: consistent vs &amp;quot;do the common thing&amp;quot;==&lt;br /&gt;
&lt;br /&gt;
Vim&amp;#039;s word-based motions like w, b, and e always treat contiguous alphanumeric sequences as single words, and also treats contiguous symbols as single words. This leads to a very consistent word movement, which means you will never have to backtrack.&lt;br /&gt;
&lt;br /&gt;
Emacs does the thing that most other text editors do, which is that if the cursor is before/on a symbol, then moving forward by one word will not just jump to the end of the symbols, but will jump to the end of the alphanumeric sequence &amp;#039;&amp;#039;after&amp;#039;&amp;#039; the symbols. Emacs caters to the most common thing, and sometimes you need to backtrack.&lt;br /&gt;
&lt;br /&gt;
Suppose you have some text like: &amp;lt;code&amp;gt;Hello, world.&amp;lt;/code&amp;gt; and the cursor is past the final period. You want to add the word &amp;lt;code&amp;gt;there&amp;lt;/code&amp;gt; before the comma, to make it &amp;lt;code&amp;gt;Hello there, world.&amp;lt;/code&amp;gt; In Vim, you press b a few times to move backwards by word, until the cursor is on the comma, at which point you can go into insert mode to type the &amp;quot;there&amp;quot;. In Emacs, Alt-b will move the cursor back by word, but once the cursor is on the &amp;#039;w&amp;#039;, pressing Alt-b again will jump past the comma onto the &amp;#039;H&amp;#039; -- in other words, it overshoots. So then you need to backtrack by pressing Alt-f to move forward by word.&lt;br /&gt;
&lt;br /&gt;
==Scrolling: scrolloff vs scroll-into-view==&lt;br /&gt;
&lt;br /&gt;
In Vim, defaults.vim sets scrolloff=5, which means that when the cursor is at the edge of the window, it will always show 5 lines of context. You can never &amp;quot;touch&amp;quot; the very edge of the screen, because the screen will scroll when you try to move to the edge. (But due to Vim&amp;#039;s line-oriented heritage, this will scroll into view an entire logical line instead of just one visual line.)&lt;br /&gt;
&lt;br /&gt;
In Emacs, the default behavior is instead to jerk the screen to the center &amp;#039;&amp;#039;after&amp;#039;&amp;#039; you step off the edge.&lt;br /&gt;
&lt;br /&gt;
==Search and replace==&lt;br /&gt;
&lt;br /&gt;
Emacs automatically does all the case variants, e.g. if you search and replace foo → bar, it also does Foo → Bar, FOO → Bar, etc. Vim doesn&amp;#039;t do this.&lt;br /&gt;
&lt;br /&gt;
==Visual noise==&lt;br /&gt;
&lt;br /&gt;
Emacs has more visual noise, e.g. the line continuation markers, incremental search by default, highlighting of all search matches as you type, a status bar. Vim comes from an environment where terminals were very slow so it tries by default to not draw to the screen very much. This means fewer things flash on the screen as you do things -- quite monastic vibes.&lt;br /&gt;
&lt;br /&gt;
Of course, by modern standards of things like VS Code, Zed, JetBrains, etc., even Emacs will feel minimal! No line numbers, sidebar with a file tree, no minimap that shows a zoomed out view of the file, no tabs shown by default, no git gutter, no git blame next to every line as the cursor moves, no popups nagging you about updates or extensions to install, no breadcrumbs (path of nested scope at the top), no hover-over documentation.&lt;br /&gt;
&lt;br /&gt;
Both Vim and Emacs have prominent comment colors in their syntax highlighting by default (in Vim it&amp;#039;s blue, in Emacs it&amp;#039;s red), which I think says a lot. By making most things invisible but making comments stand out, it tells the user that comments are something worth paying attention to. They both come from a saner culture in which programmers were intelligent and comments meant something. Now modern editors have all this crap in your face, and not just that, they make comments &amp;#039;&amp;#039;grayed out&amp;#039;&amp;#039; so that they almost fade into the background (VS Code is the one exception, where its default colorscheme has green comments).&lt;br /&gt;
&lt;br /&gt;
==Prompting the user==&lt;br /&gt;
&lt;br /&gt;
For Vim, see [https://www.reddit.com/r/vim/comments/267vrv/i_am_tim_pope_crafter_of_plugins_ama/chojzsb/].&lt;br /&gt;
&lt;br /&gt;
Emacs often prompts the user.&lt;br /&gt;
&lt;br /&gt;
==Documentation: graph/linear vs tree==&lt;br /&gt;
&lt;br /&gt;
Vim uses a wiki-like help system, where you can click on links to read the sections. It also contains a linear book under :help user-manual. Emacs has a GNU-like hierarchical tree documentation system.&lt;br /&gt;
&lt;br /&gt;
Both have a way to look things up based on keystroke or command name though. Vim has a universal :help command, while Emacs has e.g. Ctrl-h k for keystrokes or Ctrl-h f for functions.&lt;br /&gt;
&lt;br /&gt;
==Selection endpoint==&lt;br /&gt;
&lt;br /&gt;
Vim includes the selection endpoint, whereas Emacs doesn&amp;#039;t. The need to make this decision comes from both editors originating on the terminal with block cursors, rather than the more modern I-beam cursors.&lt;/div&gt;</summary>
		<author><name>Issa</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.issarice.com/index.php?title=Design_philosophies_of_Vim_vs_Emacs&amp;diff=2955</id>
		<title>Design philosophies of Vim vs Emacs</title>
		<link rel="alternate" type="text/html" href="https://wiki.issarice.com/index.php?title=Design_philosophies_of_Vim_vs_Emacs&amp;diff=2955"/>
		<updated>2025-12-04T21:22:05Z</updated>

		<summary type="html">&lt;p&gt;Issa: /* Mappings: keystroke based vs function-based */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
==Modal vs chording==&lt;br /&gt;
&lt;br /&gt;
* Atomic edits and the dot command in Vim: When you use Vim, you naturally start to think in terms of repeatable edits that you can then use the &amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt; command to repeat. But this has a side-effect in that Vim requires you to manually chunk your undo history. Emacs instead automatically chunks undos.&lt;br /&gt;
* One consequence of the modal editing is that I think Vim degrades gracefully to having worse keyboards/a less ergonomic setup in general. For example, I bought a fairly crappy external USB keyboard for $25 where if I don&amp;#039;t press the Ctrl key very firmly, sometimes it will not register. This hasn&amp;#039;t been a problem in most software, but &amp;#039;&amp;#039;has&amp;#039;&amp;#039; become a problem when I use Emacs because I need to hold down the Ctrl key a lot for navigating with Ctrl+p and Ctrl+n. In Vim, I don&amp;#039;t have this problem at all because Ctrl just isn&amp;#039;t a key I need to hold down for long periods; it&amp;#039;s something I momentarily hold down, just long enough to press another key. So I have never run into this problem when using Vim (or even Firefox or other software). Emacs is the editor, and really only software, that in some sense &amp;#039;&amp;#039;requires&amp;#039;&amp;#039; me to have a nice keyboard.&lt;br /&gt;
&lt;br /&gt;
==Unix as IDE vs Emacs as OS==&lt;br /&gt;
&lt;br /&gt;
Vim tries to just be a text editor, and tries to play nice with the other tools on your computer, using commands like &amp;lt;code&amp;gt;:!command&amp;lt;/code&amp;gt; (runs external command) or &amp;lt;code&amp;gt;:w !command&amp;lt;/code&amp;gt; (pipes text to external command via stdin) or &amp;lt;code&amp;gt;:r !command&amp;lt;/code&amp;gt; (reads from external command via stdout).&lt;br /&gt;
&lt;br /&gt;
===...with some exceptions===&lt;br /&gt;
&lt;br /&gt;
Vim has a built-in spellchecker, whereas Emacs doesn&amp;#039;t (it does come with flyspell, which works with an external spellchecker like hunspell or aspell). (Emacs comes with tetris, an RPN calculator, an email client, etc., but not a spell-checker!)&lt;br /&gt;
&lt;br /&gt;
==Session management: per project vs single instance==&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;right way&amp;quot; to use Vim is to have one instance of Vim open per &amp;quot;project&amp;quot;. Each Vim instance maintains its own current directory, so you can e.g. open files relative to that current directory.&lt;br /&gt;
&lt;br /&gt;
In Emacs, the expectation is that you will have a single Emacs instance open. Emacs itself doesn&amp;#039;t maintain its current directory, and instead all file-open actions are relative to the buffer&amp;#039;s directory.&lt;br /&gt;
&lt;br /&gt;
Vim can do the Emacs thing with :set autochdir, but this is disabled by default.&lt;br /&gt;
&lt;br /&gt;
See [https://nullprogram.com/blog/2017/08/22/ this blog post] for more details.&lt;br /&gt;
&lt;br /&gt;
==Line-based vs character-based==&lt;br /&gt;
&lt;br /&gt;
Vim comes from a lineage of line-based editors. Registers can be linewise or characterwise, which means that actions like pasting text can act on entire lines or on characters. Some commands, like :substitute or :global, only work linewise. This is even reflected in the motion to move up or down a line: by default, j and k move down or up by logical lines instead of screen lines. However, due to this lineage, Vim does not deal well with long lines of text. Recent version of Vim have :set smoothscroll, but this only partially works.&lt;br /&gt;
&lt;br /&gt;
Emacs is like most other text editors in that it has no concept of linewise. Ctrl-n and Ctrl-p move by screen-lines, not logical lines, which makes sense when you think of the buffer of text as a stream of characters rather than an array of lines.&lt;br /&gt;
&lt;br /&gt;
==Mappings: keystroke based vs function-based==&lt;br /&gt;
&lt;br /&gt;
In Vim, commands like &amp;quot;copy text&amp;quot; don&amp;#039;t have a &amp;quot;name&amp;quot;; they are simply the keystroke that is used to perform that action. So if you want to &amp;quot;program&amp;quot; Vim to repeat some action, such as when defining a mapping, you simply tell Vim which keystrokes you want to repeat.&lt;br /&gt;
&lt;br /&gt;
In Emacs, every keystroke, even entering a single character, has a function that is associated with it. Emacs is simply an interpreter that runs the function associated with the keystroke. You can always do Ctrl-h k followed by the keystroke to find which function is bound to that particular keystroke.&lt;br /&gt;
&lt;br /&gt;
I think that being keystroke-based is one of the reasons Vim is so conservative about default keybindings (even when they are terrible, like Ctrl-b to go to the beginning of the line in command-line mode, or Y to copy the entire line instead of copying to the end of the line), because if you change the default keybinding inside of the C source code, it actually breaks all user mappings and scripts that rely on replaying keystrokes. So then eventually Vim came up with defaults.vim, which is not implemented on the level of C, but instead implemented on the level of Vimscript. By implementing it in Vimscript, it functions like user configuration, so it doesn&amp;#039;t change what the original keybindings mean. But doing this also means now you have to reason about multiple levels, the &amp;quot;base layer C keybindings&amp;quot; vs the &amp;quot;default keybindings that you actually interact with&amp;quot;. And at that point you&amp;#039;ve kind of reinvented the thing that Emacs does.&lt;br /&gt;
&lt;br /&gt;
==Actions: commands vs keybindings==&lt;br /&gt;
&lt;br /&gt;
Vim often uses the command-line for even common actions, e.g. :w to save a file [https://www.reddit.com/r/vim/comments/267vrv/i_am_tim_pope_crafter_of_plugins_ama/chojzsb/]. Emacs relies more on keybindings, e.g. Ctrl-x Ctrl-s to save a file.&lt;br /&gt;
&lt;br /&gt;
But there are some exceptions. To open the file that the cursor is on, Vim has various keybindings, including &amp;lt;code&amp;gt;gf&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;gF&amp;lt;/code&amp;gt;, Ctrl-w f, etc., but Emacs only has M-x ffap.&lt;br /&gt;
&lt;br /&gt;
==Tree-based undo vs stack-based undo==&lt;br /&gt;
&lt;br /&gt;
==Multiple similar commands vs single repeated command==&lt;br /&gt;
&lt;br /&gt;
This one is a bit hard to explain, but there is a definite pattern where Vim prefers to give the user multiple similar commands, while Emacs prefers to give a single command that you can then repeat or use creatively. The best way to explain is to give a bunch of examples:&lt;br /&gt;
&lt;br /&gt;
* Changing the screen view relative to cursor: Vim gives you zz to scroll so as to leave the cursor at the center of the screen, zt to scroll and put the cursor at the top, and zb to scroll and put the cursor at the bottom. Emacs just gives you a single command, Ctrl-l, which when repeatedly pressed, will cycle between all three views.&lt;br /&gt;
* Moving cursor to top, middle, bottom: Vim gives you H to move cursor to the top of the screen, M to move to middle, and L to move to bottom. Emacs just gives you Alt-r, which will cycle between the three configurations.&lt;br /&gt;
* Indenting: The way TAB indenting works in Emacs is very distinctive. You press TAB and Emacs just indents the line to whatever it thinks is the right level. Vim&amp;#039;s TAB in insert mode just inserts a literal tab or spaces depending on the &amp;#039;expandtab&amp;#039; option. But Vim also gives you, in insert mode, Ctrl-f to do the Emacs-like thing, Ctrl-t to indent the current line, Ctrl-d to decrease the indent of the current line. And many more commands in normal mode.&lt;br /&gt;
* Folding: Vim gives you fine-grained commands like zo to open a fold, zc to close a fold, zR to globally reduce the fold level in the file, etc. Emacs as far as I know doesn&amp;#039;t have folding by default, but certain major modes like org-mode and markdown-mode do have folding, and in these, you simply press TAB to cycle the different folding levels, or Shift-TAB to do the cycling globally across the entire file.&lt;br /&gt;
* Vim gives you Y, D, C, to copy, delete, and change (respectively) until the end of the line. Emacs just gives you Ctrl-k, which it then expects you to creatively make use of (e.g. if you want to copy until the end of the line, you do Ctrl-k to delete until the end of the line, then Ctrl-/ to undo).&lt;br /&gt;
* Vim has / to search forward, ? to search backward, then n or N to repeat that search in the same direction or opposite direction. Emacs just has Ctrl-s and Ctrl-r to do the search forward or backward. If you want to repeat the search, you just keep pressing Ctrl-s.&lt;br /&gt;
* When you have multiple split windows, Vim has Ctrl-w followed by h, j, k, or l to move to that window. It also has Ctrl-w followed by w to keep cycling between the splits. It also has Ctrl-w followed by p to toggle between the two most recent splits. There are just a lot of fine-grained choices you can make. Emacs just gives you Ctrl-x o which cycles.&lt;br /&gt;
* Text formatting: Vim gives you two operators, gq and gw, which format text; gq moves the cursor to the end of the formatted text, while gw tries to keep the cursor where it was before the formatting. You can then combine these operators with any motion, e.g. gwip to format the current paragraph, gww to format the current line, gwib to format inside parentheses. Emacs just gives you Alt-q to format the paragraph. It is then up to you to creatively combine that with text selection; you can select some text and then do Alt-q to format just the text that is selected.&lt;br /&gt;
* Copy-pasting: Vim gives you named registers, so if you want to copy two different lines and remember both, you do something like &amp;lt;code&amp;gt;&amp;quot;ayy&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;quot;byy&amp;lt;/code&amp;gt;; then you can paste them with &amp;lt;code&amp;gt;&amp;quot;ap&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;quot;bp&amp;lt;/code&amp;gt;. In Emacs, you instead kill both lines, and then when you go to paste them, you first Ctrl-y to paste the most recent, and then you do Alt-y to cycle between the most recently killed text.&lt;br /&gt;
* Vim has j and k to move down and up by logical lines, and also has gj and gk to move down and up by screen-lines. Emacs only has Ctrl-n and Ctrl-p to move down and up by screen-lines. To move by logical lines, you need to do something creative like Ctrl-e Ctrl-f or Ctrl-a Ctrl-b, or just repeatedly press Ctrl-n or Ctrl-p. &lt;br /&gt;
&lt;br /&gt;
In general, I feel that Vim requires more mental energy to use (by forcing the user to pick the action more precisely, and by having the user plan ahead). You need to pick the specific action you wanted to perform. You need to think ahead and decide which registers to use. This also comes from Vim&amp;#039;s modal nature, but Vim gives you more decisions and a grammar, whereas Emacs gives you a way to quickly do the common thing. I think much of this may have been forced on the design of Vim by deciding to be keystroke-based, so that the only way to make some action available in normal mode was to assign some key to it. Whereas Emacs went more in the direction of being functions-first, and once you have functions, it is natural to pass arguments to the function to modify the behavior.&lt;br /&gt;
&lt;br /&gt;
==Word movement: consistent vs &amp;quot;do the common thing&amp;quot;==&lt;br /&gt;
&lt;br /&gt;
Vim&amp;#039;s word-based motions like w, b, and e always treat contiguous alphanumeric sequences as single words, and also treats contiguous symbols as single words. This leads to a very consistent word movement, which means you will never have to backtrack.&lt;br /&gt;
&lt;br /&gt;
Emacs does the thing that most other text editors do, which is that if the cursor is before/on a symbol, then moving forward by one word will not just jump to the end of the symbols, but will jump to the end of the alphanumeric sequence &amp;#039;&amp;#039;after&amp;#039;&amp;#039; the symbols. Emacs caters to the most common thing, and sometimes you need to backtrack.&lt;br /&gt;
&lt;br /&gt;
Suppose you have some text like: &amp;lt;code&amp;gt;Hello, world.&amp;lt;/code&amp;gt; and the cursor is past the final period. You want to add the word &amp;lt;code&amp;gt;there&amp;lt;/code&amp;gt; before the comma, to make it &amp;lt;code&amp;gt;Hello there, world.&amp;lt;/code&amp;gt; In Vim, you press b a few times to move backwards by word, until the cursor is on the comma, at which point you can go into insert mode to type the &amp;quot;there&amp;quot;. In Emacs, Alt-b will move the cursor back by word, but once the cursor is on the &amp;#039;w&amp;#039;, pressing Alt-b again will jump past the comma onto the &amp;#039;H&amp;#039; -- in other words, it overshoots. So then you need to backtrack by pressing Alt-f to move forward by word.&lt;br /&gt;
&lt;br /&gt;
==Scrolling: scrolloff vs scroll-into-view==&lt;br /&gt;
&lt;br /&gt;
In Vim, defaults.vim sets scrolloff=5, which means that when the cursor is at the edge of the window, it will always show 5 lines of context. You can never &amp;quot;touch&amp;quot; the very edge of the screen, because the screen will scroll when you try to move to the edge. (But due to Vim&amp;#039;s line-oriented heritage, this will scroll into view an entire logical line instead of just one visual line.)&lt;br /&gt;
&lt;br /&gt;
In Emacs, the default behavior is instead to jerk the screen to the center &amp;#039;&amp;#039;after&amp;#039;&amp;#039; you step off the edge.&lt;br /&gt;
&lt;br /&gt;
==Search and replace==&lt;br /&gt;
&lt;br /&gt;
Emacs automatically does all the case variants, e.g. if you search and replace foo → bar, it also does Foo → Bar, FOO → Bar, etc. Vim doesn&amp;#039;t do this.&lt;br /&gt;
&lt;br /&gt;
==Visual noise==&lt;br /&gt;
&lt;br /&gt;
Emacs has more visual noise, e.g. the line continuation markers, incremental search by default, highlighting of all search matches as you type, a status bar. Vim comes from an environment where terminals were very slow so it tries by default to not draw to the screen very much. This means fewer things flash on the screen as you do things -- quite monastic vibes.&lt;br /&gt;
&lt;br /&gt;
Of course, by modern standards of things like VS Code, Zed, JetBrains, etc., even Emacs will feel minimal! No line numbers, sidebar with a file tree, no minimap that shows a zoomed out view of the file, no tabs shown by default, no git gutter, no git blame next to every line as the cursor moves, no popups nagging you about updates or extensions to install, no breadcrumbs (path of nested scope at the top), no hover-over documentation.&lt;br /&gt;
&lt;br /&gt;
Both Vim and Emacs have prominent comment colors in their syntax highlighting by default (in Vim it&amp;#039;s blue, in Emacs it&amp;#039;s red), which I think says a lot. By making most things invisible but making comments stand out, it tells the user that comments are something worth paying attention to. They both come from a saner culture in which programmers were intelligent and comments meant something. Now modern editors have all this crap in your face, and not just that, they make comments &amp;#039;&amp;#039;grayed out&amp;#039;&amp;#039; so that they almost fade into the background (VS Code is the one exception, where its default colorscheme has green comments).&lt;br /&gt;
&lt;br /&gt;
==Prompting the user==&lt;br /&gt;
&lt;br /&gt;
For Vim, see [https://www.reddit.com/r/vim/comments/267vrv/i_am_tim_pope_crafter_of_plugins_ama/chojzsb/].&lt;br /&gt;
&lt;br /&gt;
Emacs often prompts the user.&lt;br /&gt;
&lt;br /&gt;
==Documentation: graph/linear vs tree==&lt;br /&gt;
&lt;br /&gt;
Vim uses a wiki-like help system, where you can click on links to read the sections. It also contains a linear book under :help user-manual. Emacs has a GNU-like hierarchical tree documentation system.&lt;br /&gt;
&lt;br /&gt;
Both have a way to look things up based on keystroke or command name though. Vim has a universal :help command, while Emacs has e.g. Ctrl-h k for keystrokes or Ctrl-h f for functions.&lt;br /&gt;
&lt;br /&gt;
==Selection endpoint==&lt;br /&gt;
&lt;br /&gt;
Vim includes the selection endpoint, whereas Emacs doesn&amp;#039;t. The need to make this decision comes from both editors originating on the terminal with block cursors, rather than the more modern I-beam cursors.&lt;/div&gt;</summary>
		<author><name>Issa</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.issarice.com/index.php?title=Design_philosophies_of_Vim_vs_Emacs&amp;diff=2954</id>
		<title>Design philosophies of Vim vs Emacs</title>
		<link rel="alternate" type="text/html" href="https://wiki.issarice.com/index.php?title=Design_philosophies_of_Vim_vs_Emacs&amp;diff=2954"/>
		<updated>2025-12-04T21:21:05Z</updated>

		<summary type="html">&lt;p&gt;Issa: /* Mappings: keystroke based vs function-based */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
==Modal vs chording==&lt;br /&gt;
&lt;br /&gt;
* Atomic edits and the dot command in Vim: When you use Vim, you naturally start to think in terms of repeatable edits that you can then use the &amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt; command to repeat. But this has a side-effect in that Vim requires you to manually chunk your undo history. Emacs instead automatically chunks undos.&lt;br /&gt;
* One consequence of the modal editing is that I think Vim degrades gracefully to having worse keyboards/a less ergonomic setup in general. For example, I bought a fairly crappy external USB keyboard for $25 where if I don&amp;#039;t press the Ctrl key very firmly, sometimes it will not register. This hasn&amp;#039;t been a problem in most software, but &amp;#039;&amp;#039;has&amp;#039;&amp;#039; become a problem when I use Emacs because I need to hold down the Ctrl key a lot for navigating with Ctrl+p and Ctrl+n. In Vim, I don&amp;#039;t have this problem at all because Ctrl just isn&amp;#039;t a key I need to hold down for long periods; it&amp;#039;s something I momentarily hold down, just long enough to press another key. So I have never run into this problem when using Vim (or even Firefox or other software). Emacs is the editor, and really only software, that in some sense &amp;#039;&amp;#039;requires&amp;#039;&amp;#039; me to have a nice keyboard.&lt;br /&gt;
&lt;br /&gt;
==Unix as IDE vs Emacs as OS==&lt;br /&gt;
&lt;br /&gt;
Vim tries to just be a text editor, and tries to play nice with the other tools on your computer, using commands like &amp;lt;code&amp;gt;:!command&amp;lt;/code&amp;gt; (runs external command) or &amp;lt;code&amp;gt;:w !command&amp;lt;/code&amp;gt; (pipes text to external command via stdin) or &amp;lt;code&amp;gt;:r !command&amp;lt;/code&amp;gt; (reads from external command via stdout).&lt;br /&gt;
&lt;br /&gt;
===...with some exceptions===&lt;br /&gt;
&lt;br /&gt;
Vim has a built-in spellchecker, whereas Emacs doesn&amp;#039;t (it does come with flyspell, which works with an external spellchecker like hunspell or aspell). (Emacs comes with tetris, an RPN calculator, an email client, etc., but not a spell-checker!)&lt;br /&gt;
&lt;br /&gt;
==Session management: per project vs single instance==&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;right way&amp;quot; to use Vim is to have one instance of Vim open per &amp;quot;project&amp;quot;. Each Vim instance maintains its own current directory, so you can e.g. open files relative to that current directory.&lt;br /&gt;
&lt;br /&gt;
In Emacs, the expectation is that you will have a single Emacs instance open. Emacs itself doesn&amp;#039;t maintain its current directory, and instead all file-open actions are relative to the buffer&amp;#039;s directory.&lt;br /&gt;
&lt;br /&gt;
Vim can do the Emacs thing with :set autochdir, but this is disabled by default.&lt;br /&gt;
&lt;br /&gt;
See [https://nullprogram.com/blog/2017/08/22/ this blog post] for more details.&lt;br /&gt;
&lt;br /&gt;
==Line-based vs character-based==&lt;br /&gt;
&lt;br /&gt;
Vim comes from a lineage of line-based editors. Registers can be linewise or characterwise, which means that actions like pasting text can act on entire lines or on characters. Some commands, like :substitute or :global, only work linewise. This is even reflected in the motion to move up or down a line: by default, j and k move down or up by logical lines instead of screen lines. However, due to this lineage, Vim does not deal well with long lines of text. Recent version of Vim have :set smoothscroll, but this only partially works.&lt;br /&gt;
&lt;br /&gt;
Emacs is like most other text editors in that it has no concept of linewise. Ctrl-n and Ctrl-p move by screen-lines, not logical lines, which makes sense when you think of the buffer of text as a stream of characters rather than an array of lines.&lt;br /&gt;
&lt;br /&gt;
==Mappings: keystroke based vs function-based==&lt;br /&gt;
&lt;br /&gt;
In Vim, commands like &amp;quot;copy text&amp;quot; don&amp;#039;t have a &amp;quot;name&amp;quot;; they are simply the keystroke that is used to perform that action. So if you want to &amp;quot;program&amp;quot; Vim to repeat some action, such as when defining a mapping, you simply tell Vim which keystrokes you want to repeat.&lt;br /&gt;
&lt;br /&gt;
In Emacs, every keystroke, even entering a single character, has a function that is associated with it. Emacs is simply an interpreter that runs the function associated with the keystroke. You can always do Ctrl-h k followed by the keystroke to find which function is bound to that particular keystroke.&lt;br /&gt;
&lt;br /&gt;
I think that being keystroke-based is one of the reasons Vim is so conservative about default keybindings, because if you change the default keybinding inside of the C source code, it actually breaks all user mappings and scripts that rely on replaying keystrokes. So then eventually Vim came up with defaults.vim, which is not implemented on the level of C, but instead implemented on the level of Vimscript. By implementing it in Vimscript, it functions like user configuration, so it doesn&amp;#039;t change what the original keybindings mean. But doing this also means now you have to reason about multiple levels, the &amp;quot;base layer C keybindings&amp;quot; vs the &amp;quot;default keybindings that you actually interact with&amp;quot;. And at that point you&amp;#039;ve kind of reinvented the thing that Emacs does.&lt;br /&gt;
&lt;br /&gt;
==Actions: commands vs keybindings==&lt;br /&gt;
&lt;br /&gt;
Vim often uses the command-line for even common actions, e.g. :w to save a file [https://www.reddit.com/r/vim/comments/267vrv/i_am_tim_pope_crafter_of_plugins_ama/chojzsb/]. Emacs relies more on keybindings, e.g. Ctrl-x Ctrl-s to save a file.&lt;br /&gt;
&lt;br /&gt;
But there are some exceptions. To open the file that the cursor is on, Vim has various keybindings, including &amp;lt;code&amp;gt;gf&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;gF&amp;lt;/code&amp;gt;, Ctrl-w f, etc., but Emacs only has M-x ffap.&lt;br /&gt;
&lt;br /&gt;
==Tree-based undo vs stack-based undo==&lt;br /&gt;
&lt;br /&gt;
==Multiple similar commands vs single repeated command==&lt;br /&gt;
&lt;br /&gt;
This one is a bit hard to explain, but there is a definite pattern where Vim prefers to give the user multiple similar commands, while Emacs prefers to give a single command that you can then repeat or use creatively. The best way to explain is to give a bunch of examples:&lt;br /&gt;
&lt;br /&gt;
* Changing the screen view relative to cursor: Vim gives you zz to scroll so as to leave the cursor at the center of the screen, zt to scroll and put the cursor at the top, and zb to scroll and put the cursor at the bottom. Emacs just gives you a single command, Ctrl-l, which when repeatedly pressed, will cycle between all three views.&lt;br /&gt;
* Moving cursor to top, middle, bottom: Vim gives you H to move cursor to the top of the screen, M to move to middle, and L to move to bottom. Emacs just gives you Alt-r, which will cycle between the three configurations.&lt;br /&gt;
* Indenting: The way TAB indenting works in Emacs is very distinctive. You press TAB and Emacs just indents the line to whatever it thinks is the right level. Vim&amp;#039;s TAB in insert mode just inserts a literal tab or spaces depending on the &amp;#039;expandtab&amp;#039; option. But Vim also gives you, in insert mode, Ctrl-f to do the Emacs-like thing, Ctrl-t to indent the current line, Ctrl-d to decrease the indent of the current line. And many more commands in normal mode.&lt;br /&gt;
* Folding: Vim gives you fine-grained commands like zo to open a fold, zc to close a fold, zR to globally reduce the fold level in the file, etc. Emacs as far as I know doesn&amp;#039;t have folding by default, but certain major modes like org-mode and markdown-mode do have folding, and in these, you simply press TAB to cycle the different folding levels, or Shift-TAB to do the cycling globally across the entire file.&lt;br /&gt;
* Vim gives you Y, D, C, to copy, delete, and change (respectively) until the end of the line. Emacs just gives you Ctrl-k, which it then expects you to creatively make use of (e.g. if you want to copy until the end of the line, you do Ctrl-k to delete until the end of the line, then Ctrl-/ to undo).&lt;br /&gt;
* Vim has / to search forward, ? to search backward, then n or N to repeat that search in the same direction or opposite direction. Emacs just has Ctrl-s and Ctrl-r to do the search forward or backward. If you want to repeat the search, you just keep pressing Ctrl-s.&lt;br /&gt;
* When you have multiple split windows, Vim has Ctrl-w followed by h, j, k, or l to move to that window. It also has Ctrl-w followed by w to keep cycling between the splits. It also has Ctrl-w followed by p to toggle between the two most recent splits. There are just a lot of fine-grained choices you can make. Emacs just gives you Ctrl-x o which cycles.&lt;br /&gt;
* Text formatting: Vim gives you two operators, gq and gw, which format text; gq moves the cursor to the end of the formatted text, while gw tries to keep the cursor where it was before the formatting. You can then combine these operators with any motion, e.g. gwip to format the current paragraph, gww to format the current line, gwib to format inside parentheses. Emacs just gives you Alt-q to format the paragraph. It is then up to you to creatively combine that with text selection; you can select some text and then do Alt-q to format just the text that is selected.&lt;br /&gt;
* Copy-pasting: Vim gives you named registers, so if you want to copy two different lines and remember both, you do something like &amp;lt;code&amp;gt;&amp;quot;ayy&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;quot;byy&amp;lt;/code&amp;gt;; then you can paste them with &amp;lt;code&amp;gt;&amp;quot;ap&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;quot;bp&amp;lt;/code&amp;gt;. In Emacs, you instead kill both lines, and then when you go to paste them, you first Ctrl-y to paste the most recent, and then you do Alt-y to cycle between the most recently killed text.&lt;br /&gt;
* Vim has j and k to move down and up by logical lines, and also has gj and gk to move down and up by screen-lines. Emacs only has Ctrl-n and Ctrl-p to move down and up by screen-lines. To move by logical lines, you need to do something creative like Ctrl-e Ctrl-f or Ctrl-a Ctrl-b, or just repeatedly press Ctrl-n or Ctrl-p. &lt;br /&gt;
&lt;br /&gt;
In general, I feel that Vim requires more mental energy to use (by forcing the user to pick the action more precisely, and by having the user plan ahead). You need to pick the specific action you wanted to perform. You need to think ahead and decide which registers to use. This also comes from Vim&amp;#039;s modal nature, but Vim gives you more decisions and a grammar, whereas Emacs gives you a way to quickly do the common thing. I think much of this may have been forced on the design of Vim by deciding to be keystroke-based, so that the only way to make some action available in normal mode was to assign some key to it. Whereas Emacs went more in the direction of being functions-first, and once you have functions, it is natural to pass arguments to the function to modify the behavior.&lt;br /&gt;
&lt;br /&gt;
==Word movement: consistent vs &amp;quot;do the common thing&amp;quot;==&lt;br /&gt;
&lt;br /&gt;
Vim&amp;#039;s word-based motions like w, b, and e always treat contiguous alphanumeric sequences as single words, and also treats contiguous symbols as single words. This leads to a very consistent word movement, which means you will never have to backtrack.&lt;br /&gt;
&lt;br /&gt;
Emacs does the thing that most other text editors do, which is that if the cursor is before/on a symbol, then moving forward by one word will not just jump to the end of the symbols, but will jump to the end of the alphanumeric sequence &amp;#039;&amp;#039;after&amp;#039;&amp;#039; the symbols. Emacs caters to the most common thing, and sometimes you need to backtrack.&lt;br /&gt;
&lt;br /&gt;
Suppose you have some text like: &amp;lt;code&amp;gt;Hello, world.&amp;lt;/code&amp;gt; and the cursor is past the final period. You want to add the word &amp;lt;code&amp;gt;there&amp;lt;/code&amp;gt; before the comma, to make it &amp;lt;code&amp;gt;Hello there, world.&amp;lt;/code&amp;gt; In Vim, you press b a few times to move backwards by word, until the cursor is on the comma, at which point you can go into insert mode to type the &amp;quot;there&amp;quot;. In Emacs, Alt-b will move the cursor back by word, but once the cursor is on the &amp;#039;w&amp;#039;, pressing Alt-b again will jump past the comma onto the &amp;#039;H&amp;#039; -- in other words, it overshoots. So then you need to backtrack by pressing Alt-f to move forward by word.&lt;br /&gt;
&lt;br /&gt;
==Scrolling: scrolloff vs scroll-into-view==&lt;br /&gt;
&lt;br /&gt;
In Vim, defaults.vim sets scrolloff=5, which means that when the cursor is at the edge of the window, it will always show 5 lines of context. You can never &amp;quot;touch&amp;quot; the very edge of the screen, because the screen will scroll when you try to move to the edge. (But due to Vim&amp;#039;s line-oriented heritage, this will scroll into view an entire logical line instead of just one visual line.)&lt;br /&gt;
&lt;br /&gt;
In Emacs, the default behavior is instead to jerk the screen to the center &amp;#039;&amp;#039;after&amp;#039;&amp;#039; you step off the edge.&lt;br /&gt;
&lt;br /&gt;
==Search and replace==&lt;br /&gt;
&lt;br /&gt;
Emacs automatically does all the case variants, e.g. if you search and replace foo → bar, it also does Foo → Bar, FOO → Bar, etc. Vim doesn&amp;#039;t do this.&lt;br /&gt;
&lt;br /&gt;
==Visual noise==&lt;br /&gt;
&lt;br /&gt;
Emacs has more visual noise, e.g. the line continuation markers, incremental search by default, highlighting of all search matches as you type, a status bar. Vim comes from an environment where terminals were very slow so it tries by default to not draw to the screen very much. This means fewer things flash on the screen as you do things -- quite monastic vibes.&lt;br /&gt;
&lt;br /&gt;
Of course, by modern standards of things like VS Code, Zed, JetBrains, etc., even Emacs will feel minimal! No line numbers, sidebar with a file tree, no minimap that shows a zoomed out view of the file, no tabs shown by default, no git gutter, no git blame next to every line as the cursor moves, no popups nagging you about updates or extensions to install, no breadcrumbs (path of nested scope at the top), no hover-over documentation.&lt;br /&gt;
&lt;br /&gt;
Both Vim and Emacs have prominent comment colors in their syntax highlighting by default (in Vim it&amp;#039;s blue, in Emacs it&amp;#039;s red), which I think says a lot. By making most things invisible but making comments stand out, it tells the user that comments are something worth paying attention to. They both come from a saner culture in which programmers were intelligent and comments meant something. Now modern editors have all this crap in your face, and not just that, they make comments &amp;#039;&amp;#039;grayed out&amp;#039;&amp;#039; so that they almost fade into the background (VS Code is the one exception, where its default colorscheme has green comments).&lt;br /&gt;
&lt;br /&gt;
==Prompting the user==&lt;br /&gt;
&lt;br /&gt;
For Vim, see [https://www.reddit.com/r/vim/comments/267vrv/i_am_tim_pope_crafter_of_plugins_ama/chojzsb/].&lt;br /&gt;
&lt;br /&gt;
Emacs often prompts the user.&lt;br /&gt;
&lt;br /&gt;
==Documentation: graph/linear vs tree==&lt;br /&gt;
&lt;br /&gt;
Vim uses a wiki-like help system, where you can click on links to read the sections. It also contains a linear book under :help user-manual. Emacs has a GNU-like hierarchical tree documentation system.&lt;br /&gt;
&lt;br /&gt;
Both have a way to look things up based on keystroke or command name though. Vim has a universal :help command, while Emacs has e.g. Ctrl-h k for keystrokes or Ctrl-h f for functions.&lt;br /&gt;
&lt;br /&gt;
==Selection endpoint==&lt;br /&gt;
&lt;br /&gt;
Vim includes the selection endpoint, whereas Emacs doesn&amp;#039;t. The need to make this decision comes from both editors originating on the terminal with block cursors, rather than the more modern I-beam cursors.&lt;/div&gt;</summary>
		<author><name>Issa</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.issarice.com/index.php?title=Design_philosophies_of_Vim_vs_Emacs&amp;diff=2953</id>
		<title>Design philosophies of Vim vs Emacs</title>
		<link rel="alternate" type="text/html" href="https://wiki.issarice.com/index.php?title=Design_philosophies_of_Vim_vs_Emacs&amp;diff=2953"/>
		<updated>2025-12-01T23:28:49Z</updated>

		<summary type="html">&lt;p&gt;Issa: /* Multiple similar commands vs single repeated command */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
==Modal vs chording==&lt;br /&gt;
&lt;br /&gt;
* Atomic edits and the dot command in Vim: When you use Vim, you naturally start to think in terms of repeatable edits that you can then use the &amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt; command to repeat. But this has a side-effect in that Vim requires you to manually chunk your undo history. Emacs instead automatically chunks undos.&lt;br /&gt;
* One consequence of the modal editing is that I think Vim degrades gracefully to having worse keyboards/a less ergonomic setup in general. For example, I bought a fairly crappy external USB keyboard for $25 where if I don&amp;#039;t press the Ctrl key very firmly, sometimes it will not register. This hasn&amp;#039;t been a problem in most software, but &amp;#039;&amp;#039;has&amp;#039;&amp;#039; become a problem when I use Emacs because I need to hold down the Ctrl key a lot for navigating with Ctrl+p and Ctrl+n. In Vim, I don&amp;#039;t have this problem at all because Ctrl just isn&amp;#039;t a key I need to hold down for long periods; it&amp;#039;s something I momentarily hold down, just long enough to press another key. So I have never run into this problem when using Vim (or even Firefox or other software). Emacs is the editor, and really only software, that in some sense &amp;#039;&amp;#039;requires&amp;#039;&amp;#039; me to have a nice keyboard.&lt;br /&gt;
&lt;br /&gt;
==Unix as IDE vs Emacs as OS==&lt;br /&gt;
&lt;br /&gt;
Vim tries to just be a text editor, and tries to play nice with the other tools on your computer, using commands like &amp;lt;code&amp;gt;:!command&amp;lt;/code&amp;gt; (runs external command) or &amp;lt;code&amp;gt;:w !command&amp;lt;/code&amp;gt; (pipes text to external command via stdin) or &amp;lt;code&amp;gt;:r !command&amp;lt;/code&amp;gt; (reads from external command via stdout).&lt;br /&gt;
&lt;br /&gt;
===...with some exceptions===&lt;br /&gt;
&lt;br /&gt;
Vim has a built-in spellchecker, whereas Emacs doesn&amp;#039;t (it does come with flyspell, which works with an external spellchecker like hunspell or aspell). (Emacs comes with tetris, an RPN calculator, an email client, etc., but not a spell-checker!)&lt;br /&gt;
&lt;br /&gt;
==Session management: per project vs single instance==&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;right way&amp;quot; to use Vim is to have one instance of Vim open per &amp;quot;project&amp;quot;. Each Vim instance maintains its own current directory, so you can e.g. open files relative to that current directory.&lt;br /&gt;
&lt;br /&gt;
In Emacs, the expectation is that you will have a single Emacs instance open. Emacs itself doesn&amp;#039;t maintain its current directory, and instead all file-open actions are relative to the buffer&amp;#039;s directory.&lt;br /&gt;
&lt;br /&gt;
Vim can do the Emacs thing with :set autochdir, but this is disabled by default.&lt;br /&gt;
&lt;br /&gt;
See [https://nullprogram.com/blog/2017/08/22/ this blog post] for more details.&lt;br /&gt;
&lt;br /&gt;
==Line-based vs character-based==&lt;br /&gt;
&lt;br /&gt;
Vim comes from a lineage of line-based editors. Registers can be linewise or characterwise, which means that actions like pasting text can act on entire lines or on characters. Some commands, like :substitute or :global, only work linewise. This is even reflected in the motion to move up or down a line: by default, j and k move down or up by logical lines instead of screen lines. However, due to this lineage, Vim does not deal well with long lines of text. Recent version of Vim have :set smoothscroll, but this only partially works.&lt;br /&gt;
&lt;br /&gt;
Emacs is like most other text editors in that it has no concept of linewise. Ctrl-n and Ctrl-p move by screen-lines, not logical lines, which makes sense when you think of the buffer of text as a stream of characters rather than an array of lines.&lt;br /&gt;
&lt;br /&gt;
==Mappings: keystroke based vs function-based==&lt;br /&gt;
&lt;br /&gt;
In Vim, commands like &amp;quot;copy text&amp;quot; don&amp;#039;t have a &amp;quot;name&amp;quot;; they are simply the keystroke that is used to perform that action. So if you want to &amp;quot;program&amp;quot; Vim to repeat some action, such as when defining a mapping, you simply tell Vim which keystrokes you want to repeat.&lt;br /&gt;
&lt;br /&gt;
In Emacs, every keystroke, even entering a single character, has a function that is associated with it. Emacs is simply an interpreter that runs the function associated with the keystroke. You can always do Ctrl-h k followed by the keystroke to find which function is bound to that particular keystroke.&lt;br /&gt;
&lt;br /&gt;
==Actions: commands vs keybindings==&lt;br /&gt;
&lt;br /&gt;
Vim often uses the command-line for even common actions, e.g. :w to save a file [https://www.reddit.com/r/vim/comments/267vrv/i_am_tim_pope_crafter_of_plugins_ama/chojzsb/]. Emacs relies more on keybindings, e.g. Ctrl-x Ctrl-s to save a file.&lt;br /&gt;
&lt;br /&gt;
But there are some exceptions. To open the file that the cursor is on, Vim has various keybindings, including &amp;lt;code&amp;gt;gf&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;gF&amp;lt;/code&amp;gt;, Ctrl-w f, etc., but Emacs only has M-x ffap.&lt;br /&gt;
&lt;br /&gt;
==Tree-based undo vs stack-based undo==&lt;br /&gt;
&lt;br /&gt;
==Multiple similar commands vs single repeated command==&lt;br /&gt;
&lt;br /&gt;
This one is a bit hard to explain, but there is a definite pattern where Vim prefers to give the user multiple similar commands, while Emacs prefers to give a single command that you can then repeat or use creatively. The best way to explain is to give a bunch of examples:&lt;br /&gt;
&lt;br /&gt;
* Changing the screen view relative to cursor: Vim gives you zz to scroll so as to leave the cursor at the center of the screen, zt to scroll and put the cursor at the top, and zb to scroll and put the cursor at the bottom. Emacs just gives you a single command, Ctrl-l, which when repeatedly pressed, will cycle between all three views.&lt;br /&gt;
* Moving cursor to top, middle, bottom: Vim gives you H to move cursor to the top of the screen, M to move to middle, and L to move to bottom. Emacs just gives you Alt-r, which will cycle between the three configurations.&lt;br /&gt;
* Indenting: The way TAB indenting works in Emacs is very distinctive. You press TAB and Emacs just indents the line to whatever it thinks is the right level. Vim&amp;#039;s TAB in insert mode just inserts a literal tab or spaces depending on the &amp;#039;expandtab&amp;#039; option. But Vim also gives you, in insert mode, Ctrl-f to do the Emacs-like thing, Ctrl-t to indent the current line, Ctrl-d to decrease the indent of the current line. And many more commands in normal mode.&lt;br /&gt;
* Folding: Vim gives you fine-grained commands like zo to open a fold, zc to close a fold, zR to globally reduce the fold level in the file, etc. Emacs as far as I know doesn&amp;#039;t have folding by default, but certain major modes like org-mode and markdown-mode do have folding, and in these, you simply press TAB to cycle the different folding levels, or Shift-TAB to do the cycling globally across the entire file.&lt;br /&gt;
* Vim gives you Y, D, C, to copy, delete, and change (respectively) until the end of the line. Emacs just gives you Ctrl-k, which it then expects you to creatively make use of (e.g. if you want to copy until the end of the line, you do Ctrl-k to delete until the end of the line, then Ctrl-/ to undo).&lt;br /&gt;
* Vim has / to search forward, ? to search backward, then n or N to repeat that search in the same direction or opposite direction. Emacs just has Ctrl-s and Ctrl-r to do the search forward or backward. If you want to repeat the search, you just keep pressing Ctrl-s.&lt;br /&gt;
* When you have multiple split windows, Vim has Ctrl-w followed by h, j, k, or l to move to that window. It also has Ctrl-w followed by w to keep cycling between the splits. It also has Ctrl-w followed by p to toggle between the two most recent splits. There are just a lot of fine-grained choices you can make. Emacs just gives you Ctrl-x o which cycles.&lt;br /&gt;
* Text formatting: Vim gives you two operators, gq and gw, which format text; gq moves the cursor to the end of the formatted text, while gw tries to keep the cursor where it was before the formatting. You can then combine these operators with any motion, e.g. gwip to format the current paragraph, gww to format the current line, gwib to format inside parentheses. Emacs just gives you Alt-q to format the paragraph. It is then up to you to creatively combine that with text selection; you can select some text and then do Alt-q to format just the text that is selected.&lt;br /&gt;
* Copy-pasting: Vim gives you named registers, so if you want to copy two different lines and remember both, you do something like &amp;lt;code&amp;gt;&amp;quot;ayy&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;quot;byy&amp;lt;/code&amp;gt;; then you can paste them with &amp;lt;code&amp;gt;&amp;quot;ap&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;quot;bp&amp;lt;/code&amp;gt;. In Emacs, you instead kill both lines, and then when you go to paste them, you first Ctrl-y to paste the most recent, and then you do Alt-y to cycle between the most recently killed text.&lt;br /&gt;
* Vim has j and k to move down and up by logical lines, and also has gj and gk to move down and up by screen-lines. Emacs only has Ctrl-n and Ctrl-p to move down and up by screen-lines. To move by logical lines, you need to do something creative like Ctrl-e Ctrl-f or Ctrl-a Ctrl-b, or just repeatedly press Ctrl-n or Ctrl-p. &lt;br /&gt;
&lt;br /&gt;
In general, I feel that Vim requires more mental energy to use (by forcing the user to pick the action more precisely, and by having the user plan ahead). You need to pick the specific action you wanted to perform. You need to think ahead and decide which registers to use. This also comes from Vim&amp;#039;s modal nature, but Vim gives you more decisions and a grammar, whereas Emacs gives you a way to quickly do the common thing. I think much of this may have been forced on the design of Vim by deciding to be keystroke-based, so that the only way to make some action available in normal mode was to assign some key to it. Whereas Emacs went more in the direction of being functions-first, and once you have functions, it is natural to pass arguments to the function to modify the behavior.&lt;br /&gt;
&lt;br /&gt;
==Word movement: consistent vs &amp;quot;do the common thing&amp;quot;==&lt;br /&gt;
&lt;br /&gt;
Vim&amp;#039;s word-based motions like w, b, and e always treat contiguous alphanumeric sequences as single words, and also treats contiguous symbols as single words. This leads to a very consistent word movement, which means you will never have to backtrack.&lt;br /&gt;
&lt;br /&gt;
Emacs does the thing that most other text editors do, which is that if the cursor is before/on a symbol, then moving forward by one word will not just jump to the end of the symbols, but will jump to the end of the alphanumeric sequence &amp;#039;&amp;#039;after&amp;#039;&amp;#039; the symbols. Emacs caters to the most common thing, and sometimes you need to backtrack.&lt;br /&gt;
&lt;br /&gt;
Suppose you have some text like: &amp;lt;code&amp;gt;Hello, world.&amp;lt;/code&amp;gt; and the cursor is past the final period. You want to add the word &amp;lt;code&amp;gt;there&amp;lt;/code&amp;gt; before the comma, to make it &amp;lt;code&amp;gt;Hello there, world.&amp;lt;/code&amp;gt; In Vim, you press b a few times to move backwards by word, until the cursor is on the comma, at which point you can go into insert mode to type the &amp;quot;there&amp;quot;. In Emacs, Alt-b will move the cursor back by word, but once the cursor is on the &amp;#039;w&amp;#039;, pressing Alt-b again will jump past the comma onto the &amp;#039;H&amp;#039; -- in other words, it overshoots. So then you need to backtrack by pressing Alt-f to move forward by word.&lt;br /&gt;
&lt;br /&gt;
==Scrolling: scrolloff vs scroll-into-view==&lt;br /&gt;
&lt;br /&gt;
In Vim, defaults.vim sets scrolloff=5, which means that when the cursor is at the edge of the window, it will always show 5 lines of context. You can never &amp;quot;touch&amp;quot; the very edge of the screen, because the screen will scroll when you try to move to the edge. (But due to Vim&amp;#039;s line-oriented heritage, this will scroll into view an entire logical line instead of just one visual line.)&lt;br /&gt;
&lt;br /&gt;
In Emacs, the default behavior is instead to jerk the screen to the center &amp;#039;&amp;#039;after&amp;#039;&amp;#039; you step off the edge.&lt;br /&gt;
&lt;br /&gt;
==Search and replace==&lt;br /&gt;
&lt;br /&gt;
Emacs automatically does all the case variants, e.g. if you search and replace foo → bar, it also does Foo → Bar, FOO → Bar, etc. Vim doesn&amp;#039;t do this.&lt;br /&gt;
&lt;br /&gt;
==Visual noise==&lt;br /&gt;
&lt;br /&gt;
Emacs has more visual noise, e.g. the line continuation markers, incremental search by default, highlighting of all search matches as you type, a status bar. Vim comes from an environment where terminals were very slow so it tries by default to not draw to the screen very much. This means fewer things flash on the screen as you do things -- quite monastic vibes.&lt;br /&gt;
&lt;br /&gt;
Of course, by modern standards of things like VS Code, Zed, JetBrains, etc., even Emacs will feel minimal! No line numbers, sidebar with a file tree, no minimap that shows a zoomed out view of the file, no tabs shown by default, no git gutter, no git blame next to every line as the cursor moves, no popups nagging you about updates or extensions to install, no breadcrumbs (path of nested scope at the top), no hover-over documentation.&lt;br /&gt;
&lt;br /&gt;
Both Vim and Emacs have prominent comment colors in their syntax highlighting by default (in Vim it&amp;#039;s blue, in Emacs it&amp;#039;s red), which I think says a lot. By making most things invisible but making comments stand out, it tells the user that comments are something worth paying attention to. They both come from a saner culture in which programmers were intelligent and comments meant something. Now modern editors have all this crap in your face, and not just that, they make comments &amp;#039;&amp;#039;grayed out&amp;#039;&amp;#039; so that they almost fade into the background (VS Code is the one exception, where its default colorscheme has green comments).&lt;br /&gt;
&lt;br /&gt;
==Prompting the user==&lt;br /&gt;
&lt;br /&gt;
For Vim, see [https://www.reddit.com/r/vim/comments/267vrv/i_am_tim_pope_crafter_of_plugins_ama/chojzsb/].&lt;br /&gt;
&lt;br /&gt;
Emacs often prompts the user.&lt;br /&gt;
&lt;br /&gt;
==Documentation: graph/linear vs tree==&lt;br /&gt;
&lt;br /&gt;
Vim uses a wiki-like help system, where you can click on links to read the sections. It also contains a linear book under :help user-manual. Emacs has a GNU-like hierarchical tree documentation system.&lt;br /&gt;
&lt;br /&gt;
Both have a way to look things up based on keystroke or command name though. Vim has a universal :help command, while Emacs has e.g. Ctrl-h k for keystrokes or Ctrl-h f for functions.&lt;br /&gt;
&lt;br /&gt;
==Selection endpoint==&lt;br /&gt;
&lt;br /&gt;
Vim includes the selection endpoint, whereas Emacs doesn&amp;#039;t. The need to make this decision comes from both editors originating on the terminal with block cursors, rather than the more modern I-beam cursors.&lt;/div&gt;</summary>
		<author><name>Issa</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.issarice.com/index.php?title=Design_philosophies_of_Vim_vs_Emacs&amp;diff=2952</id>
		<title>Design philosophies of Vim vs Emacs</title>
		<link rel="alternate" type="text/html" href="https://wiki.issarice.com/index.php?title=Design_philosophies_of_Vim_vs_Emacs&amp;diff=2952"/>
		<updated>2025-12-01T23:24:54Z</updated>

		<summary type="html">&lt;p&gt;Issa: /* Visual noise */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
==Modal vs chording==&lt;br /&gt;
&lt;br /&gt;
* Atomic edits and the dot command in Vim: When you use Vim, you naturally start to think in terms of repeatable edits that you can then use the &amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt; command to repeat. But this has a side-effect in that Vim requires you to manually chunk your undo history. Emacs instead automatically chunks undos.&lt;br /&gt;
* One consequence of the modal editing is that I think Vim degrades gracefully to having worse keyboards/a less ergonomic setup in general. For example, I bought a fairly crappy external USB keyboard for $25 where if I don&amp;#039;t press the Ctrl key very firmly, sometimes it will not register. This hasn&amp;#039;t been a problem in most software, but &amp;#039;&amp;#039;has&amp;#039;&amp;#039; become a problem when I use Emacs because I need to hold down the Ctrl key a lot for navigating with Ctrl+p and Ctrl+n. In Vim, I don&amp;#039;t have this problem at all because Ctrl just isn&amp;#039;t a key I need to hold down for long periods; it&amp;#039;s something I momentarily hold down, just long enough to press another key. So I have never run into this problem when using Vim (or even Firefox or other software). Emacs is the editor, and really only software, that in some sense &amp;#039;&amp;#039;requires&amp;#039;&amp;#039; me to have a nice keyboard.&lt;br /&gt;
&lt;br /&gt;
==Unix as IDE vs Emacs as OS==&lt;br /&gt;
&lt;br /&gt;
Vim tries to just be a text editor, and tries to play nice with the other tools on your computer, using commands like &amp;lt;code&amp;gt;:!command&amp;lt;/code&amp;gt; (runs external command) or &amp;lt;code&amp;gt;:w !command&amp;lt;/code&amp;gt; (pipes text to external command via stdin) or &amp;lt;code&amp;gt;:r !command&amp;lt;/code&amp;gt; (reads from external command via stdout).&lt;br /&gt;
&lt;br /&gt;
===...with some exceptions===&lt;br /&gt;
&lt;br /&gt;
Vim has a built-in spellchecker, whereas Emacs doesn&amp;#039;t (it does come with flyspell, which works with an external spellchecker like hunspell or aspell). (Emacs comes with tetris, an RPN calculator, an email client, etc., but not a spell-checker!)&lt;br /&gt;
&lt;br /&gt;
==Session management: per project vs single instance==&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;right way&amp;quot; to use Vim is to have one instance of Vim open per &amp;quot;project&amp;quot;. Each Vim instance maintains its own current directory, so you can e.g. open files relative to that current directory.&lt;br /&gt;
&lt;br /&gt;
In Emacs, the expectation is that you will have a single Emacs instance open. Emacs itself doesn&amp;#039;t maintain its current directory, and instead all file-open actions are relative to the buffer&amp;#039;s directory.&lt;br /&gt;
&lt;br /&gt;
Vim can do the Emacs thing with :set autochdir, but this is disabled by default.&lt;br /&gt;
&lt;br /&gt;
See [https://nullprogram.com/blog/2017/08/22/ this blog post] for more details.&lt;br /&gt;
&lt;br /&gt;
==Line-based vs character-based==&lt;br /&gt;
&lt;br /&gt;
Vim comes from a lineage of line-based editors. Registers can be linewise or characterwise, which means that actions like pasting text can act on entire lines or on characters. Some commands, like :substitute or :global, only work linewise. This is even reflected in the motion to move up or down a line: by default, j and k move down or up by logical lines instead of screen lines. However, due to this lineage, Vim does not deal well with long lines of text. Recent version of Vim have :set smoothscroll, but this only partially works.&lt;br /&gt;
&lt;br /&gt;
Emacs is like most other text editors in that it has no concept of linewise. Ctrl-n and Ctrl-p move by screen-lines, not logical lines, which makes sense when you think of the buffer of text as a stream of characters rather than an array of lines.&lt;br /&gt;
&lt;br /&gt;
==Mappings: keystroke based vs function-based==&lt;br /&gt;
&lt;br /&gt;
In Vim, commands like &amp;quot;copy text&amp;quot; don&amp;#039;t have a &amp;quot;name&amp;quot;; they are simply the keystroke that is used to perform that action. So if you want to &amp;quot;program&amp;quot; Vim to repeat some action, such as when defining a mapping, you simply tell Vim which keystrokes you want to repeat.&lt;br /&gt;
&lt;br /&gt;
In Emacs, every keystroke, even entering a single character, has a function that is associated with it. Emacs is simply an interpreter that runs the function associated with the keystroke. You can always do Ctrl-h k followed by the keystroke to find which function is bound to that particular keystroke.&lt;br /&gt;
&lt;br /&gt;
==Actions: commands vs keybindings==&lt;br /&gt;
&lt;br /&gt;
Vim often uses the command-line for even common actions, e.g. :w to save a file [https://www.reddit.com/r/vim/comments/267vrv/i_am_tim_pope_crafter_of_plugins_ama/chojzsb/]. Emacs relies more on keybindings, e.g. Ctrl-x Ctrl-s to save a file.&lt;br /&gt;
&lt;br /&gt;
But there are some exceptions. To open the file that the cursor is on, Vim has various keybindings, including &amp;lt;code&amp;gt;gf&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;gF&amp;lt;/code&amp;gt;, Ctrl-w f, etc., but Emacs only has M-x ffap.&lt;br /&gt;
&lt;br /&gt;
==Tree-based undo vs stack-based undo==&lt;br /&gt;
&lt;br /&gt;
==Multiple similar commands vs single repeated command==&lt;br /&gt;
&lt;br /&gt;
This one is a bit hard to explain, but there is a definite pattern where Vim prefers to give the user multiple similar commands, while Emacs prefers to give a single command that you can then repeat or use creatively. The best way to explain is to give a bunch of examples:&lt;br /&gt;
&lt;br /&gt;
* Changing the screen view relative to cursor: Vim gives you zz to scroll so as to leave the cursor at the center of the screen, zt to scroll and put the cursor at the top, and zb to scroll and put the cursor at the bottom. Emacs just gives you a single command, Ctrl-l, which when repeatedly pressed, will cycle between all three views.&lt;br /&gt;
* Moving cursor to top, middle, bottom: Vim gives you H to move cursor to the top of the screen, M to move to middle, and L to move to bottom. Emacs just gives you Alt-r, which will cycle between the three configurations.&lt;br /&gt;
* Folding: Vim gives you fine-grained commands like zo to open a fold, zc to close a fold, zR to globally reduce the fold level in the file, etc. Emacs as far as I know doesn&amp;#039;t have folding by default, but certain major modes like org-mode and markdown-mode do have folding, and in these, you simply press TAB to cycle the different folding levels, or Shift-TAB to do the cycling globally across the entire file.&lt;br /&gt;
* Vim gives you Y, D, C, to copy, delete, and change (respectively) until the end of the line. Emacs just gives you Ctrl-k, which it then expects you to creatively make use of (e.g. if you want to copy until the end of the line, you do Ctrl-k to delete until the end of the line, then Ctrl-/ to undo).&lt;br /&gt;
* Vim has / to search forward, ? to search backward, then n or N to repeat that search in the same direction or opposite direction. Emacs just has Ctrl-s and Ctrl-r to do the search forward or backward. If you want to repeat the search, you just keep pressing Ctrl-s.&lt;br /&gt;
* When you have multiple split windows, Vim has Ctrl-w followed by h, j, k, or l to move to that window. It also has Ctrl-w followed by w to keep cycling between the splits. It also has Ctrl-w followed by p to toggle between the two most recent splits. There are just a lot of fine-grained choices you can make. Emacs just gives you Ctrl-x o which cycles.&lt;br /&gt;
* Text formatting: Vim gives you two operators, gq and gw, which format text; gq moves the cursor to the end of the formatted text, while gw tries to keep the cursor where it was before the formatting. You can then combine these operators with any motion, e.g. gwip to format the current paragraph, gww to format the current line, gwib to format inside parentheses. Emacs just gives you Alt-q to format the paragraph. It is then up to you to creatively combine that with text selection; you can select some text and then do Alt-q to format just the text that is selected.&lt;br /&gt;
* Copy-pasting: Vim gives you named registers, so if you want to copy two different lines and remember both, you do something like &amp;lt;code&amp;gt;&amp;quot;ayy&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;quot;byy&amp;lt;/code&amp;gt;; then you can paste them with &amp;lt;code&amp;gt;&amp;quot;ap&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;quot;bp&amp;lt;/code&amp;gt;. In Emacs, you instead kill both lines, and then when you go to paste them, you first Ctrl-y to paste the most recent, and then you do Alt-y to cycle between the most recently killed text.&lt;br /&gt;
* Vim has j and k to move down and up by logical lines, and also has gj and gk to move down and up by screen-lines. Emacs only has Ctrl-n and Ctrl-p to move down and up by screen-lines. To move by logical lines, you need to do something creative like Ctrl-e Ctrl-f or Ctrl-a Ctrl-b, or just repeatedly press Ctrl-n or Ctrl-p. &lt;br /&gt;
&lt;br /&gt;
In general, I feel that Vim requires more mental energy to use (by forcing the user to pick the action more precisely, and by having the user plan ahead). You need to pick the specific action you wanted to perform. You need to think ahead and decide which registers to use. This also comes from Vim&amp;#039;s modal nature, but Vim gives you more decisions and a grammar, whereas Emacs gives you a way to quickly do the common thing. I think much of this may have been forced on the design of Vim by deciding to be keystroke-based, so that the only way to make some action available in normal mode was to assign some key to it. Whereas Emacs went more in the direction of being functions-first, and once you have functions, it is natural to pass arguments to the function to modify the behavior.&lt;br /&gt;
&lt;br /&gt;
==Word movement: consistent vs &amp;quot;do the common thing&amp;quot;==&lt;br /&gt;
&lt;br /&gt;
Vim&amp;#039;s word-based motions like w, b, and e always treat contiguous alphanumeric sequences as single words, and also treats contiguous symbols as single words. This leads to a very consistent word movement, which means you will never have to backtrack.&lt;br /&gt;
&lt;br /&gt;
Emacs does the thing that most other text editors do, which is that if the cursor is before/on a symbol, then moving forward by one word will not just jump to the end of the symbols, but will jump to the end of the alphanumeric sequence &amp;#039;&amp;#039;after&amp;#039;&amp;#039; the symbols. Emacs caters to the most common thing, and sometimes you need to backtrack.&lt;br /&gt;
&lt;br /&gt;
Suppose you have some text like: &amp;lt;code&amp;gt;Hello, world.&amp;lt;/code&amp;gt; and the cursor is past the final period. You want to add the word &amp;lt;code&amp;gt;there&amp;lt;/code&amp;gt; before the comma, to make it &amp;lt;code&amp;gt;Hello there, world.&amp;lt;/code&amp;gt; In Vim, you press b a few times to move backwards by word, until the cursor is on the comma, at which point you can go into insert mode to type the &amp;quot;there&amp;quot;. In Emacs, Alt-b will move the cursor back by word, but once the cursor is on the &amp;#039;w&amp;#039;, pressing Alt-b again will jump past the comma onto the &amp;#039;H&amp;#039; -- in other words, it overshoots. So then you need to backtrack by pressing Alt-f to move forward by word.&lt;br /&gt;
&lt;br /&gt;
==Scrolling: scrolloff vs scroll-into-view==&lt;br /&gt;
&lt;br /&gt;
In Vim, defaults.vim sets scrolloff=5, which means that when the cursor is at the edge of the window, it will always show 5 lines of context. You can never &amp;quot;touch&amp;quot; the very edge of the screen, because the screen will scroll when you try to move to the edge. (But due to Vim&amp;#039;s line-oriented heritage, this will scroll into view an entire logical line instead of just one visual line.)&lt;br /&gt;
&lt;br /&gt;
In Emacs, the default behavior is instead to jerk the screen to the center &amp;#039;&amp;#039;after&amp;#039;&amp;#039; you step off the edge.&lt;br /&gt;
&lt;br /&gt;
==Search and replace==&lt;br /&gt;
&lt;br /&gt;
Emacs automatically does all the case variants, e.g. if you search and replace foo → bar, it also does Foo → Bar, FOO → Bar, etc. Vim doesn&amp;#039;t do this.&lt;br /&gt;
&lt;br /&gt;
==Visual noise==&lt;br /&gt;
&lt;br /&gt;
Emacs has more visual noise, e.g. the line continuation markers, incremental search by default, highlighting of all search matches as you type, a status bar. Vim comes from an environment where terminals were very slow so it tries by default to not draw to the screen very much. This means fewer things flash on the screen as you do things -- quite monastic vibes.&lt;br /&gt;
&lt;br /&gt;
Of course, by modern standards of things like VS Code, Zed, JetBrains, etc., even Emacs will feel minimal! No line numbers, sidebar with a file tree, no minimap that shows a zoomed out view of the file, no tabs shown by default, no git gutter, no git blame next to every line as the cursor moves, no popups nagging you about updates or extensions to install, no breadcrumbs (path of nested scope at the top), no hover-over documentation.&lt;br /&gt;
&lt;br /&gt;
Both Vim and Emacs have prominent comment colors in their syntax highlighting by default (in Vim it&amp;#039;s blue, in Emacs it&amp;#039;s red), which I think says a lot. By making most things invisible but making comments stand out, it tells the user that comments are something worth paying attention to. They both come from a saner culture in which programmers were intelligent and comments meant something. Now modern editors have all this crap in your face, and not just that, they make comments &amp;#039;&amp;#039;grayed out&amp;#039;&amp;#039; so that they almost fade into the background (VS Code is the one exception, where its default colorscheme has green comments).&lt;br /&gt;
&lt;br /&gt;
==Prompting the user==&lt;br /&gt;
&lt;br /&gt;
For Vim, see [https://www.reddit.com/r/vim/comments/267vrv/i_am_tim_pope_crafter_of_plugins_ama/chojzsb/].&lt;br /&gt;
&lt;br /&gt;
Emacs often prompts the user.&lt;br /&gt;
&lt;br /&gt;
==Documentation: graph/linear vs tree==&lt;br /&gt;
&lt;br /&gt;
Vim uses a wiki-like help system, where you can click on links to read the sections. It also contains a linear book under :help user-manual. Emacs has a GNU-like hierarchical tree documentation system.&lt;br /&gt;
&lt;br /&gt;
Both have a way to look things up based on keystroke or command name though. Vim has a universal :help command, while Emacs has e.g. Ctrl-h k for keystrokes or Ctrl-h f for functions.&lt;br /&gt;
&lt;br /&gt;
==Selection endpoint==&lt;br /&gt;
&lt;br /&gt;
Vim includes the selection endpoint, whereas Emacs doesn&amp;#039;t. The need to make this decision comes from both editors originating on the terminal with block cursors, rather than the more modern I-beam cursors.&lt;/div&gt;</summary>
		<author><name>Issa</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.issarice.com/index.php?title=Design_philosophies_of_Vim_vs_Emacs&amp;diff=2951</id>
		<title>Design philosophies of Vim vs Emacs</title>
		<link rel="alternate" type="text/html" href="https://wiki.issarice.com/index.php?title=Design_philosophies_of_Vim_vs_Emacs&amp;diff=2951"/>
		<updated>2025-12-01T23:20:04Z</updated>

		<summary type="html">&lt;p&gt;Issa: /* Visual noise */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
==Modal vs chording==&lt;br /&gt;
&lt;br /&gt;
* Atomic edits and the dot command in Vim: When you use Vim, you naturally start to think in terms of repeatable edits that you can then use the &amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt; command to repeat. But this has a side-effect in that Vim requires you to manually chunk your undo history. Emacs instead automatically chunks undos.&lt;br /&gt;
* One consequence of the modal editing is that I think Vim degrades gracefully to having worse keyboards/a less ergonomic setup in general. For example, I bought a fairly crappy external USB keyboard for $25 where if I don&amp;#039;t press the Ctrl key very firmly, sometimes it will not register. This hasn&amp;#039;t been a problem in most software, but &amp;#039;&amp;#039;has&amp;#039;&amp;#039; become a problem when I use Emacs because I need to hold down the Ctrl key a lot for navigating with Ctrl+p and Ctrl+n. In Vim, I don&amp;#039;t have this problem at all because Ctrl just isn&amp;#039;t a key I need to hold down for long periods; it&amp;#039;s something I momentarily hold down, just long enough to press another key. So I have never run into this problem when using Vim (or even Firefox or other software). Emacs is the editor, and really only software, that in some sense &amp;#039;&amp;#039;requires&amp;#039;&amp;#039; me to have a nice keyboard.&lt;br /&gt;
&lt;br /&gt;
==Unix as IDE vs Emacs as OS==&lt;br /&gt;
&lt;br /&gt;
Vim tries to just be a text editor, and tries to play nice with the other tools on your computer, using commands like &amp;lt;code&amp;gt;:!command&amp;lt;/code&amp;gt; (runs external command) or &amp;lt;code&amp;gt;:w !command&amp;lt;/code&amp;gt; (pipes text to external command via stdin) or &amp;lt;code&amp;gt;:r !command&amp;lt;/code&amp;gt; (reads from external command via stdout).&lt;br /&gt;
&lt;br /&gt;
===...with some exceptions===&lt;br /&gt;
&lt;br /&gt;
Vim has a built-in spellchecker, whereas Emacs doesn&amp;#039;t (it does come with flyspell, which works with an external spellchecker like hunspell or aspell). (Emacs comes with tetris, an RPN calculator, an email client, etc., but not a spell-checker!)&lt;br /&gt;
&lt;br /&gt;
==Session management: per project vs single instance==&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;right way&amp;quot; to use Vim is to have one instance of Vim open per &amp;quot;project&amp;quot;. Each Vim instance maintains its own current directory, so you can e.g. open files relative to that current directory.&lt;br /&gt;
&lt;br /&gt;
In Emacs, the expectation is that you will have a single Emacs instance open. Emacs itself doesn&amp;#039;t maintain its current directory, and instead all file-open actions are relative to the buffer&amp;#039;s directory.&lt;br /&gt;
&lt;br /&gt;
Vim can do the Emacs thing with :set autochdir, but this is disabled by default.&lt;br /&gt;
&lt;br /&gt;
See [https://nullprogram.com/blog/2017/08/22/ this blog post] for more details.&lt;br /&gt;
&lt;br /&gt;
==Line-based vs character-based==&lt;br /&gt;
&lt;br /&gt;
Vim comes from a lineage of line-based editors. Registers can be linewise or characterwise, which means that actions like pasting text can act on entire lines or on characters. Some commands, like :substitute or :global, only work linewise. This is even reflected in the motion to move up or down a line: by default, j and k move down or up by logical lines instead of screen lines. However, due to this lineage, Vim does not deal well with long lines of text. Recent version of Vim have :set smoothscroll, but this only partially works.&lt;br /&gt;
&lt;br /&gt;
Emacs is like most other text editors in that it has no concept of linewise. Ctrl-n and Ctrl-p move by screen-lines, not logical lines, which makes sense when you think of the buffer of text as a stream of characters rather than an array of lines.&lt;br /&gt;
&lt;br /&gt;
==Mappings: keystroke based vs function-based==&lt;br /&gt;
&lt;br /&gt;
In Vim, commands like &amp;quot;copy text&amp;quot; don&amp;#039;t have a &amp;quot;name&amp;quot;; they are simply the keystroke that is used to perform that action. So if you want to &amp;quot;program&amp;quot; Vim to repeat some action, such as when defining a mapping, you simply tell Vim which keystrokes you want to repeat.&lt;br /&gt;
&lt;br /&gt;
In Emacs, every keystroke, even entering a single character, has a function that is associated with it. Emacs is simply an interpreter that runs the function associated with the keystroke. You can always do Ctrl-h k followed by the keystroke to find which function is bound to that particular keystroke.&lt;br /&gt;
&lt;br /&gt;
==Actions: commands vs keybindings==&lt;br /&gt;
&lt;br /&gt;
Vim often uses the command-line for even common actions, e.g. :w to save a file [https://www.reddit.com/r/vim/comments/267vrv/i_am_tim_pope_crafter_of_plugins_ama/chojzsb/]. Emacs relies more on keybindings, e.g. Ctrl-x Ctrl-s to save a file.&lt;br /&gt;
&lt;br /&gt;
But there are some exceptions. To open the file that the cursor is on, Vim has various keybindings, including &amp;lt;code&amp;gt;gf&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;gF&amp;lt;/code&amp;gt;, Ctrl-w f, etc., but Emacs only has M-x ffap.&lt;br /&gt;
&lt;br /&gt;
==Tree-based undo vs stack-based undo==&lt;br /&gt;
&lt;br /&gt;
==Multiple similar commands vs single repeated command==&lt;br /&gt;
&lt;br /&gt;
This one is a bit hard to explain, but there is a definite pattern where Vim prefers to give the user multiple similar commands, while Emacs prefers to give a single command that you can then repeat or use creatively. The best way to explain is to give a bunch of examples:&lt;br /&gt;
&lt;br /&gt;
* Changing the screen view relative to cursor: Vim gives you zz to scroll so as to leave the cursor at the center of the screen, zt to scroll and put the cursor at the top, and zb to scroll and put the cursor at the bottom. Emacs just gives you a single command, Ctrl-l, which when repeatedly pressed, will cycle between all three views.&lt;br /&gt;
* Moving cursor to top, middle, bottom: Vim gives you H to move cursor to the top of the screen, M to move to middle, and L to move to bottom. Emacs just gives you Alt-r, which will cycle between the three configurations.&lt;br /&gt;
* Folding: Vim gives you fine-grained commands like zo to open a fold, zc to close a fold, zR to globally reduce the fold level in the file, etc. Emacs as far as I know doesn&amp;#039;t have folding by default, but certain major modes like org-mode and markdown-mode do have folding, and in these, you simply press TAB to cycle the different folding levels, or Shift-TAB to do the cycling globally across the entire file.&lt;br /&gt;
* Vim gives you Y, D, C, to copy, delete, and change (respectively) until the end of the line. Emacs just gives you Ctrl-k, which it then expects you to creatively make use of (e.g. if you want to copy until the end of the line, you do Ctrl-k to delete until the end of the line, then Ctrl-/ to undo).&lt;br /&gt;
* Vim has / to search forward, ? to search backward, then n or N to repeat that search in the same direction or opposite direction. Emacs just has Ctrl-s and Ctrl-r to do the search forward or backward. If you want to repeat the search, you just keep pressing Ctrl-s.&lt;br /&gt;
* When you have multiple split windows, Vim has Ctrl-w followed by h, j, k, or l to move to that window. It also has Ctrl-w followed by w to keep cycling between the splits. It also has Ctrl-w followed by p to toggle between the two most recent splits. There are just a lot of fine-grained choices you can make. Emacs just gives you Ctrl-x o which cycles.&lt;br /&gt;
* Text formatting: Vim gives you two operators, gq and gw, which format text; gq moves the cursor to the end of the formatted text, while gw tries to keep the cursor where it was before the formatting. You can then combine these operators with any motion, e.g. gwip to format the current paragraph, gww to format the current line, gwib to format inside parentheses. Emacs just gives you Alt-q to format the paragraph. It is then up to you to creatively combine that with text selection; you can select some text and then do Alt-q to format just the text that is selected.&lt;br /&gt;
* Copy-pasting: Vim gives you named registers, so if you want to copy two different lines and remember both, you do something like &amp;lt;code&amp;gt;&amp;quot;ayy&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;quot;byy&amp;lt;/code&amp;gt;; then you can paste them with &amp;lt;code&amp;gt;&amp;quot;ap&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;quot;bp&amp;lt;/code&amp;gt;. In Emacs, you instead kill both lines, and then when you go to paste them, you first Ctrl-y to paste the most recent, and then you do Alt-y to cycle between the most recently killed text.&lt;br /&gt;
* Vim has j and k to move down and up by logical lines, and also has gj and gk to move down and up by screen-lines. Emacs only has Ctrl-n and Ctrl-p to move down and up by screen-lines. To move by logical lines, you need to do something creative like Ctrl-e Ctrl-f or Ctrl-a Ctrl-b, or just repeatedly press Ctrl-n or Ctrl-p. &lt;br /&gt;
&lt;br /&gt;
In general, I feel that Vim requires more mental energy to use (by forcing the user to pick the action more precisely, and by having the user plan ahead). You need to pick the specific action you wanted to perform. You need to think ahead and decide which registers to use. This also comes from Vim&amp;#039;s modal nature, but Vim gives you more decisions and a grammar, whereas Emacs gives you a way to quickly do the common thing. I think much of this may have been forced on the design of Vim by deciding to be keystroke-based, so that the only way to make some action available in normal mode was to assign some key to it. Whereas Emacs went more in the direction of being functions-first, and once you have functions, it is natural to pass arguments to the function to modify the behavior.&lt;br /&gt;
&lt;br /&gt;
==Word movement: consistent vs &amp;quot;do the common thing&amp;quot;==&lt;br /&gt;
&lt;br /&gt;
Vim&amp;#039;s word-based motions like w, b, and e always treat contiguous alphanumeric sequences as single words, and also treats contiguous symbols as single words. This leads to a very consistent word movement, which means you will never have to backtrack.&lt;br /&gt;
&lt;br /&gt;
Emacs does the thing that most other text editors do, which is that if the cursor is before/on a symbol, then moving forward by one word will not just jump to the end of the symbols, but will jump to the end of the alphanumeric sequence &amp;#039;&amp;#039;after&amp;#039;&amp;#039; the symbols. Emacs caters to the most common thing, and sometimes you need to backtrack.&lt;br /&gt;
&lt;br /&gt;
Suppose you have some text like: &amp;lt;code&amp;gt;Hello, world.&amp;lt;/code&amp;gt; and the cursor is past the final period. You want to add the word &amp;lt;code&amp;gt;there&amp;lt;/code&amp;gt; before the comma, to make it &amp;lt;code&amp;gt;Hello there, world.&amp;lt;/code&amp;gt; In Vim, you press b a few times to move backwards by word, until the cursor is on the comma, at which point you can go into insert mode to type the &amp;quot;there&amp;quot;. In Emacs, Alt-b will move the cursor back by word, but once the cursor is on the &amp;#039;w&amp;#039;, pressing Alt-b again will jump past the comma onto the &amp;#039;H&amp;#039; -- in other words, it overshoots. So then you need to backtrack by pressing Alt-f to move forward by word.&lt;br /&gt;
&lt;br /&gt;
==Scrolling: scrolloff vs scroll-into-view==&lt;br /&gt;
&lt;br /&gt;
In Vim, defaults.vim sets scrolloff=5, which means that when the cursor is at the edge of the window, it will always show 5 lines of context. You can never &amp;quot;touch&amp;quot; the very edge of the screen, because the screen will scroll when you try to move to the edge. (But due to Vim&amp;#039;s line-oriented heritage, this will scroll into view an entire logical line instead of just one visual line.)&lt;br /&gt;
&lt;br /&gt;
In Emacs, the default behavior is instead to jerk the screen to the center &amp;#039;&amp;#039;after&amp;#039;&amp;#039; you step off the edge.&lt;br /&gt;
&lt;br /&gt;
==Search and replace==&lt;br /&gt;
&lt;br /&gt;
Emacs automatically does all the case variants, e.g. if you search and replace foo → bar, it also does Foo → Bar, FOO → Bar, etc. Vim doesn&amp;#039;t do this.&lt;br /&gt;
&lt;br /&gt;
==Visual noise==&lt;br /&gt;
&lt;br /&gt;
Emacs has more visual noise, e.g. the line continuation markers, incremental search by default, highlighting of all search matches as you type, a status bar. Vim comes from an environment where terminals were very slow so it tries by default to not draw to the screen very much. This means fewer things flash on the screen as you do things -- quite monastic vibes.&lt;br /&gt;
&lt;br /&gt;
Of course, by modern standards of things like VS Code, Zed, JetBrains, etc., even Emacs will feel minimal! No line numbers, sidebar with a file tree, no minimap that shows a zoomed out view of the file, no tabs shown by default, no git gutter, no git blame next to every line as the cursor moves, no popups nagging you about updates or extensions to install, no breadcrumbs (path of nested scope at the top), no hover-over documentation.&lt;br /&gt;
&lt;br /&gt;
Both Vim and Emacs have prominent comment colors in their syntax highlighting by default (in Vim it&amp;#039;s blue, in Emacs it&amp;#039;s red), which I think says a lot. By making most things invisible but making comments stand out, it tells the user that comments are something worth paying attention to. They both come from a saner culture in which programmers were intelligent and comments meant something. Now modern editors have all this crap in your face, and not just that, they make comments &amp;#039;&amp;#039;grayed out&amp;#039;&amp;#039; so that they almost fade into the background.&lt;br /&gt;
&lt;br /&gt;
==Prompting the user==&lt;br /&gt;
&lt;br /&gt;
For Vim, see [https://www.reddit.com/r/vim/comments/267vrv/i_am_tim_pope_crafter_of_plugins_ama/chojzsb/].&lt;br /&gt;
&lt;br /&gt;
Emacs often prompts the user.&lt;br /&gt;
&lt;br /&gt;
==Documentation: graph/linear vs tree==&lt;br /&gt;
&lt;br /&gt;
Vim uses a wiki-like help system, where you can click on links to read the sections. It also contains a linear book under :help user-manual. Emacs has a GNU-like hierarchical tree documentation system.&lt;br /&gt;
&lt;br /&gt;
Both have a way to look things up based on keystroke or command name though. Vim has a universal :help command, while Emacs has e.g. Ctrl-h k for keystrokes or Ctrl-h f for functions.&lt;br /&gt;
&lt;br /&gt;
==Selection endpoint==&lt;br /&gt;
&lt;br /&gt;
Vim includes the selection endpoint, whereas Emacs doesn&amp;#039;t. The need to make this decision comes from both editors originating on the terminal with block cursors, rather than the more modern I-beam cursors.&lt;/div&gt;</summary>
		<author><name>Issa</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.issarice.com/index.php?title=Design_philosophies_of_Vim_vs_Emacs&amp;diff=2950</id>
		<title>Design philosophies of Vim vs Emacs</title>
		<link rel="alternate" type="text/html" href="https://wiki.issarice.com/index.php?title=Design_philosophies_of_Vim_vs_Emacs&amp;diff=2950"/>
		<updated>2025-12-01T23:16:24Z</updated>

		<summary type="html">&lt;p&gt;Issa: /* Visual noise */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
==Modal vs chording==&lt;br /&gt;
&lt;br /&gt;
* Atomic edits and the dot command in Vim: When you use Vim, you naturally start to think in terms of repeatable edits that you can then use the &amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt; command to repeat. But this has a side-effect in that Vim requires you to manually chunk your undo history. Emacs instead automatically chunks undos.&lt;br /&gt;
* One consequence of the modal editing is that I think Vim degrades gracefully to having worse keyboards/a less ergonomic setup in general. For example, I bought a fairly crappy external USB keyboard for $25 where if I don&amp;#039;t press the Ctrl key very firmly, sometimes it will not register. This hasn&amp;#039;t been a problem in most software, but &amp;#039;&amp;#039;has&amp;#039;&amp;#039; become a problem when I use Emacs because I need to hold down the Ctrl key a lot for navigating with Ctrl+p and Ctrl+n. In Vim, I don&amp;#039;t have this problem at all because Ctrl just isn&amp;#039;t a key I need to hold down for long periods; it&amp;#039;s something I momentarily hold down, just long enough to press another key. So I have never run into this problem when using Vim (or even Firefox or other software). Emacs is the editor, and really only software, that in some sense &amp;#039;&amp;#039;requires&amp;#039;&amp;#039; me to have a nice keyboard.&lt;br /&gt;
&lt;br /&gt;
==Unix as IDE vs Emacs as OS==&lt;br /&gt;
&lt;br /&gt;
Vim tries to just be a text editor, and tries to play nice with the other tools on your computer, using commands like &amp;lt;code&amp;gt;:!command&amp;lt;/code&amp;gt; (runs external command) or &amp;lt;code&amp;gt;:w !command&amp;lt;/code&amp;gt; (pipes text to external command via stdin) or &amp;lt;code&amp;gt;:r !command&amp;lt;/code&amp;gt; (reads from external command via stdout).&lt;br /&gt;
&lt;br /&gt;
===...with some exceptions===&lt;br /&gt;
&lt;br /&gt;
Vim has a built-in spellchecker, whereas Emacs doesn&amp;#039;t (it does come with flyspell, which works with an external spellchecker like hunspell or aspell). (Emacs comes with tetris, an RPN calculator, an email client, etc., but not a spell-checker!)&lt;br /&gt;
&lt;br /&gt;
==Session management: per project vs single instance==&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;right way&amp;quot; to use Vim is to have one instance of Vim open per &amp;quot;project&amp;quot;. Each Vim instance maintains its own current directory, so you can e.g. open files relative to that current directory.&lt;br /&gt;
&lt;br /&gt;
In Emacs, the expectation is that you will have a single Emacs instance open. Emacs itself doesn&amp;#039;t maintain its current directory, and instead all file-open actions are relative to the buffer&amp;#039;s directory.&lt;br /&gt;
&lt;br /&gt;
Vim can do the Emacs thing with :set autochdir, but this is disabled by default.&lt;br /&gt;
&lt;br /&gt;
See [https://nullprogram.com/blog/2017/08/22/ this blog post] for more details.&lt;br /&gt;
&lt;br /&gt;
==Line-based vs character-based==&lt;br /&gt;
&lt;br /&gt;
Vim comes from a lineage of line-based editors. Registers can be linewise or characterwise, which means that actions like pasting text can act on entire lines or on characters. Some commands, like :substitute or :global, only work linewise. This is even reflected in the motion to move up or down a line: by default, j and k move down or up by logical lines instead of screen lines. However, due to this lineage, Vim does not deal well with long lines of text. Recent version of Vim have :set smoothscroll, but this only partially works.&lt;br /&gt;
&lt;br /&gt;
Emacs is like most other text editors in that it has no concept of linewise. Ctrl-n and Ctrl-p move by screen-lines, not logical lines, which makes sense when you think of the buffer of text as a stream of characters rather than an array of lines.&lt;br /&gt;
&lt;br /&gt;
==Mappings: keystroke based vs function-based==&lt;br /&gt;
&lt;br /&gt;
In Vim, commands like &amp;quot;copy text&amp;quot; don&amp;#039;t have a &amp;quot;name&amp;quot;; they are simply the keystroke that is used to perform that action. So if you want to &amp;quot;program&amp;quot; Vim to repeat some action, such as when defining a mapping, you simply tell Vim which keystrokes you want to repeat.&lt;br /&gt;
&lt;br /&gt;
In Emacs, every keystroke, even entering a single character, has a function that is associated with it. Emacs is simply an interpreter that runs the function associated with the keystroke. You can always do Ctrl-h k followed by the keystroke to find which function is bound to that particular keystroke.&lt;br /&gt;
&lt;br /&gt;
==Actions: commands vs keybindings==&lt;br /&gt;
&lt;br /&gt;
Vim often uses the command-line for even common actions, e.g. :w to save a file [https://www.reddit.com/r/vim/comments/267vrv/i_am_tim_pope_crafter_of_plugins_ama/chojzsb/]. Emacs relies more on keybindings, e.g. Ctrl-x Ctrl-s to save a file.&lt;br /&gt;
&lt;br /&gt;
But there are some exceptions. To open the file that the cursor is on, Vim has various keybindings, including &amp;lt;code&amp;gt;gf&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;gF&amp;lt;/code&amp;gt;, Ctrl-w f, etc., but Emacs only has M-x ffap.&lt;br /&gt;
&lt;br /&gt;
==Tree-based undo vs stack-based undo==&lt;br /&gt;
&lt;br /&gt;
==Multiple similar commands vs single repeated command==&lt;br /&gt;
&lt;br /&gt;
This one is a bit hard to explain, but there is a definite pattern where Vim prefers to give the user multiple similar commands, while Emacs prefers to give a single command that you can then repeat or use creatively. The best way to explain is to give a bunch of examples:&lt;br /&gt;
&lt;br /&gt;
* Changing the screen view relative to cursor: Vim gives you zz to scroll so as to leave the cursor at the center of the screen, zt to scroll and put the cursor at the top, and zb to scroll and put the cursor at the bottom. Emacs just gives you a single command, Ctrl-l, which when repeatedly pressed, will cycle between all three views.&lt;br /&gt;
* Moving cursor to top, middle, bottom: Vim gives you H to move cursor to the top of the screen, M to move to middle, and L to move to bottom. Emacs just gives you Alt-r, which will cycle between the three configurations.&lt;br /&gt;
* Folding: Vim gives you fine-grained commands like zo to open a fold, zc to close a fold, zR to globally reduce the fold level in the file, etc. Emacs as far as I know doesn&amp;#039;t have folding by default, but certain major modes like org-mode and markdown-mode do have folding, and in these, you simply press TAB to cycle the different folding levels, or Shift-TAB to do the cycling globally across the entire file.&lt;br /&gt;
* Vim gives you Y, D, C, to copy, delete, and change (respectively) until the end of the line. Emacs just gives you Ctrl-k, which it then expects you to creatively make use of (e.g. if you want to copy until the end of the line, you do Ctrl-k to delete until the end of the line, then Ctrl-/ to undo).&lt;br /&gt;
* Vim has / to search forward, ? to search backward, then n or N to repeat that search in the same direction or opposite direction. Emacs just has Ctrl-s and Ctrl-r to do the search forward or backward. If you want to repeat the search, you just keep pressing Ctrl-s.&lt;br /&gt;
* When you have multiple split windows, Vim has Ctrl-w followed by h, j, k, or l to move to that window. It also has Ctrl-w followed by w to keep cycling between the splits. It also has Ctrl-w followed by p to toggle between the two most recent splits. There are just a lot of fine-grained choices you can make. Emacs just gives you Ctrl-x o which cycles.&lt;br /&gt;
* Text formatting: Vim gives you two operators, gq and gw, which format text; gq moves the cursor to the end of the formatted text, while gw tries to keep the cursor where it was before the formatting. You can then combine these operators with any motion, e.g. gwip to format the current paragraph, gww to format the current line, gwib to format inside parentheses. Emacs just gives you Alt-q to format the paragraph. It is then up to you to creatively combine that with text selection; you can select some text and then do Alt-q to format just the text that is selected.&lt;br /&gt;
* Copy-pasting: Vim gives you named registers, so if you want to copy two different lines and remember both, you do something like &amp;lt;code&amp;gt;&amp;quot;ayy&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;quot;byy&amp;lt;/code&amp;gt;; then you can paste them with &amp;lt;code&amp;gt;&amp;quot;ap&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;quot;bp&amp;lt;/code&amp;gt;. In Emacs, you instead kill both lines, and then when you go to paste them, you first Ctrl-y to paste the most recent, and then you do Alt-y to cycle between the most recently killed text.&lt;br /&gt;
* Vim has j and k to move down and up by logical lines, and also has gj and gk to move down and up by screen-lines. Emacs only has Ctrl-n and Ctrl-p to move down and up by screen-lines. To move by logical lines, you need to do something creative like Ctrl-e Ctrl-f or Ctrl-a Ctrl-b, or just repeatedly press Ctrl-n or Ctrl-p. &lt;br /&gt;
&lt;br /&gt;
In general, I feel that Vim requires more mental energy to use (by forcing the user to pick the action more precisely, and by having the user plan ahead). You need to pick the specific action you wanted to perform. You need to think ahead and decide which registers to use. This also comes from Vim&amp;#039;s modal nature, but Vim gives you more decisions and a grammar, whereas Emacs gives you a way to quickly do the common thing. I think much of this may have been forced on the design of Vim by deciding to be keystroke-based, so that the only way to make some action available in normal mode was to assign some key to it. Whereas Emacs went more in the direction of being functions-first, and once you have functions, it is natural to pass arguments to the function to modify the behavior.&lt;br /&gt;
&lt;br /&gt;
==Word movement: consistent vs &amp;quot;do the common thing&amp;quot;==&lt;br /&gt;
&lt;br /&gt;
Vim&amp;#039;s word-based motions like w, b, and e always treat contiguous alphanumeric sequences as single words, and also treats contiguous symbols as single words. This leads to a very consistent word movement, which means you will never have to backtrack.&lt;br /&gt;
&lt;br /&gt;
Emacs does the thing that most other text editors do, which is that if the cursor is before/on a symbol, then moving forward by one word will not just jump to the end of the symbols, but will jump to the end of the alphanumeric sequence &amp;#039;&amp;#039;after&amp;#039;&amp;#039; the symbols. Emacs caters to the most common thing, and sometimes you need to backtrack.&lt;br /&gt;
&lt;br /&gt;
Suppose you have some text like: &amp;lt;code&amp;gt;Hello, world.&amp;lt;/code&amp;gt; and the cursor is past the final period. You want to add the word &amp;lt;code&amp;gt;there&amp;lt;/code&amp;gt; before the comma, to make it &amp;lt;code&amp;gt;Hello there, world.&amp;lt;/code&amp;gt; In Vim, you press b a few times to move backwards by word, until the cursor is on the comma, at which point you can go into insert mode to type the &amp;quot;there&amp;quot;. In Emacs, Alt-b will move the cursor back by word, but once the cursor is on the &amp;#039;w&amp;#039;, pressing Alt-b again will jump past the comma onto the &amp;#039;H&amp;#039; -- in other words, it overshoots. So then you need to backtrack by pressing Alt-f to move forward by word.&lt;br /&gt;
&lt;br /&gt;
==Scrolling: scrolloff vs scroll-into-view==&lt;br /&gt;
&lt;br /&gt;
In Vim, defaults.vim sets scrolloff=5, which means that when the cursor is at the edge of the window, it will always show 5 lines of context. You can never &amp;quot;touch&amp;quot; the very edge of the screen, because the screen will scroll when you try to move to the edge. (But due to Vim&amp;#039;s line-oriented heritage, this will scroll into view an entire logical line instead of just one visual line.)&lt;br /&gt;
&lt;br /&gt;
In Emacs, the default behavior is instead to jerk the screen to the center &amp;#039;&amp;#039;after&amp;#039;&amp;#039; you step off the edge.&lt;br /&gt;
&lt;br /&gt;
==Search and replace==&lt;br /&gt;
&lt;br /&gt;
Emacs automatically does all the case variants, e.g. if you search and replace foo → bar, it also does Foo → Bar, FOO → Bar, etc. Vim doesn&amp;#039;t do this.&lt;br /&gt;
&lt;br /&gt;
==Visual noise==&lt;br /&gt;
&lt;br /&gt;
Emacs has more visual noise, e.g. the line continuation markers, incremental search by default, highlighting of all search matches as you type, a status bar. Vim comes from an environment where terminals were very slow so it tries by default to not draw to the screen very much. This means fewer things flash on the screen as you do things -- quite monastic vibes.&lt;br /&gt;
&lt;br /&gt;
Of course, by modern standards of things like VS Code, Zed, JetBrains, etc., even Emacs will feel minimal! No line numbers, sidebar with a file tree, no minimap that shows a zoomed out view of the file, no tabs shown by default, no git gutter, no git blame next to every line as the cursor moves, no popups nagging you about updates or extensions to install, no breadcrumbs (path of nested scope at the top), no hover-over documentation.&lt;br /&gt;
&lt;br /&gt;
==Prompting the user==&lt;br /&gt;
&lt;br /&gt;
For Vim, see [https://www.reddit.com/r/vim/comments/267vrv/i_am_tim_pope_crafter_of_plugins_ama/chojzsb/].&lt;br /&gt;
&lt;br /&gt;
Emacs often prompts the user.&lt;br /&gt;
&lt;br /&gt;
==Documentation: graph/linear vs tree==&lt;br /&gt;
&lt;br /&gt;
Vim uses a wiki-like help system, where you can click on links to read the sections. It also contains a linear book under :help user-manual. Emacs has a GNU-like hierarchical tree documentation system.&lt;br /&gt;
&lt;br /&gt;
Both have a way to look things up based on keystroke or command name though. Vim has a universal :help command, while Emacs has e.g. Ctrl-h k for keystrokes or Ctrl-h f for functions.&lt;br /&gt;
&lt;br /&gt;
==Selection endpoint==&lt;br /&gt;
&lt;br /&gt;
Vim includes the selection endpoint, whereas Emacs doesn&amp;#039;t. The need to make this decision comes from both editors originating on the terminal with block cursors, rather than the more modern I-beam cursors.&lt;/div&gt;</summary>
		<author><name>Issa</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.issarice.com/index.php?title=Design_philosophies_of_Vim_vs_Emacs&amp;diff=2949</id>
		<title>Design philosophies of Vim vs Emacs</title>
		<link rel="alternate" type="text/html" href="https://wiki.issarice.com/index.php?title=Design_philosophies_of_Vim_vs_Emacs&amp;diff=2949"/>
		<updated>2025-12-01T23:14:51Z</updated>

		<summary type="html">&lt;p&gt;Issa: /* Visual noise */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
==Modal vs chording==&lt;br /&gt;
&lt;br /&gt;
* Atomic edits and the dot command in Vim: When you use Vim, you naturally start to think in terms of repeatable edits that you can then use the &amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt; command to repeat. But this has a side-effect in that Vim requires you to manually chunk your undo history. Emacs instead automatically chunks undos.&lt;br /&gt;
* One consequence of the modal editing is that I think Vim degrades gracefully to having worse keyboards/a less ergonomic setup in general. For example, I bought a fairly crappy external USB keyboard for $25 where if I don&amp;#039;t press the Ctrl key very firmly, sometimes it will not register. This hasn&amp;#039;t been a problem in most software, but &amp;#039;&amp;#039;has&amp;#039;&amp;#039; become a problem when I use Emacs because I need to hold down the Ctrl key a lot for navigating with Ctrl+p and Ctrl+n. In Vim, I don&amp;#039;t have this problem at all because Ctrl just isn&amp;#039;t a key I need to hold down for long periods; it&amp;#039;s something I momentarily hold down, just long enough to press another key. So I have never run into this problem when using Vim (or even Firefox or other software). Emacs is the editor, and really only software, that in some sense &amp;#039;&amp;#039;requires&amp;#039;&amp;#039; me to have a nice keyboard.&lt;br /&gt;
&lt;br /&gt;
==Unix as IDE vs Emacs as OS==&lt;br /&gt;
&lt;br /&gt;
Vim tries to just be a text editor, and tries to play nice with the other tools on your computer, using commands like &amp;lt;code&amp;gt;:!command&amp;lt;/code&amp;gt; (runs external command) or &amp;lt;code&amp;gt;:w !command&amp;lt;/code&amp;gt; (pipes text to external command via stdin) or &amp;lt;code&amp;gt;:r !command&amp;lt;/code&amp;gt; (reads from external command via stdout).&lt;br /&gt;
&lt;br /&gt;
===...with some exceptions===&lt;br /&gt;
&lt;br /&gt;
Vim has a built-in spellchecker, whereas Emacs doesn&amp;#039;t (it does come with flyspell, which works with an external spellchecker like hunspell or aspell). (Emacs comes with tetris, an RPN calculator, an email client, etc., but not a spell-checker!)&lt;br /&gt;
&lt;br /&gt;
==Session management: per project vs single instance==&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;right way&amp;quot; to use Vim is to have one instance of Vim open per &amp;quot;project&amp;quot;. Each Vim instance maintains its own current directory, so you can e.g. open files relative to that current directory.&lt;br /&gt;
&lt;br /&gt;
In Emacs, the expectation is that you will have a single Emacs instance open. Emacs itself doesn&amp;#039;t maintain its current directory, and instead all file-open actions are relative to the buffer&amp;#039;s directory.&lt;br /&gt;
&lt;br /&gt;
Vim can do the Emacs thing with :set autochdir, but this is disabled by default.&lt;br /&gt;
&lt;br /&gt;
See [https://nullprogram.com/blog/2017/08/22/ this blog post] for more details.&lt;br /&gt;
&lt;br /&gt;
==Line-based vs character-based==&lt;br /&gt;
&lt;br /&gt;
Vim comes from a lineage of line-based editors. Registers can be linewise or characterwise, which means that actions like pasting text can act on entire lines or on characters. Some commands, like :substitute or :global, only work linewise. This is even reflected in the motion to move up or down a line: by default, j and k move down or up by logical lines instead of screen lines. However, due to this lineage, Vim does not deal well with long lines of text. Recent version of Vim have :set smoothscroll, but this only partially works.&lt;br /&gt;
&lt;br /&gt;
Emacs is like most other text editors in that it has no concept of linewise. Ctrl-n and Ctrl-p move by screen-lines, not logical lines, which makes sense when you think of the buffer of text as a stream of characters rather than an array of lines.&lt;br /&gt;
&lt;br /&gt;
==Mappings: keystroke based vs function-based==&lt;br /&gt;
&lt;br /&gt;
In Vim, commands like &amp;quot;copy text&amp;quot; don&amp;#039;t have a &amp;quot;name&amp;quot;; they are simply the keystroke that is used to perform that action. So if you want to &amp;quot;program&amp;quot; Vim to repeat some action, such as when defining a mapping, you simply tell Vim which keystrokes you want to repeat.&lt;br /&gt;
&lt;br /&gt;
In Emacs, every keystroke, even entering a single character, has a function that is associated with it. Emacs is simply an interpreter that runs the function associated with the keystroke. You can always do Ctrl-h k followed by the keystroke to find which function is bound to that particular keystroke.&lt;br /&gt;
&lt;br /&gt;
==Actions: commands vs keybindings==&lt;br /&gt;
&lt;br /&gt;
Vim often uses the command-line for even common actions, e.g. :w to save a file [https://www.reddit.com/r/vim/comments/267vrv/i_am_tim_pope_crafter_of_plugins_ama/chojzsb/]. Emacs relies more on keybindings, e.g. Ctrl-x Ctrl-s to save a file.&lt;br /&gt;
&lt;br /&gt;
But there are some exceptions. To open the file that the cursor is on, Vim has various keybindings, including &amp;lt;code&amp;gt;gf&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;gF&amp;lt;/code&amp;gt;, Ctrl-w f, etc., but Emacs only has M-x ffap.&lt;br /&gt;
&lt;br /&gt;
==Tree-based undo vs stack-based undo==&lt;br /&gt;
&lt;br /&gt;
==Multiple similar commands vs single repeated command==&lt;br /&gt;
&lt;br /&gt;
This one is a bit hard to explain, but there is a definite pattern where Vim prefers to give the user multiple similar commands, while Emacs prefers to give a single command that you can then repeat or use creatively. The best way to explain is to give a bunch of examples:&lt;br /&gt;
&lt;br /&gt;
* Changing the screen view relative to cursor: Vim gives you zz to scroll so as to leave the cursor at the center of the screen, zt to scroll and put the cursor at the top, and zb to scroll and put the cursor at the bottom. Emacs just gives you a single command, Ctrl-l, which when repeatedly pressed, will cycle between all three views.&lt;br /&gt;
* Moving cursor to top, middle, bottom: Vim gives you H to move cursor to the top of the screen, M to move to middle, and L to move to bottom. Emacs just gives you Alt-r, which will cycle between the three configurations.&lt;br /&gt;
* Folding: Vim gives you fine-grained commands like zo to open a fold, zc to close a fold, zR to globally reduce the fold level in the file, etc. Emacs as far as I know doesn&amp;#039;t have folding by default, but certain major modes like org-mode and markdown-mode do have folding, and in these, you simply press TAB to cycle the different folding levels, or Shift-TAB to do the cycling globally across the entire file.&lt;br /&gt;
* Vim gives you Y, D, C, to copy, delete, and change (respectively) until the end of the line. Emacs just gives you Ctrl-k, which it then expects you to creatively make use of (e.g. if you want to copy until the end of the line, you do Ctrl-k to delete until the end of the line, then Ctrl-/ to undo).&lt;br /&gt;
* Vim has / to search forward, ? to search backward, then n or N to repeat that search in the same direction or opposite direction. Emacs just has Ctrl-s and Ctrl-r to do the search forward or backward. If you want to repeat the search, you just keep pressing Ctrl-s.&lt;br /&gt;
* When you have multiple split windows, Vim has Ctrl-w followed by h, j, k, or l to move to that window. It also has Ctrl-w followed by w to keep cycling between the splits. It also has Ctrl-w followed by p to toggle between the two most recent splits. There are just a lot of fine-grained choices you can make. Emacs just gives you Ctrl-x o which cycles.&lt;br /&gt;
* Text formatting: Vim gives you two operators, gq and gw, which format text; gq moves the cursor to the end of the formatted text, while gw tries to keep the cursor where it was before the formatting. You can then combine these operators with any motion, e.g. gwip to format the current paragraph, gww to format the current line, gwib to format inside parentheses. Emacs just gives you Alt-q to format the paragraph. It is then up to you to creatively combine that with text selection; you can select some text and then do Alt-q to format just the text that is selected.&lt;br /&gt;
* Copy-pasting: Vim gives you named registers, so if you want to copy two different lines and remember both, you do something like &amp;lt;code&amp;gt;&amp;quot;ayy&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;quot;byy&amp;lt;/code&amp;gt;; then you can paste them with &amp;lt;code&amp;gt;&amp;quot;ap&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;quot;bp&amp;lt;/code&amp;gt;. In Emacs, you instead kill both lines, and then when you go to paste them, you first Ctrl-y to paste the most recent, and then you do Alt-y to cycle between the most recently killed text.&lt;br /&gt;
* Vim has j and k to move down and up by logical lines, and also has gj and gk to move down and up by screen-lines. Emacs only has Ctrl-n and Ctrl-p to move down and up by screen-lines. To move by logical lines, you need to do something creative like Ctrl-e Ctrl-f or Ctrl-a Ctrl-b, or just repeatedly press Ctrl-n or Ctrl-p. &lt;br /&gt;
&lt;br /&gt;
In general, I feel that Vim requires more mental energy to use (by forcing the user to pick the action more precisely, and by having the user plan ahead). You need to pick the specific action you wanted to perform. You need to think ahead and decide which registers to use. This also comes from Vim&amp;#039;s modal nature, but Vim gives you more decisions and a grammar, whereas Emacs gives you a way to quickly do the common thing. I think much of this may have been forced on the design of Vim by deciding to be keystroke-based, so that the only way to make some action available in normal mode was to assign some key to it. Whereas Emacs went more in the direction of being functions-first, and once you have functions, it is natural to pass arguments to the function to modify the behavior.&lt;br /&gt;
&lt;br /&gt;
==Word movement: consistent vs &amp;quot;do the common thing&amp;quot;==&lt;br /&gt;
&lt;br /&gt;
Vim&amp;#039;s word-based motions like w, b, and e always treat contiguous alphanumeric sequences as single words, and also treats contiguous symbols as single words. This leads to a very consistent word movement, which means you will never have to backtrack.&lt;br /&gt;
&lt;br /&gt;
Emacs does the thing that most other text editors do, which is that if the cursor is before/on a symbol, then moving forward by one word will not just jump to the end of the symbols, but will jump to the end of the alphanumeric sequence &amp;#039;&amp;#039;after&amp;#039;&amp;#039; the symbols. Emacs caters to the most common thing, and sometimes you need to backtrack.&lt;br /&gt;
&lt;br /&gt;
Suppose you have some text like: &amp;lt;code&amp;gt;Hello, world.&amp;lt;/code&amp;gt; and the cursor is past the final period. You want to add the word &amp;lt;code&amp;gt;there&amp;lt;/code&amp;gt; before the comma, to make it &amp;lt;code&amp;gt;Hello there, world.&amp;lt;/code&amp;gt; In Vim, you press b a few times to move backwards by word, until the cursor is on the comma, at which point you can go into insert mode to type the &amp;quot;there&amp;quot;. In Emacs, Alt-b will move the cursor back by word, but once the cursor is on the &amp;#039;w&amp;#039;, pressing Alt-b again will jump past the comma onto the &amp;#039;H&amp;#039; -- in other words, it overshoots. So then you need to backtrack by pressing Alt-f to move forward by word.&lt;br /&gt;
&lt;br /&gt;
==Scrolling: scrolloff vs scroll-into-view==&lt;br /&gt;
&lt;br /&gt;
In Vim, defaults.vim sets scrolloff=5, which means that when the cursor is at the edge of the window, it will always show 5 lines of context. You can never &amp;quot;touch&amp;quot; the very edge of the screen, because the screen will scroll when you try to move to the edge. (But due to Vim&amp;#039;s line-oriented heritage, this will scroll into view an entire logical line instead of just one visual line.)&lt;br /&gt;
&lt;br /&gt;
In Emacs, the default behavior is instead to jerk the screen to the center &amp;#039;&amp;#039;after&amp;#039;&amp;#039; you step off the edge.&lt;br /&gt;
&lt;br /&gt;
==Search and replace==&lt;br /&gt;
&lt;br /&gt;
Emacs automatically does all the case variants, e.g. if you search and replace foo → bar, it also does Foo → Bar, FOO → Bar, etc. Vim doesn&amp;#039;t do this.&lt;br /&gt;
&lt;br /&gt;
==Visual noise==&lt;br /&gt;
&lt;br /&gt;
Emacs has more visual noise, e.g. the line continuation markers, incremental search by default, highlighting of all search matches as you type, a status bar. Vim comes from an environment where terminals were very slow so it tries by default to not draw to the screen very much. This means fewer things flash on the screen as you do things -- quite monastic vibes.&lt;br /&gt;
&lt;br /&gt;
Of course, by modern standards of things like VS Code, Zed, JetBrains, etc., even Emacs will feel minimal! No sidebar with a file tree, no minimap that shows a zoomed out view of the file, no tabs shown by default, no git gutter, no git blame next to every line as the cursor moves, no popups nagging you about updates or extensions to install, no breadcrumbs (path of nested scope at the top), no hover-over documentation.&lt;br /&gt;
&lt;br /&gt;
==Prompting the user==&lt;br /&gt;
&lt;br /&gt;
For Vim, see [https://www.reddit.com/r/vim/comments/267vrv/i_am_tim_pope_crafter_of_plugins_ama/chojzsb/].&lt;br /&gt;
&lt;br /&gt;
Emacs often prompts the user.&lt;br /&gt;
&lt;br /&gt;
==Documentation: graph/linear vs tree==&lt;br /&gt;
&lt;br /&gt;
Vim uses a wiki-like help system, where you can click on links to read the sections. It also contains a linear book under :help user-manual. Emacs has a GNU-like hierarchical tree documentation system.&lt;br /&gt;
&lt;br /&gt;
Both have a way to look things up based on keystroke or command name though. Vim has a universal :help command, while Emacs has e.g. Ctrl-h k for keystrokes or Ctrl-h f for functions.&lt;br /&gt;
&lt;br /&gt;
==Selection endpoint==&lt;br /&gt;
&lt;br /&gt;
Vim includes the selection endpoint, whereas Emacs doesn&amp;#039;t. The need to make this decision comes from both editors originating on the terminal with block cursors, rather than the more modern I-beam cursors.&lt;/div&gt;</summary>
		<author><name>Issa</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.issarice.com/index.php?title=Design_philosophies_of_Vim_vs_Emacs&amp;diff=2948</id>
		<title>Design philosophies of Vim vs Emacs</title>
		<link rel="alternate" type="text/html" href="https://wiki.issarice.com/index.php?title=Design_philosophies_of_Vim_vs_Emacs&amp;diff=2948"/>
		<updated>2025-12-01T23:13:02Z</updated>

		<summary type="html">&lt;p&gt;Issa: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
==Modal vs chording==&lt;br /&gt;
&lt;br /&gt;
* Atomic edits and the dot command in Vim: When you use Vim, you naturally start to think in terms of repeatable edits that you can then use the &amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt; command to repeat. But this has a side-effect in that Vim requires you to manually chunk your undo history. Emacs instead automatically chunks undos.&lt;br /&gt;
* One consequence of the modal editing is that I think Vim degrades gracefully to having worse keyboards/a less ergonomic setup in general. For example, I bought a fairly crappy external USB keyboard for $25 where if I don&amp;#039;t press the Ctrl key very firmly, sometimes it will not register. This hasn&amp;#039;t been a problem in most software, but &amp;#039;&amp;#039;has&amp;#039;&amp;#039; become a problem when I use Emacs because I need to hold down the Ctrl key a lot for navigating with Ctrl+p and Ctrl+n. In Vim, I don&amp;#039;t have this problem at all because Ctrl just isn&amp;#039;t a key I need to hold down for long periods; it&amp;#039;s something I momentarily hold down, just long enough to press another key. So I have never run into this problem when using Vim (or even Firefox or other software). Emacs is the editor, and really only software, that in some sense &amp;#039;&amp;#039;requires&amp;#039;&amp;#039; me to have a nice keyboard.&lt;br /&gt;
&lt;br /&gt;
==Unix as IDE vs Emacs as OS==&lt;br /&gt;
&lt;br /&gt;
Vim tries to just be a text editor, and tries to play nice with the other tools on your computer, using commands like &amp;lt;code&amp;gt;:!command&amp;lt;/code&amp;gt; (runs external command) or &amp;lt;code&amp;gt;:w !command&amp;lt;/code&amp;gt; (pipes text to external command via stdin) or &amp;lt;code&amp;gt;:r !command&amp;lt;/code&amp;gt; (reads from external command via stdout).&lt;br /&gt;
&lt;br /&gt;
===...with some exceptions===&lt;br /&gt;
&lt;br /&gt;
Vim has a built-in spellchecker, whereas Emacs doesn&amp;#039;t (it does come with flyspell, which works with an external spellchecker like hunspell or aspell). (Emacs comes with tetris, an RPN calculator, an email client, etc., but not a spell-checker!)&lt;br /&gt;
&lt;br /&gt;
==Session management: per project vs single instance==&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;right way&amp;quot; to use Vim is to have one instance of Vim open per &amp;quot;project&amp;quot;. Each Vim instance maintains its own current directory, so you can e.g. open files relative to that current directory.&lt;br /&gt;
&lt;br /&gt;
In Emacs, the expectation is that you will have a single Emacs instance open. Emacs itself doesn&amp;#039;t maintain its current directory, and instead all file-open actions are relative to the buffer&amp;#039;s directory.&lt;br /&gt;
&lt;br /&gt;
Vim can do the Emacs thing with :set autochdir, but this is disabled by default.&lt;br /&gt;
&lt;br /&gt;
See [https://nullprogram.com/blog/2017/08/22/ this blog post] for more details.&lt;br /&gt;
&lt;br /&gt;
==Line-based vs character-based==&lt;br /&gt;
&lt;br /&gt;
Vim comes from a lineage of line-based editors. Registers can be linewise or characterwise, which means that actions like pasting text can act on entire lines or on characters. Some commands, like :substitute or :global, only work linewise. This is even reflected in the motion to move up or down a line: by default, j and k move down or up by logical lines instead of screen lines. However, due to this lineage, Vim does not deal well with long lines of text. Recent version of Vim have :set smoothscroll, but this only partially works.&lt;br /&gt;
&lt;br /&gt;
Emacs is like most other text editors in that it has no concept of linewise. Ctrl-n and Ctrl-p move by screen-lines, not logical lines, which makes sense when you think of the buffer of text as a stream of characters rather than an array of lines.&lt;br /&gt;
&lt;br /&gt;
==Mappings: keystroke based vs function-based==&lt;br /&gt;
&lt;br /&gt;
In Vim, commands like &amp;quot;copy text&amp;quot; don&amp;#039;t have a &amp;quot;name&amp;quot;; they are simply the keystroke that is used to perform that action. So if you want to &amp;quot;program&amp;quot; Vim to repeat some action, such as when defining a mapping, you simply tell Vim which keystrokes you want to repeat.&lt;br /&gt;
&lt;br /&gt;
In Emacs, every keystroke, even entering a single character, has a function that is associated with it. Emacs is simply an interpreter that runs the function associated with the keystroke. You can always do Ctrl-h k followed by the keystroke to find which function is bound to that particular keystroke.&lt;br /&gt;
&lt;br /&gt;
==Actions: commands vs keybindings==&lt;br /&gt;
&lt;br /&gt;
Vim often uses the command-line for even common actions, e.g. :w to save a file [https://www.reddit.com/r/vim/comments/267vrv/i_am_tim_pope_crafter_of_plugins_ama/chojzsb/]. Emacs relies more on keybindings, e.g. Ctrl-x Ctrl-s to save a file.&lt;br /&gt;
&lt;br /&gt;
But there are some exceptions. To open the file that the cursor is on, Vim has various keybindings, including &amp;lt;code&amp;gt;gf&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;gF&amp;lt;/code&amp;gt;, Ctrl-w f, etc., but Emacs only has M-x ffap.&lt;br /&gt;
&lt;br /&gt;
==Tree-based undo vs stack-based undo==&lt;br /&gt;
&lt;br /&gt;
==Multiple similar commands vs single repeated command==&lt;br /&gt;
&lt;br /&gt;
This one is a bit hard to explain, but there is a definite pattern where Vim prefers to give the user multiple similar commands, while Emacs prefers to give a single command that you can then repeat or use creatively. The best way to explain is to give a bunch of examples:&lt;br /&gt;
&lt;br /&gt;
* Changing the screen view relative to cursor: Vim gives you zz to scroll so as to leave the cursor at the center of the screen, zt to scroll and put the cursor at the top, and zb to scroll and put the cursor at the bottom. Emacs just gives you a single command, Ctrl-l, which when repeatedly pressed, will cycle between all three views.&lt;br /&gt;
* Moving cursor to top, middle, bottom: Vim gives you H to move cursor to the top of the screen, M to move to middle, and L to move to bottom. Emacs just gives you Alt-r, which will cycle between the three configurations.&lt;br /&gt;
* Folding: Vim gives you fine-grained commands like zo to open a fold, zc to close a fold, zR to globally reduce the fold level in the file, etc. Emacs as far as I know doesn&amp;#039;t have folding by default, but certain major modes like org-mode and markdown-mode do have folding, and in these, you simply press TAB to cycle the different folding levels, or Shift-TAB to do the cycling globally across the entire file.&lt;br /&gt;
* Vim gives you Y, D, C, to copy, delete, and change (respectively) until the end of the line. Emacs just gives you Ctrl-k, which it then expects you to creatively make use of (e.g. if you want to copy until the end of the line, you do Ctrl-k to delete until the end of the line, then Ctrl-/ to undo).&lt;br /&gt;
* Vim has / to search forward, ? to search backward, then n or N to repeat that search in the same direction or opposite direction. Emacs just has Ctrl-s and Ctrl-r to do the search forward or backward. If you want to repeat the search, you just keep pressing Ctrl-s.&lt;br /&gt;
* When you have multiple split windows, Vim has Ctrl-w followed by h, j, k, or l to move to that window. It also has Ctrl-w followed by w to keep cycling between the splits. It also has Ctrl-w followed by p to toggle between the two most recent splits. There are just a lot of fine-grained choices you can make. Emacs just gives you Ctrl-x o which cycles.&lt;br /&gt;
* Text formatting: Vim gives you two operators, gq and gw, which format text; gq moves the cursor to the end of the formatted text, while gw tries to keep the cursor where it was before the formatting. You can then combine these operators with any motion, e.g. gwip to format the current paragraph, gww to format the current line, gwib to format inside parentheses. Emacs just gives you Alt-q to format the paragraph. It is then up to you to creatively combine that with text selection; you can select some text and then do Alt-q to format just the text that is selected.&lt;br /&gt;
* Copy-pasting: Vim gives you named registers, so if you want to copy two different lines and remember both, you do something like &amp;lt;code&amp;gt;&amp;quot;ayy&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;quot;byy&amp;lt;/code&amp;gt;; then you can paste them with &amp;lt;code&amp;gt;&amp;quot;ap&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;quot;bp&amp;lt;/code&amp;gt;. In Emacs, you instead kill both lines, and then when you go to paste them, you first Ctrl-y to paste the most recent, and then you do Alt-y to cycle between the most recently killed text.&lt;br /&gt;
* Vim has j and k to move down and up by logical lines, and also has gj and gk to move down and up by screen-lines. Emacs only has Ctrl-n and Ctrl-p to move down and up by screen-lines. To move by logical lines, you need to do something creative like Ctrl-e Ctrl-f or Ctrl-a Ctrl-b, or just repeatedly press Ctrl-n or Ctrl-p. &lt;br /&gt;
&lt;br /&gt;
In general, I feel that Vim requires more mental energy to use (by forcing the user to pick the action more precisely, and by having the user plan ahead). You need to pick the specific action you wanted to perform. You need to think ahead and decide which registers to use. This also comes from Vim&amp;#039;s modal nature, but Vim gives you more decisions and a grammar, whereas Emacs gives you a way to quickly do the common thing. I think much of this may have been forced on the design of Vim by deciding to be keystroke-based, so that the only way to make some action available in normal mode was to assign some key to it. Whereas Emacs went more in the direction of being functions-first, and once you have functions, it is natural to pass arguments to the function to modify the behavior.&lt;br /&gt;
&lt;br /&gt;
==Word movement: consistent vs &amp;quot;do the common thing&amp;quot;==&lt;br /&gt;
&lt;br /&gt;
Vim&amp;#039;s word-based motions like w, b, and e always treat contiguous alphanumeric sequences as single words, and also treats contiguous symbols as single words. This leads to a very consistent word movement, which means you will never have to backtrack.&lt;br /&gt;
&lt;br /&gt;
Emacs does the thing that most other text editors do, which is that if the cursor is before/on a symbol, then moving forward by one word will not just jump to the end of the symbols, but will jump to the end of the alphanumeric sequence &amp;#039;&amp;#039;after&amp;#039;&amp;#039; the symbols. Emacs caters to the most common thing, and sometimes you need to backtrack.&lt;br /&gt;
&lt;br /&gt;
Suppose you have some text like: &amp;lt;code&amp;gt;Hello, world.&amp;lt;/code&amp;gt; and the cursor is past the final period. You want to add the word &amp;lt;code&amp;gt;there&amp;lt;/code&amp;gt; before the comma, to make it &amp;lt;code&amp;gt;Hello there, world.&amp;lt;/code&amp;gt; In Vim, you press b a few times to move backwards by word, until the cursor is on the comma, at which point you can go into insert mode to type the &amp;quot;there&amp;quot;. In Emacs, Alt-b will move the cursor back by word, but once the cursor is on the &amp;#039;w&amp;#039;, pressing Alt-b again will jump past the comma onto the &amp;#039;H&amp;#039; -- in other words, it overshoots. So then you need to backtrack by pressing Alt-f to move forward by word.&lt;br /&gt;
&lt;br /&gt;
==Scrolling: scrolloff vs scroll-into-view==&lt;br /&gt;
&lt;br /&gt;
In Vim, defaults.vim sets scrolloff=5, which means that when the cursor is at the edge of the window, it will always show 5 lines of context. You can never &amp;quot;touch&amp;quot; the very edge of the screen, because the screen will scroll when you try to move to the edge. (But due to Vim&amp;#039;s line-oriented heritage, this will scroll into view an entire logical line instead of just one visual line.)&lt;br /&gt;
&lt;br /&gt;
In Emacs, the default behavior is instead to jerk the screen to the center &amp;#039;&amp;#039;after&amp;#039;&amp;#039; you step off the edge.&lt;br /&gt;
&lt;br /&gt;
==Search and replace==&lt;br /&gt;
&lt;br /&gt;
Emacs automatically does all the case variants, e.g. if you search and replace foo → bar, it also does Foo → Bar, FOO → Bar, etc. Vim doesn&amp;#039;t do this.&lt;br /&gt;
&lt;br /&gt;
==Visual noise==&lt;br /&gt;
&lt;br /&gt;
Emacs has more visual noise, e.g. the line continuation markers, incremental search by default, highlighting of all search matches as you type, a status bar. Vim comes from an environment where terminals were very slow so it tries by default to not draw to the screen very much. This means fewer things flash on the screen as you do things -- quite monastic vibes.&lt;br /&gt;
&lt;br /&gt;
Of course, by modern standards of things like VS Code, Zed, JetBrains, etc., even Emacs will feel minimal! No sidebar with a file tree, no minimap that shows a zoomed out view of the file, no tabs shown by default, no git gutter, no popups nagging you about updates or extensions to install, no breadcrumbs (path of nested scope at the top), no hover-over documentation.&lt;br /&gt;
&lt;br /&gt;
==Prompting the user==&lt;br /&gt;
&lt;br /&gt;
For Vim, see [https://www.reddit.com/r/vim/comments/267vrv/i_am_tim_pope_crafter_of_plugins_ama/chojzsb/].&lt;br /&gt;
&lt;br /&gt;
Emacs often prompts the user.&lt;br /&gt;
&lt;br /&gt;
==Documentation: graph/linear vs tree==&lt;br /&gt;
&lt;br /&gt;
Vim uses a wiki-like help system, where you can click on links to read the sections. It also contains a linear book under :help user-manual. Emacs has a GNU-like hierarchical tree documentation system.&lt;br /&gt;
&lt;br /&gt;
Both have a way to look things up based on keystroke or command name though. Vim has a universal :help command, while Emacs has e.g. Ctrl-h k for keystrokes or Ctrl-h f for functions.&lt;br /&gt;
&lt;br /&gt;
==Selection endpoint==&lt;br /&gt;
&lt;br /&gt;
Vim includes the selection endpoint, whereas Emacs doesn&amp;#039;t. The need to make this decision comes from both editors originating on the terminal with block cursors, rather than the more modern I-beam cursors.&lt;/div&gt;</summary>
		<author><name>Issa</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.issarice.com/index.php?title=Design_philosophies_of_Vim_vs_Emacs&amp;diff=2947</id>
		<title>Design philosophies of Vim vs Emacs</title>
		<link rel="alternate" type="text/html" href="https://wiki.issarice.com/index.php?title=Design_philosophies_of_Vim_vs_Emacs&amp;diff=2947"/>
		<updated>2025-12-01T23:04:34Z</updated>

		<summary type="html">&lt;p&gt;Issa: /* Multiple similar commands vs single repeated command */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
==Modal vs chording==&lt;br /&gt;
&lt;br /&gt;
* Atomic edits and the dot command in Vim: When you use Vim, you naturally start to think in terms of repeatable edits that you can then use the &amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt; command to repeat. But this has a side-effect in that Vim requires you to manually chunk your undo history. Emacs instead automatically chunks undos.&lt;br /&gt;
* One consequence of the modal editing is that I think Vim degrades gracefully to having worse keyboards/a less ergonomic setup in general. For example, I bought a fairly crappy external USB keyboard for $25 where if I don&amp;#039;t press the Ctrl key very firmly, sometimes it will not register. This hasn&amp;#039;t been a problem in most software, but &amp;#039;&amp;#039;has&amp;#039;&amp;#039; become a problem when I use Emacs because I need to hold down the Ctrl key a lot for navigating with Ctrl+p and Ctrl+n. In Vim, I don&amp;#039;t have this problem at all because Ctrl just isn&amp;#039;t a key I need to hold down for long periods; it&amp;#039;s something I momentarily hold down, just long enough to press another key. So I have never run into this problem when using Vim (or even Firefox or other software). Emacs is the editor, and really only software, that in some sense &amp;#039;&amp;#039;requires&amp;#039;&amp;#039; me to have a nice keyboard.&lt;br /&gt;
&lt;br /&gt;
==Unix as IDE vs Emacs as OS==&lt;br /&gt;
&lt;br /&gt;
Vim tries to just be a text editor, and tries to play nice with the other tools on your computer, using commands like &amp;lt;code&amp;gt;:!command&amp;lt;/code&amp;gt; (runs external command) or &amp;lt;code&amp;gt;:w !command&amp;lt;/code&amp;gt; (pipes text to external command via stdin) or &amp;lt;code&amp;gt;:r !command&amp;lt;/code&amp;gt; (reads from external command via stdout).&lt;br /&gt;
&lt;br /&gt;
===...with some exceptions===&lt;br /&gt;
&lt;br /&gt;
Vim has a built-in spellchecker, whereas Emacs doesn&amp;#039;t (it does come with flyspell, which works with an external spellchecker like hunspell or aspell). (Emacs comes with tetris, an RPN calculator, an email client, etc., but not a spell-checker!)&lt;br /&gt;
&lt;br /&gt;
==Session management: per project vs single instance==&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;right way&amp;quot; to use Vim is to have one instance of Vim open per &amp;quot;project&amp;quot;. Each Vim instance maintains its own current directory, so you can e.g. open files relative to that current directory.&lt;br /&gt;
&lt;br /&gt;
In Emacs, the expectation is that you will have a single Emacs instance open. Emacs itself doesn&amp;#039;t maintain its current directory, and instead all file-open actions are relative to the buffer&amp;#039;s directory.&lt;br /&gt;
&lt;br /&gt;
Vim can do the Emacs thing with :set autochdir, but this is disabled by default.&lt;br /&gt;
&lt;br /&gt;
See [https://nullprogram.com/blog/2017/08/22/ this blog post] for more details.&lt;br /&gt;
&lt;br /&gt;
==Line-based vs character-based==&lt;br /&gt;
&lt;br /&gt;
Vim comes from a lineage of line-based editors. Registers can be linewise or characterwise, which means that actions like pasting text can act on entire lines or on characters. Some commands, like :substitute or :global, only work linewise. This is even reflected in the motion to move up or down a line: by default, j and k move down or up by logical lines instead of screen lines. However, due to this lineage, Vim does not deal well with long lines of text. Recent version of Vim have :set smoothscroll, but this only partially works.&lt;br /&gt;
&lt;br /&gt;
Emacs is like most other text editors in that it has no concept of linewise. Ctrl-n and Ctrl-p move by screen-lines, not logical lines, which makes sense when you think of the buffer of text as a stream of characters rather than an array of lines.&lt;br /&gt;
&lt;br /&gt;
==Mappings: keystroke based vs function-based==&lt;br /&gt;
&lt;br /&gt;
In Vim, commands like &amp;quot;copy text&amp;quot; don&amp;#039;t have a &amp;quot;name&amp;quot;; they are simply the keystroke that is used to perform that action. So if you want to &amp;quot;program&amp;quot; Vim to repeat some action, such as when defining a mapping, you simply tell Vim which keystrokes you want to repeat.&lt;br /&gt;
&lt;br /&gt;
In Emacs, every keystroke, even entering a single character, has a function that is associated with it. Emacs is simply an interpreter that runs the function associated with the keystroke. You can always do Ctrl-h k followed by the keystroke to find which function is bound to that particular keystroke.&lt;br /&gt;
&lt;br /&gt;
==Actions: commands vs keybindings==&lt;br /&gt;
&lt;br /&gt;
Vim often uses the command-line for even common actions, e.g. :w to save a file [https://www.reddit.com/r/vim/comments/267vrv/i_am_tim_pope_crafter_of_plugins_ama/chojzsb/]. Emacs relies more on keybindings, e.g. Ctrl-x Ctrl-s to save a file.&lt;br /&gt;
&lt;br /&gt;
But there are some exceptions. To open the file that the cursor is on, Vim has various keybindings, including &amp;lt;code&amp;gt;gf&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;gF&amp;lt;/code&amp;gt;, Ctrl-w f, etc., but Emacs only has M-x ffap.&lt;br /&gt;
&lt;br /&gt;
==Tree-based undo vs stack-based undo==&lt;br /&gt;
&lt;br /&gt;
==Multiple similar commands vs single repeated command==&lt;br /&gt;
&lt;br /&gt;
This one is a bit hard to explain, but there is a definite pattern where Vim prefers to give the user multiple similar commands, while Emacs prefers to give a single command that you can then repeat or use creatively. The best way to explain is to give a bunch of examples:&lt;br /&gt;
&lt;br /&gt;
* Changing the screen view relative to cursor: Vim gives you zz to scroll so as to leave the cursor at the center of the screen, zt to scroll and put the cursor at the top, and zb to scroll and put the cursor at the bottom. Emacs just gives you a single command, Ctrl-l, which when repeatedly pressed, will cycle between all three views.&lt;br /&gt;
* Moving cursor to top, middle, bottom: Vim gives you H to move cursor to the top of the screen, M to move to middle, and L to move to bottom. Emacs just gives you Alt-r, which will cycle between the three configurations.&lt;br /&gt;
* Folding: Vim gives you fine-grained commands like zo to open a fold, zc to close a fold, zR to globally reduce the fold level in the file, etc. Emacs as far as I know doesn&amp;#039;t have folding by default, but certain major modes like org-mode and markdown-mode do have folding, and in these, you simply press TAB to cycle the different folding levels, or Shift-TAB to do the cycling globally across the entire file.&lt;br /&gt;
* Vim gives you Y, D, C, to copy, delete, and change (respectively) until the end of the line. Emacs just gives you Ctrl-k, which it then expects you to creatively make use of (e.g. if you want to copy until the end of the line, you do Ctrl-k to delete until the end of the line, then Ctrl-/ to undo).&lt;br /&gt;
* Vim has / to search forward, ? to search backward, then n or N to repeat that search in the same direction or opposite direction. Emacs just has Ctrl-s and Ctrl-r to do the search forward or backward. If you want to repeat the search, you just keep pressing Ctrl-s.&lt;br /&gt;
* When you have multiple split windows, Vim has Ctrl-w followed by h, j, k, or l to move to that window. It also has Ctrl-w followed by w to keep cycling between the splits. It also has Ctrl-w followed by p to toggle between the two most recent splits. There are just a lot of fine-grained choices you can make. Emacs just gives you Ctrl-x o which cycles.&lt;br /&gt;
* Text formatting: Vim gives you two operators, gq and gw, which format text; gq moves the cursor to the end of the formatted text, while gw tries to keep the cursor where it was before the formatting. You can then combine these operators with any motion, e.g. gwip to format the current paragraph, gww to format the current line, gwib to format inside parentheses. Emacs just gives you Alt-q to format the paragraph. It is then up to you to creatively combine that with text selection; you can select some text and then do Alt-q to format just the text that is selected.&lt;br /&gt;
* Copy-pasting: Vim gives you named registers, so if you want to copy two different lines and remember both, you do something like &amp;lt;code&amp;gt;&amp;quot;ayy&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;quot;byy&amp;lt;/code&amp;gt;; then you can paste them with &amp;lt;code&amp;gt;&amp;quot;ap&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;quot;bp&amp;lt;/code&amp;gt;. In Emacs, you instead kill both lines, and then when you go to paste them, you first Ctrl-y to paste the most recent, and then you do Alt-y to cycle between the most recently killed text.&lt;br /&gt;
* Vim has j and k to move down and up by logical lines, and also has gj and gk to move down and up by screen-lines. Emacs only has Ctrl-n and Ctrl-p to move down and up by screen-lines. To move by logical lines, you need to do something creative like Ctrl-e Ctrl-f or Ctrl-a Ctrl-b, or just repeatedly press Ctrl-n or Ctrl-p. &lt;br /&gt;
&lt;br /&gt;
In general, I feel that Vim requires more mental energy to use (by forcing the user to pick the action more precisely, and by having the user plan ahead). You need to pick the specific action you wanted to perform. You need to think ahead and decide which registers to use. This also comes from Vim&amp;#039;s modal nature, but Vim gives you more decisions and a grammar, whereas Emacs gives you a way to quickly do the common thing. I think much of this may have been forced on the design of Vim by deciding to be keystroke-based, so that the only way to make some action available in normal mode was to assign some key to it. Whereas Emacs went more in the direction of being functions-first, and once you have functions, it is natural to pass arguments to the function to modify the behavior.&lt;br /&gt;
&lt;br /&gt;
==Word movement: consistent vs &amp;quot;do the common thing&amp;quot;==&lt;br /&gt;
&lt;br /&gt;
Vim&amp;#039;s word-based motions like w, b, and e always treat contiguous alphanumeric sequences as single words, and also treats contiguous symbols as single words. This leads to a very consistent word movement, which means you will never have to backtrack.&lt;br /&gt;
&lt;br /&gt;
Emacs does the thing that most other text editors do, which is that if the cursor is before/on a symbol, then moving forward by one word will not just jump to the end of the symbols, but will jump to the end of the alphanumeric sequence &amp;#039;&amp;#039;after&amp;#039;&amp;#039; the symbols. Emacs caters to the most common thing, and sometimes you need to backtrack.&lt;br /&gt;
&lt;br /&gt;
Suppose you have some text like: &amp;lt;code&amp;gt;Hello, world.&amp;lt;/code&amp;gt; and the cursor is past the final period. You want to add the word &amp;lt;code&amp;gt;there&amp;lt;/code&amp;gt; before the comma, to make it &amp;lt;code&amp;gt;Hello there, world.&amp;lt;/code&amp;gt; In Vim, you press b a few times to move backwards by word, until the cursor is on the comma, at which point you can go into insert mode to type the &amp;quot;there&amp;quot;. In Emacs, Alt-b will move the cursor back by word, but once the cursor is on the &amp;#039;w&amp;#039;, pressing Alt-b again will jump past the comma onto the &amp;#039;H&amp;#039; -- in other words, it overshoots. So then you need to backtrack by pressing Alt-f to move forward by word.&lt;br /&gt;
&lt;br /&gt;
==Scrolling: scrolloff vs scroll-into-view==&lt;br /&gt;
&lt;br /&gt;
In Vim, defaults.vim sets scrolloff=5, which means that when the cursor is at the edge of the window, it will always show 5 lines of context. You can never &amp;quot;touch&amp;quot; the very edge of the screen, because the screen will scroll when you try to move to the edge. (But due to Vim&amp;#039;s line-oriented heritage, this will scroll into view an entire logical line instead of just one visual line.)&lt;br /&gt;
&lt;br /&gt;
In Emacs, the default behavior is instead to jerk the screen to the center &amp;#039;&amp;#039;after&amp;#039;&amp;#039; you step off the edge.&lt;br /&gt;
&lt;br /&gt;
==Search and replace==&lt;br /&gt;
&lt;br /&gt;
Emacs automatically does all the case variants, e.g. if you search and replace foo → bar, it also does Foo → Bar, FOO → Bar, etc. Vim doesn&amp;#039;t do this.&lt;br /&gt;
&lt;br /&gt;
==Prompting the user==&lt;br /&gt;
&lt;br /&gt;
For Vim, see [https://www.reddit.com/r/vim/comments/267vrv/i_am_tim_pope_crafter_of_plugins_ama/chojzsb/].&lt;br /&gt;
&lt;br /&gt;
Emacs often prompts the user.&lt;br /&gt;
&lt;br /&gt;
==Documentation: graph/linear vs tree==&lt;br /&gt;
&lt;br /&gt;
Vim uses a wiki-like help system, where you can click on links to read the sections. It also contains a linear book under :help user-manual. Emacs has a GNU-like hierarchical tree documentation system.&lt;br /&gt;
&lt;br /&gt;
Both have a way to look things up based on keystroke or command name though. Vim has a universal :help command, while Emacs has e.g. Ctrl-h k for keystrokes or Ctrl-h f for functions.&lt;br /&gt;
&lt;br /&gt;
==Selection endpoint==&lt;br /&gt;
&lt;br /&gt;
Vim includes the selection endpoint, whereas Emacs doesn&amp;#039;t. The need to make this decision comes from both editors originating on the terminal with block cursors, rather than the more modern I-beam cursors.&lt;/div&gt;</summary>
		<author><name>Issa</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.issarice.com/index.php?title=Design_philosophies_of_Vim_vs_Emacs&amp;diff=2946</id>
		<title>Design philosophies of Vim vs Emacs</title>
		<link rel="alternate" type="text/html" href="https://wiki.issarice.com/index.php?title=Design_philosophies_of_Vim_vs_Emacs&amp;diff=2946"/>
		<updated>2025-12-01T23:02:15Z</updated>

		<summary type="html">&lt;p&gt;Issa: /* Session management: per project vs single instance */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
==Modal vs chording==&lt;br /&gt;
&lt;br /&gt;
* Atomic edits and the dot command in Vim: When you use Vim, you naturally start to think in terms of repeatable edits that you can then use the &amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt; command to repeat. But this has a side-effect in that Vim requires you to manually chunk your undo history. Emacs instead automatically chunks undos.&lt;br /&gt;
* One consequence of the modal editing is that I think Vim degrades gracefully to having worse keyboards/a less ergonomic setup in general. For example, I bought a fairly crappy external USB keyboard for $25 where if I don&amp;#039;t press the Ctrl key very firmly, sometimes it will not register. This hasn&amp;#039;t been a problem in most software, but &amp;#039;&amp;#039;has&amp;#039;&amp;#039; become a problem when I use Emacs because I need to hold down the Ctrl key a lot for navigating with Ctrl+p and Ctrl+n. In Vim, I don&amp;#039;t have this problem at all because Ctrl just isn&amp;#039;t a key I need to hold down for long periods; it&amp;#039;s something I momentarily hold down, just long enough to press another key. So I have never run into this problem when using Vim (or even Firefox or other software). Emacs is the editor, and really only software, that in some sense &amp;#039;&amp;#039;requires&amp;#039;&amp;#039; me to have a nice keyboard.&lt;br /&gt;
&lt;br /&gt;
==Unix as IDE vs Emacs as OS==&lt;br /&gt;
&lt;br /&gt;
Vim tries to just be a text editor, and tries to play nice with the other tools on your computer, using commands like &amp;lt;code&amp;gt;:!command&amp;lt;/code&amp;gt; (runs external command) or &amp;lt;code&amp;gt;:w !command&amp;lt;/code&amp;gt; (pipes text to external command via stdin) or &amp;lt;code&amp;gt;:r !command&amp;lt;/code&amp;gt; (reads from external command via stdout).&lt;br /&gt;
&lt;br /&gt;
===...with some exceptions===&lt;br /&gt;
&lt;br /&gt;
Vim has a built-in spellchecker, whereas Emacs doesn&amp;#039;t (it does come with flyspell, which works with an external spellchecker like hunspell or aspell). (Emacs comes with tetris, an RPN calculator, an email client, etc., but not a spell-checker!)&lt;br /&gt;
&lt;br /&gt;
==Session management: per project vs single instance==&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;right way&amp;quot; to use Vim is to have one instance of Vim open per &amp;quot;project&amp;quot;. Each Vim instance maintains its own current directory, so you can e.g. open files relative to that current directory.&lt;br /&gt;
&lt;br /&gt;
In Emacs, the expectation is that you will have a single Emacs instance open. Emacs itself doesn&amp;#039;t maintain its current directory, and instead all file-open actions are relative to the buffer&amp;#039;s directory.&lt;br /&gt;
&lt;br /&gt;
Vim can do the Emacs thing with :set autochdir, but this is disabled by default.&lt;br /&gt;
&lt;br /&gt;
See [https://nullprogram.com/blog/2017/08/22/ this blog post] for more details.&lt;br /&gt;
&lt;br /&gt;
==Line-based vs character-based==&lt;br /&gt;
&lt;br /&gt;
Vim comes from a lineage of line-based editors. Registers can be linewise or characterwise, which means that actions like pasting text can act on entire lines or on characters. Some commands, like :substitute or :global, only work linewise. This is even reflected in the motion to move up or down a line: by default, j and k move down or up by logical lines instead of screen lines. However, due to this lineage, Vim does not deal well with long lines of text. Recent version of Vim have :set smoothscroll, but this only partially works.&lt;br /&gt;
&lt;br /&gt;
Emacs is like most other text editors in that it has no concept of linewise. Ctrl-n and Ctrl-p move by screen-lines, not logical lines, which makes sense when you think of the buffer of text as a stream of characters rather than an array of lines.&lt;br /&gt;
&lt;br /&gt;
==Mappings: keystroke based vs function-based==&lt;br /&gt;
&lt;br /&gt;
In Vim, commands like &amp;quot;copy text&amp;quot; don&amp;#039;t have a &amp;quot;name&amp;quot;; they are simply the keystroke that is used to perform that action. So if you want to &amp;quot;program&amp;quot; Vim to repeat some action, such as when defining a mapping, you simply tell Vim which keystrokes you want to repeat.&lt;br /&gt;
&lt;br /&gt;
In Emacs, every keystroke, even entering a single character, has a function that is associated with it. Emacs is simply an interpreter that runs the function associated with the keystroke. You can always do Ctrl-h k followed by the keystroke to find which function is bound to that particular keystroke.&lt;br /&gt;
&lt;br /&gt;
==Actions: commands vs keybindings==&lt;br /&gt;
&lt;br /&gt;
Vim often uses the command-line for even common actions, e.g. :w to save a file [https://www.reddit.com/r/vim/comments/267vrv/i_am_tim_pope_crafter_of_plugins_ama/chojzsb/]. Emacs relies more on keybindings, e.g. Ctrl-x Ctrl-s to save a file.&lt;br /&gt;
&lt;br /&gt;
But there are some exceptions. To open the file that the cursor is on, Vim has various keybindings, including &amp;lt;code&amp;gt;gf&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;gF&amp;lt;/code&amp;gt;, Ctrl-w f, etc., but Emacs only has M-x ffap.&lt;br /&gt;
&lt;br /&gt;
==Tree-based undo vs stack-based undo==&lt;br /&gt;
&lt;br /&gt;
==Multiple similar commands vs single repeated command==&lt;br /&gt;
&lt;br /&gt;
This one is a bit hard to explain, but there is a definite pattern where Vim prefers to give the user multiple similar commands, while Emacs prefers to give a single command that you can then repeat or use creatively. The best way to explain is to give a bunch of examples:&lt;br /&gt;
&lt;br /&gt;
* Changing the screen view relative to cursor: Vim gives you zz to scroll so as to leave the cursor at the center of the screen, zt to scroll and put the cursor at the top, and zb to scroll and put the cursor at the bottom. Emacs just gives you a single command, Ctrl-l, which when repeatedly pressed, will cycle between all three views.&lt;br /&gt;
* Moving cursor to top, middle, bottom: Vim gives you H to move cursor to the top of the screen, M to move to middle, and L to move to bottom. Emacs just gives you Alt-r, which will cycle between the three configurations.&lt;br /&gt;
* Folding: Vim gives you fine-grained commands like zo to open a fold, zc to close a fold, zR to globally reduce the fold level in the file, etc. Emacs as far as I know doesn&amp;#039;t have folding by default, but certain major modes like org-mode and markdown-mode do have folding, and in these, you simply press TAB to cycle the different folding levels, or Shift-TAB to do the cycling globally across the entire file.&lt;br /&gt;
* Vim gives you Y, D, C, to copy, delete, and change (respectively) until the end of the line. Emacs just gives you Ctrl-k, which it then expects you to creatively make use of (e.g. if you want to copy until the end of the line, you do Ctrl-k to delete until the end of the line, then Ctrl-/ to undo).&lt;br /&gt;
* Vim has / to search forward, ? to search backward, then n or N to repeat that search in the same direction or opposite direction. Emacs just has Ctrl-s and Ctrl-r to do the search forward or backward. If you want to repeat the search, you just keep pressing Ctrl-s.&lt;br /&gt;
* When you have multiple split windows, Vim has Ctrl-w followed by h, j, k, or l to move to that window. It also has Ctrl-w followed by w to keep cycling between the splits. It also has Ctrl-w followed by p to toggle between the two most recent splits. There are just a lot of fine-grained choices you can make. Emacs just gives you Ctrl-x o which cycles.&lt;br /&gt;
* Text formatting: Vim gives you two operators, gq and gw, which format text; gq moves the cursor to the end of the formatted text, while gw tries to keep the cursor where it was before the formatting. You can then combine these operators with any motion, e.g. gwip to format the current paragraph, gww to format the current line, gwib to format inside parentheses. Emacs just gives you Alt-q to format the paragraph. It is then up to you to creatively combine that with text selection; you can select some text and then do Alt-q to format just the text that is selected.&lt;br /&gt;
* Copy-pasting: Vim gives you named registers, so if you want to copy two different lines and remember both, you do something like &amp;lt;code&amp;gt;&amp;quot;ayy&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;quot;byy&amp;lt;/code&amp;gt;; then you can paste them with &amp;lt;code&amp;gt;&amp;quot;ap&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;quot;bp&amp;lt;/code&amp;gt;. In Emacs, you instead kill both lines, and then when you go to paste them, you first Ctrl-y to paste the most recent, and then you do Alt-y to cycle between the most recently killed text.&lt;br /&gt;
* Vim has j and k to move down and up by logical lines, and also has gj and gk to move down and up by screen-lines. Emacs only has Ctrl-n and Ctrl-p to move down and up by screen-lines. To move by logical lines, you need to do something creative like Ctrl-e Ctrl-f or Ctrl-a Ctrl-b, or just repeatedly press Ctrl-n or Ctrl-p. &lt;br /&gt;
&lt;br /&gt;
In general, I feel that Vim requires more mental energy to use, in some sense. You need to pick the specific action you wanted to perform. You need to think ahead and decide which registers to use. This also comes from Vim&amp;#039;s modal nature, but Vim gives you more decisions and a grammar, whereas Emacs gives you a way to quickly do the common thing. I think much of this may have been forced on the design of Vim by deciding to be keystroke-based, so that the only way to make some action available in normal mode was to assign some key to it. Whereas Emacs went more in the direction of being functions-first, and once you have functions, it is natural to pass arguments to the function to modify the behavior.&lt;br /&gt;
&lt;br /&gt;
==Word movement: consistent vs &amp;quot;do the common thing&amp;quot;==&lt;br /&gt;
&lt;br /&gt;
Vim&amp;#039;s word-based motions like w, b, and e always treat contiguous alphanumeric sequences as single words, and also treats contiguous symbols as single words. This leads to a very consistent word movement, which means you will never have to backtrack.&lt;br /&gt;
&lt;br /&gt;
Emacs does the thing that most other text editors do, which is that if the cursor is before/on a symbol, then moving forward by one word will not just jump to the end of the symbols, but will jump to the end of the alphanumeric sequence &amp;#039;&amp;#039;after&amp;#039;&amp;#039; the symbols. Emacs caters to the most common thing, and sometimes you need to backtrack.&lt;br /&gt;
&lt;br /&gt;
Suppose you have some text like: &amp;lt;code&amp;gt;Hello, world.&amp;lt;/code&amp;gt; and the cursor is past the final period. You want to add the word &amp;lt;code&amp;gt;there&amp;lt;/code&amp;gt; before the comma, to make it &amp;lt;code&amp;gt;Hello there, world.&amp;lt;/code&amp;gt; In Vim, you press b a few times to move backwards by word, until the cursor is on the comma, at which point you can go into insert mode to type the &amp;quot;there&amp;quot;. In Emacs, Alt-b will move the cursor back by word, but once the cursor is on the &amp;#039;w&amp;#039;, pressing Alt-b again will jump past the comma onto the &amp;#039;H&amp;#039; -- in other words, it overshoots. So then you need to backtrack by pressing Alt-f to move forward by word.&lt;br /&gt;
&lt;br /&gt;
==Scrolling: scrolloff vs scroll-into-view==&lt;br /&gt;
&lt;br /&gt;
In Vim, defaults.vim sets scrolloff=5, which means that when the cursor is at the edge of the window, it will always show 5 lines of context. You can never &amp;quot;touch&amp;quot; the very edge of the screen, because the screen will scroll when you try to move to the edge. (But due to Vim&amp;#039;s line-oriented heritage, this will scroll into view an entire logical line instead of just one visual line.)&lt;br /&gt;
&lt;br /&gt;
In Emacs, the default behavior is instead to jerk the screen to the center &amp;#039;&amp;#039;after&amp;#039;&amp;#039; you step off the edge.&lt;br /&gt;
&lt;br /&gt;
==Search and replace==&lt;br /&gt;
&lt;br /&gt;
Emacs automatically does all the case variants, e.g. if you search and replace foo → bar, it also does Foo → Bar, FOO → Bar, etc. Vim doesn&amp;#039;t do this.&lt;br /&gt;
&lt;br /&gt;
==Prompting the user==&lt;br /&gt;
&lt;br /&gt;
For Vim, see [https://www.reddit.com/r/vim/comments/267vrv/i_am_tim_pope_crafter_of_plugins_ama/chojzsb/].&lt;br /&gt;
&lt;br /&gt;
Emacs often prompts the user.&lt;br /&gt;
&lt;br /&gt;
==Documentation: graph/linear vs tree==&lt;br /&gt;
&lt;br /&gt;
Vim uses a wiki-like help system, where you can click on links to read the sections. It also contains a linear book under :help user-manual. Emacs has a GNU-like hierarchical tree documentation system.&lt;br /&gt;
&lt;br /&gt;
Both have a way to look things up based on keystroke or command name though. Vim has a universal :help command, while Emacs has e.g. Ctrl-h k for keystrokes or Ctrl-h f for functions.&lt;br /&gt;
&lt;br /&gt;
==Selection endpoint==&lt;br /&gt;
&lt;br /&gt;
Vim includes the selection endpoint, whereas Emacs doesn&amp;#039;t. The need to make this decision comes from both editors originating on the terminal with block cursors, rather than the more modern I-beam cursors.&lt;/div&gt;</summary>
		<author><name>Issa</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.issarice.com/index.php?title=Design_philosophies_of_Vim_vs_Emacs&amp;diff=2945</id>
		<title>Design philosophies of Vim vs Emacs</title>
		<link rel="alternate" type="text/html" href="https://wiki.issarice.com/index.php?title=Design_philosophies_of_Vim_vs_Emacs&amp;diff=2945"/>
		<updated>2025-12-01T22:59:06Z</updated>

		<summary type="html">&lt;p&gt;Issa: /* Scrolling: scrolloff vs scroll-into-view */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
==Modal vs chording==&lt;br /&gt;
&lt;br /&gt;
* Atomic edits and the dot command in Vim: When you use Vim, you naturally start to think in terms of repeatable edits that you can then use the &amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt; command to repeat. But this has a side-effect in that Vim requires you to manually chunk your undo history. Emacs instead automatically chunks undos.&lt;br /&gt;
* One consequence of the modal editing is that I think Vim degrades gracefully to having worse keyboards/a less ergonomic setup in general. For example, I bought a fairly crappy external USB keyboard for $25 where if I don&amp;#039;t press the Ctrl key very firmly, sometimes it will not register. This hasn&amp;#039;t been a problem in most software, but &amp;#039;&amp;#039;has&amp;#039;&amp;#039; become a problem when I use Emacs because I need to hold down the Ctrl key a lot for navigating with Ctrl+p and Ctrl+n. In Vim, I don&amp;#039;t have this problem at all because Ctrl just isn&amp;#039;t a key I need to hold down for long periods; it&amp;#039;s something I momentarily hold down, just long enough to press another key. So I have never run into this problem when using Vim (or even Firefox or other software). Emacs is the editor, and really only software, that in some sense &amp;#039;&amp;#039;requires&amp;#039;&amp;#039; me to have a nice keyboard.&lt;br /&gt;
&lt;br /&gt;
==Unix as IDE vs Emacs as OS==&lt;br /&gt;
&lt;br /&gt;
Vim tries to just be a text editor, and tries to play nice with the other tools on your computer, using commands like &amp;lt;code&amp;gt;:!command&amp;lt;/code&amp;gt; (runs external command) or &amp;lt;code&amp;gt;:w !command&amp;lt;/code&amp;gt; (pipes text to external command via stdin) or &amp;lt;code&amp;gt;:r !command&amp;lt;/code&amp;gt; (reads from external command via stdout).&lt;br /&gt;
&lt;br /&gt;
===...with some exceptions===&lt;br /&gt;
&lt;br /&gt;
Vim has a built-in spellchecker, whereas Emacs doesn&amp;#039;t (it does come with flyspell, which works with an external spellchecker like hunspell or aspell). (Emacs comes with tetris, an RPN calculator, an email client, etc., but not a spell-checker!)&lt;br /&gt;
&lt;br /&gt;
==Session management: per project vs single instance==&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;right way&amp;quot; to use Vim is to have one instance of Vim open per &amp;quot;project&amp;quot;. Each Vim instance maintains its own current directory, so you can e.g. open files relative to that current directory.&lt;br /&gt;
&lt;br /&gt;
In Emacs, Emacs itself doesn&amp;#039;t maintain its current directory, and instead all file-open actions are relative to the buffer&amp;#039;s directory.&lt;br /&gt;
&lt;br /&gt;
Vim can do the Emacs thing with :set autochdir, but this is disabled by default.&lt;br /&gt;
&lt;br /&gt;
See [https://nullprogram.com/blog/2017/08/22/ this blog post] for more details.&lt;br /&gt;
&lt;br /&gt;
==Line-based vs character-based==&lt;br /&gt;
&lt;br /&gt;
Vim comes from a lineage of line-based editors. Registers can be linewise or characterwise, which means that actions like pasting text can act on entire lines or on characters. Some commands, like :substitute or :global, only work linewise. This is even reflected in the motion to move up or down a line: by default, j and k move down or up by logical lines instead of screen lines. However, due to this lineage, Vim does not deal well with long lines of text. Recent version of Vim have :set smoothscroll, but this only partially works.&lt;br /&gt;
&lt;br /&gt;
Emacs is like most other text editors in that it has no concept of linewise. Ctrl-n and Ctrl-p move by screen-lines, not logical lines, which makes sense when you think of the buffer of text as a stream of characters rather than an array of lines.&lt;br /&gt;
&lt;br /&gt;
==Mappings: keystroke based vs function-based==&lt;br /&gt;
&lt;br /&gt;
In Vim, commands like &amp;quot;copy text&amp;quot; don&amp;#039;t have a &amp;quot;name&amp;quot;; they are simply the keystroke that is used to perform that action. So if you want to &amp;quot;program&amp;quot; Vim to repeat some action, such as when defining a mapping, you simply tell Vim which keystrokes you want to repeat.&lt;br /&gt;
&lt;br /&gt;
In Emacs, every keystroke, even entering a single character, has a function that is associated with it. Emacs is simply an interpreter that runs the function associated with the keystroke. You can always do Ctrl-h k followed by the keystroke to find which function is bound to that particular keystroke.&lt;br /&gt;
&lt;br /&gt;
==Actions: commands vs keybindings==&lt;br /&gt;
&lt;br /&gt;
Vim often uses the command-line for even common actions, e.g. :w to save a file [https://www.reddit.com/r/vim/comments/267vrv/i_am_tim_pope_crafter_of_plugins_ama/chojzsb/]. Emacs relies more on keybindings, e.g. Ctrl-x Ctrl-s to save a file.&lt;br /&gt;
&lt;br /&gt;
But there are some exceptions. To open the file that the cursor is on, Vim has various keybindings, including &amp;lt;code&amp;gt;gf&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;gF&amp;lt;/code&amp;gt;, Ctrl-w f, etc., but Emacs only has M-x ffap.&lt;br /&gt;
&lt;br /&gt;
==Tree-based undo vs stack-based undo==&lt;br /&gt;
&lt;br /&gt;
==Multiple similar commands vs single repeated command==&lt;br /&gt;
&lt;br /&gt;
This one is a bit hard to explain, but there is a definite pattern where Vim prefers to give the user multiple similar commands, while Emacs prefers to give a single command that you can then repeat or use creatively. The best way to explain is to give a bunch of examples:&lt;br /&gt;
&lt;br /&gt;
* Changing the screen view relative to cursor: Vim gives you zz to scroll so as to leave the cursor at the center of the screen, zt to scroll and put the cursor at the top, and zb to scroll and put the cursor at the bottom. Emacs just gives you a single command, Ctrl-l, which when repeatedly pressed, will cycle between all three views.&lt;br /&gt;
* Moving cursor to top, middle, bottom: Vim gives you H to move cursor to the top of the screen, M to move to middle, and L to move to bottom. Emacs just gives you Alt-r, which will cycle between the three configurations.&lt;br /&gt;
* Folding: Vim gives you fine-grained commands like zo to open a fold, zc to close a fold, zR to globally reduce the fold level in the file, etc. Emacs as far as I know doesn&amp;#039;t have folding by default, but certain major modes like org-mode and markdown-mode do have folding, and in these, you simply press TAB to cycle the different folding levels, or Shift-TAB to do the cycling globally across the entire file.&lt;br /&gt;
* Vim gives you Y, D, C, to copy, delete, and change (respectively) until the end of the line. Emacs just gives you Ctrl-k, which it then expects you to creatively make use of (e.g. if you want to copy until the end of the line, you do Ctrl-k to delete until the end of the line, then Ctrl-/ to undo).&lt;br /&gt;
* Vim has / to search forward, ? to search backward, then n or N to repeat that search in the same direction or opposite direction. Emacs just has Ctrl-s and Ctrl-r to do the search forward or backward. If you want to repeat the search, you just keep pressing Ctrl-s.&lt;br /&gt;
* When you have multiple split windows, Vim has Ctrl-w followed by h, j, k, or l to move to that window. It also has Ctrl-w followed by w to keep cycling between the splits. It also has Ctrl-w followed by p to toggle between the two most recent splits. There are just a lot of fine-grained choices you can make. Emacs just gives you Ctrl-x o which cycles.&lt;br /&gt;
* Text formatting: Vim gives you two operators, gq and gw, which format text; gq moves the cursor to the end of the formatted text, while gw tries to keep the cursor where it was before the formatting. You can then combine these operators with any motion, e.g. gwip to format the current paragraph, gww to format the current line, gwib to format inside parentheses. Emacs just gives you Alt-q to format the paragraph. It is then up to you to creatively combine that with text selection; you can select some text and then do Alt-q to format just the text that is selected.&lt;br /&gt;
* Copy-pasting: Vim gives you named registers, so if you want to copy two different lines and remember both, you do something like &amp;lt;code&amp;gt;&amp;quot;ayy&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;quot;byy&amp;lt;/code&amp;gt;; then you can paste them with &amp;lt;code&amp;gt;&amp;quot;ap&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;quot;bp&amp;lt;/code&amp;gt;. In Emacs, you instead kill both lines, and then when you go to paste them, you first Ctrl-y to paste the most recent, and then you do Alt-y to cycle between the most recently killed text.&lt;br /&gt;
* Vim has j and k to move down and up by logical lines, and also has gj and gk to move down and up by screen-lines. Emacs only has Ctrl-n and Ctrl-p to move down and up by screen-lines. To move by logical lines, you need to do something creative like Ctrl-e Ctrl-f or Ctrl-a Ctrl-b, or just repeatedly press Ctrl-n or Ctrl-p. &lt;br /&gt;
&lt;br /&gt;
In general, I feel that Vim requires more mental energy to use, in some sense. You need to pick the specific action you wanted to perform. You need to think ahead and decide which registers to use. This also comes from Vim&amp;#039;s modal nature, but Vim gives you more decisions and a grammar, whereas Emacs gives you a way to quickly do the common thing. I think much of this may have been forced on the design of Vim by deciding to be keystroke-based, so that the only way to make some action available in normal mode was to assign some key to it. Whereas Emacs went more in the direction of being functions-first, and once you have functions, it is natural to pass arguments to the function to modify the behavior.&lt;br /&gt;
&lt;br /&gt;
==Word movement: consistent vs &amp;quot;do the common thing&amp;quot;==&lt;br /&gt;
&lt;br /&gt;
Vim&amp;#039;s word-based motions like w, b, and e always treat contiguous alphanumeric sequences as single words, and also treats contiguous symbols as single words. This leads to a very consistent word movement, which means you will never have to backtrack.&lt;br /&gt;
&lt;br /&gt;
Emacs does the thing that most other text editors do, which is that if the cursor is before/on a symbol, then moving forward by one word will not just jump to the end of the symbols, but will jump to the end of the alphanumeric sequence &amp;#039;&amp;#039;after&amp;#039;&amp;#039; the symbols. Emacs caters to the most common thing, and sometimes you need to backtrack.&lt;br /&gt;
&lt;br /&gt;
Suppose you have some text like: &amp;lt;code&amp;gt;Hello, world.&amp;lt;/code&amp;gt; and the cursor is past the final period. You want to add the word &amp;lt;code&amp;gt;there&amp;lt;/code&amp;gt; before the comma, to make it &amp;lt;code&amp;gt;Hello there, world.&amp;lt;/code&amp;gt; In Vim, you press b a few times to move backwards by word, until the cursor is on the comma, at which point you can go into insert mode to type the &amp;quot;there&amp;quot;. In Emacs, Alt-b will move the cursor back by word, but once the cursor is on the &amp;#039;w&amp;#039;, pressing Alt-b again will jump past the comma onto the &amp;#039;H&amp;#039; -- in other words, it overshoots. So then you need to backtrack by pressing Alt-f to move forward by word.&lt;br /&gt;
&lt;br /&gt;
==Scrolling: scrolloff vs scroll-into-view==&lt;br /&gt;
&lt;br /&gt;
In Vim, defaults.vim sets scrolloff=5, which means that when the cursor is at the edge of the window, it will always show 5 lines of context. You can never &amp;quot;touch&amp;quot; the very edge of the screen, because the screen will scroll when you try to move to the edge. (But due to Vim&amp;#039;s line-oriented heritage, this will scroll into view an entire logical line instead of just one visual line.)&lt;br /&gt;
&lt;br /&gt;
In Emacs, the default behavior is instead to jerk the screen to the center &amp;#039;&amp;#039;after&amp;#039;&amp;#039; you step off the edge.&lt;br /&gt;
&lt;br /&gt;
==Search and replace==&lt;br /&gt;
&lt;br /&gt;
Emacs automatically does all the case variants, e.g. if you search and replace foo → bar, it also does Foo → Bar, FOO → Bar, etc. Vim doesn&amp;#039;t do this.&lt;br /&gt;
&lt;br /&gt;
==Prompting the user==&lt;br /&gt;
&lt;br /&gt;
For Vim, see [https://www.reddit.com/r/vim/comments/267vrv/i_am_tim_pope_crafter_of_plugins_ama/chojzsb/].&lt;br /&gt;
&lt;br /&gt;
Emacs often prompts the user.&lt;br /&gt;
&lt;br /&gt;
==Documentation: graph/linear vs tree==&lt;br /&gt;
&lt;br /&gt;
Vim uses a wiki-like help system, where you can click on links to read the sections. It also contains a linear book under :help user-manual. Emacs has a GNU-like hierarchical tree documentation system.&lt;br /&gt;
&lt;br /&gt;
Both have a way to look things up based on keystroke or command name though. Vim has a universal :help command, while Emacs has e.g. Ctrl-h k for keystrokes or Ctrl-h f for functions.&lt;br /&gt;
&lt;br /&gt;
==Selection endpoint==&lt;br /&gt;
&lt;br /&gt;
Vim includes the selection endpoint, whereas Emacs doesn&amp;#039;t. The need to make this decision comes from both editors originating on the terminal with block cursors, rather than the more modern I-beam cursors.&lt;/div&gt;</summary>
		<author><name>Issa</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.issarice.com/index.php?title=Design_philosophies_of_Vim_vs_Emacs&amp;diff=2944</id>
		<title>Design philosophies of Vim vs Emacs</title>
		<link rel="alternate" type="text/html" href="https://wiki.issarice.com/index.php?title=Design_philosophies_of_Vim_vs_Emacs&amp;diff=2944"/>
		<updated>2025-12-01T22:55:07Z</updated>

		<summary type="html">&lt;p&gt;Issa: /* Modal vs chording */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
==Modal vs chording==&lt;br /&gt;
&lt;br /&gt;
* Atomic edits and the dot command in Vim: When you use Vim, you naturally start to think in terms of repeatable edits that you can then use the &amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt; command to repeat. But this has a side-effect in that Vim requires you to manually chunk your undo history. Emacs instead automatically chunks undos.&lt;br /&gt;
* One consequence of the modal editing is that I think Vim degrades gracefully to having worse keyboards/a less ergonomic setup in general. For example, I bought a fairly crappy external USB keyboard for $25 where if I don&amp;#039;t press the Ctrl key very firmly, sometimes it will not register. This hasn&amp;#039;t been a problem in most software, but &amp;#039;&amp;#039;has&amp;#039;&amp;#039; become a problem when I use Emacs because I need to hold down the Ctrl key a lot for navigating with Ctrl+p and Ctrl+n. In Vim, I don&amp;#039;t have this problem at all because Ctrl just isn&amp;#039;t a key I need to hold down for long periods; it&amp;#039;s something I momentarily hold down, just long enough to press another key. So I have never run into this problem when using Vim (or even Firefox or other software). Emacs is the editor, and really only software, that in some sense &amp;#039;&amp;#039;requires&amp;#039;&amp;#039; me to have a nice keyboard.&lt;br /&gt;
&lt;br /&gt;
==Unix as IDE vs Emacs as OS==&lt;br /&gt;
&lt;br /&gt;
Vim tries to just be a text editor, and tries to play nice with the other tools on your computer, using commands like &amp;lt;code&amp;gt;:!command&amp;lt;/code&amp;gt; (runs external command) or &amp;lt;code&amp;gt;:w !command&amp;lt;/code&amp;gt; (pipes text to external command via stdin) or &amp;lt;code&amp;gt;:r !command&amp;lt;/code&amp;gt; (reads from external command via stdout).&lt;br /&gt;
&lt;br /&gt;
===...with some exceptions===&lt;br /&gt;
&lt;br /&gt;
Vim has a built-in spellchecker, whereas Emacs doesn&amp;#039;t (it does come with flyspell, which works with an external spellchecker like hunspell or aspell). (Emacs comes with tetris, an RPN calculator, an email client, etc., but not a spell-checker!)&lt;br /&gt;
&lt;br /&gt;
==Session management: per project vs single instance==&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;right way&amp;quot; to use Vim is to have one instance of Vim open per &amp;quot;project&amp;quot;. Each Vim instance maintains its own current directory, so you can e.g. open files relative to that current directory.&lt;br /&gt;
&lt;br /&gt;
In Emacs, Emacs itself doesn&amp;#039;t maintain its current directory, and instead all file-open actions are relative to the buffer&amp;#039;s directory.&lt;br /&gt;
&lt;br /&gt;
Vim can do the Emacs thing with :set autochdir, but this is disabled by default.&lt;br /&gt;
&lt;br /&gt;
See [https://nullprogram.com/blog/2017/08/22/ this blog post] for more details.&lt;br /&gt;
&lt;br /&gt;
==Line-based vs character-based==&lt;br /&gt;
&lt;br /&gt;
Vim comes from a lineage of line-based editors. Registers can be linewise or characterwise, which means that actions like pasting text can act on entire lines or on characters. Some commands, like :substitute or :global, only work linewise. This is even reflected in the motion to move up or down a line: by default, j and k move down or up by logical lines instead of screen lines. However, due to this lineage, Vim does not deal well with long lines of text. Recent version of Vim have :set smoothscroll, but this only partially works.&lt;br /&gt;
&lt;br /&gt;
Emacs is like most other text editors in that it has no concept of linewise. Ctrl-n and Ctrl-p move by screen-lines, not logical lines, which makes sense when you think of the buffer of text as a stream of characters rather than an array of lines.&lt;br /&gt;
&lt;br /&gt;
==Mappings: keystroke based vs function-based==&lt;br /&gt;
&lt;br /&gt;
In Vim, commands like &amp;quot;copy text&amp;quot; don&amp;#039;t have a &amp;quot;name&amp;quot;; they are simply the keystroke that is used to perform that action. So if you want to &amp;quot;program&amp;quot; Vim to repeat some action, such as when defining a mapping, you simply tell Vim which keystrokes you want to repeat.&lt;br /&gt;
&lt;br /&gt;
In Emacs, every keystroke, even entering a single character, has a function that is associated with it. Emacs is simply an interpreter that runs the function associated with the keystroke. You can always do Ctrl-h k followed by the keystroke to find which function is bound to that particular keystroke.&lt;br /&gt;
&lt;br /&gt;
==Actions: commands vs keybindings==&lt;br /&gt;
&lt;br /&gt;
Vim often uses the command-line for even common actions, e.g. :w to save a file [https://www.reddit.com/r/vim/comments/267vrv/i_am_tim_pope_crafter_of_plugins_ama/chojzsb/]. Emacs relies more on keybindings, e.g. Ctrl-x Ctrl-s to save a file.&lt;br /&gt;
&lt;br /&gt;
But there are some exceptions. To open the file that the cursor is on, Vim has various keybindings, including &amp;lt;code&amp;gt;gf&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;gF&amp;lt;/code&amp;gt;, Ctrl-w f, etc., but Emacs only has M-x ffap.&lt;br /&gt;
&lt;br /&gt;
==Tree-based undo vs stack-based undo==&lt;br /&gt;
&lt;br /&gt;
==Multiple similar commands vs single repeated command==&lt;br /&gt;
&lt;br /&gt;
This one is a bit hard to explain, but there is a definite pattern where Vim prefers to give the user multiple similar commands, while Emacs prefers to give a single command that you can then repeat or use creatively. The best way to explain is to give a bunch of examples:&lt;br /&gt;
&lt;br /&gt;
* Changing the screen view relative to cursor: Vim gives you zz to scroll so as to leave the cursor at the center of the screen, zt to scroll and put the cursor at the top, and zb to scroll and put the cursor at the bottom. Emacs just gives you a single command, Ctrl-l, which when repeatedly pressed, will cycle between all three views.&lt;br /&gt;
* Moving cursor to top, middle, bottom: Vim gives you H to move cursor to the top of the screen, M to move to middle, and L to move to bottom. Emacs just gives you Alt-r, which will cycle between the three configurations.&lt;br /&gt;
* Folding: Vim gives you fine-grained commands like zo to open a fold, zc to close a fold, zR to globally reduce the fold level in the file, etc. Emacs as far as I know doesn&amp;#039;t have folding by default, but certain major modes like org-mode and markdown-mode do have folding, and in these, you simply press TAB to cycle the different folding levels, or Shift-TAB to do the cycling globally across the entire file.&lt;br /&gt;
* Vim gives you Y, D, C, to copy, delete, and change (respectively) until the end of the line. Emacs just gives you Ctrl-k, which it then expects you to creatively make use of (e.g. if you want to copy until the end of the line, you do Ctrl-k to delete until the end of the line, then Ctrl-/ to undo).&lt;br /&gt;
* Vim has / to search forward, ? to search backward, then n or N to repeat that search in the same direction or opposite direction. Emacs just has Ctrl-s and Ctrl-r to do the search forward or backward. If you want to repeat the search, you just keep pressing Ctrl-s.&lt;br /&gt;
* When you have multiple split windows, Vim has Ctrl-w followed by h, j, k, or l to move to that window. It also has Ctrl-w followed by w to keep cycling between the splits. It also has Ctrl-w followed by p to toggle between the two most recent splits. There are just a lot of fine-grained choices you can make. Emacs just gives you Ctrl-x o which cycles.&lt;br /&gt;
* Text formatting: Vim gives you two operators, gq and gw, which format text; gq moves the cursor to the end of the formatted text, while gw tries to keep the cursor where it was before the formatting. You can then combine these operators with any motion, e.g. gwip to format the current paragraph, gww to format the current line, gwib to format inside parentheses. Emacs just gives you Alt-q to format the paragraph. It is then up to you to creatively combine that with text selection; you can select some text and then do Alt-q to format just the text that is selected.&lt;br /&gt;
* Copy-pasting: Vim gives you named registers, so if you want to copy two different lines and remember both, you do something like &amp;lt;code&amp;gt;&amp;quot;ayy&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;quot;byy&amp;lt;/code&amp;gt;; then you can paste them with &amp;lt;code&amp;gt;&amp;quot;ap&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;quot;bp&amp;lt;/code&amp;gt;. In Emacs, you instead kill both lines, and then when you go to paste them, you first Ctrl-y to paste the most recent, and then you do Alt-y to cycle between the most recently killed text.&lt;br /&gt;
* Vim has j and k to move down and up by logical lines, and also has gj and gk to move down and up by screen-lines. Emacs only has Ctrl-n and Ctrl-p to move down and up by screen-lines. To move by logical lines, you need to do something creative like Ctrl-e Ctrl-f or Ctrl-a Ctrl-b, or just repeatedly press Ctrl-n or Ctrl-p. &lt;br /&gt;
&lt;br /&gt;
In general, I feel that Vim requires more mental energy to use, in some sense. You need to pick the specific action you wanted to perform. You need to think ahead and decide which registers to use. This also comes from Vim&amp;#039;s modal nature, but Vim gives you more decisions and a grammar, whereas Emacs gives you a way to quickly do the common thing. I think much of this may have been forced on the design of Vim by deciding to be keystroke-based, so that the only way to make some action available in normal mode was to assign some key to it. Whereas Emacs went more in the direction of being functions-first, and once you have functions, it is natural to pass arguments to the function to modify the behavior.&lt;br /&gt;
&lt;br /&gt;
==Word movement: consistent vs &amp;quot;do the common thing&amp;quot;==&lt;br /&gt;
&lt;br /&gt;
Vim&amp;#039;s word-based motions like w, b, and e always treat contiguous alphanumeric sequences as single words, and also treats contiguous symbols as single words. This leads to a very consistent word movement, which means you will never have to backtrack.&lt;br /&gt;
&lt;br /&gt;
Emacs does the thing that most other text editors do, which is that if the cursor is before/on a symbol, then moving forward by one word will not just jump to the end of the symbols, but will jump to the end of the alphanumeric sequence &amp;#039;&amp;#039;after&amp;#039;&amp;#039; the symbols. Emacs caters to the most common thing, and sometimes you need to backtrack.&lt;br /&gt;
&lt;br /&gt;
Suppose you have some text like: &amp;lt;code&amp;gt;Hello, world.&amp;lt;/code&amp;gt; and the cursor is past the final period. You want to add the word &amp;lt;code&amp;gt;there&amp;lt;/code&amp;gt; before the comma, to make it &amp;lt;code&amp;gt;Hello there, world.&amp;lt;/code&amp;gt; In Vim, you press b a few times to move backwards by word, until the cursor is on the comma, at which point you can go into insert mode to type the &amp;quot;there&amp;quot;. In Emacs, Alt-b will move the cursor back by word, but once the cursor is on the &amp;#039;w&amp;#039;, pressing Alt-b again will jump past the comma onto the &amp;#039;H&amp;#039; -- in other words, it overshoots. So then you need to backtrack by pressing Alt-f to move forward by word.&lt;br /&gt;
&lt;br /&gt;
==Scrolling: scrolloff vs scroll-into-view==&lt;br /&gt;
&lt;br /&gt;
In Vim, defaults.vim sets scrolloff=5, which means that when the cursor is at the edge of the window, it will always show 5 lines of context. You can never &amp;quot;touch&amp;quot; the very edge of the screen, because the screen will scroll when you try to move to the edge.&lt;br /&gt;
&lt;br /&gt;
In Emacs, the default behavior is instead to jerk the screen to the center &amp;#039;&amp;#039;after&amp;#039;&amp;#039; you step off the edge.&lt;br /&gt;
&lt;br /&gt;
==Search and replace==&lt;br /&gt;
&lt;br /&gt;
Emacs automatically does all the case variants, e.g. if you search and replace foo → bar, it also does Foo → Bar, FOO → Bar, etc. Vim doesn&amp;#039;t do this.&lt;br /&gt;
&lt;br /&gt;
==Prompting the user==&lt;br /&gt;
&lt;br /&gt;
For Vim, see [https://www.reddit.com/r/vim/comments/267vrv/i_am_tim_pope_crafter_of_plugins_ama/chojzsb/].&lt;br /&gt;
&lt;br /&gt;
Emacs often prompts the user.&lt;br /&gt;
&lt;br /&gt;
==Documentation: graph/linear vs tree==&lt;br /&gt;
&lt;br /&gt;
Vim uses a wiki-like help system, where you can click on links to read the sections. It also contains a linear book under :help user-manual. Emacs has a GNU-like hierarchical tree documentation system.&lt;br /&gt;
&lt;br /&gt;
Both have a way to look things up based on keystroke or command name though. Vim has a universal :help command, while Emacs has e.g. Ctrl-h k for keystrokes or Ctrl-h f for functions.&lt;br /&gt;
&lt;br /&gt;
==Selection endpoint==&lt;br /&gt;
&lt;br /&gt;
Vim includes the selection endpoint, whereas Emacs doesn&amp;#039;t. The need to make this decision comes from both editors originating on the terminal with block cursors, rather than the more modern I-beam cursors.&lt;/div&gt;</summary>
		<author><name>Issa</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.issarice.com/index.php?title=Design_philosophies_of_Vim_vs_Emacs&amp;diff=2943</id>
		<title>Design philosophies of Vim vs Emacs</title>
		<link rel="alternate" type="text/html" href="https://wiki.issarice.com/index.php?title=Design_philosophies_of_Vim_vs_Emacs&amp;diff=2943"/>
		<updated>2025-11-27T21:35:06Z</updated>

		<summary type="html">&lt;p&gt;Issa: /* Line-based vs character-based */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
==Modal vs chording==&lt;br /&gt;
&lt;br /&gt;
* Atomic edits and the dot command in Vim: When you use Vim, you naturally start to think in terms of repeatable edits that you can then use the &amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt; command to repeat. But this has a side-effect in that Vim requires you to manually chunk your undo history. Emacs instead automatically chunks undos.&lt;br /&gt;
&lt;br /&gt;
==Unix as IDE vs Emacs as OS==&lt;br /&gt;
&lt;br /&gt;
Vim tries to just be a text editor, and tries to play nice with the other tools on your computer, using commands like &amp;lt;code&amp;gt;:!command&amp;lt;/code&amp;gt; (runs external command) or &amp;lt;code&amp;gt;:w !command&amp;lt;/code&amp;gt; (pipes text to external command via stdin) or &amp;lt;code&amp;gt;:r !command&amp;lt;/code&amp;gt; (reads from external command via stdout).&lt;br /&gt;
&lt;br /&gt;
===...with some exceptions===&lt;br /&gt;
&lt;br /&gt;
Vim has a built-in spellchecker, whereas Emacs doesn&amp;#039;t (it does come with flyspell, which works with an external spellchecker like hunspell or aspell). (Emacs comes with tetris, an RPN calculator, an email client, etc., but not a spell-checker!)&lt;br /&gt;
&lt;br /&gt;
==Session management: per project vs single instance==&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;right way&amp;quot; to use Vim is to have one instance of Vim open per &amp;quot;project&amp;quot;. Each Vim instance maintains its own current directory, so you can e.g. open files relative to that current directory.&lt;br /&gt;
&lt;br /&gt;
In Emacs, Emacs itself doesn&amp;#039;t maintain its current directory, and instead all file-open actions are relative to the buffer&amp;#039;s directory.&lt;br /&gt;
&lt;br /&gt;
Vim can do the Emacs thing with :set autochdir, but this is disabled by default.&lt;br /&gt;
&lt;br /&gt;
See [https://nullprogram.com/blog/2017/08/22/ this blog post] for more details.&lt;br /&gt;
&lt;br /&gt;
==Line-based vs character-based==&lt;br /&gt;
&lt;br /&gt;
Vim comes from a lineage of line-based editors. Registers can be linewise or characterwise, which means that actions like pasting text can act on entire lines or on characters. Some commands, like :substitute or :global, only work linewise. This is even reflected in the motion to move up or down a line: by default, j and k move down or up by logical lines instead of screen lines. However, due to this lineage, Vim does not deal well with long lines of text. Recent version of Vim have :set smoothscroll, but this only partially works.&lt;br /&gt;
&lt;br /&gt;
Emacs is like most other text editors in that it has no concept of linewise. Ctrl-n and Ctrl-p move by screen-lines, not logical lines, which makes sense when you think of the buffer of text as a stream of characters rather than an array of lines.&lt;br /&gt;
&lt;br /&gt;
==Mappings: keystroke based vs function-based==&lt;br /&gt;
&lt;br /&gt;
In Vim, commands like &amp;quot;copy text&amp;quot; don&amp;#039;t have a &amp;quot;name&amp;quot;; they are simply the keystroke that is used to perform that action. So if you want to &amp;quot;program&amp;quot; Vim to repeat some action, such as when defining a mapping, you simply tell Vim which keystrokes you want to repeat.&lt;br /&gt;
&lt;br /&gt;
In Emacs, every keystroke, even entering a single character, has a function that is associated with it. Emacs is simply an interpreter that runs the function associated with the keystroke. You can always do Ctrl-h k followed by the keystroke to find which function is bound to that particular keystroke.&lt;br /&gt;
&lt;br /&gt;
==Actions: commands vs keybindings==&lt;br /&gt;
&lt;br /&gt;
Vim often uses the command-line for even common actions, e.g. :w to save a file [https://www.reddit.com/r/vim/comments/267vrv/i_am_tim_pope_crafter_of_plugins_ama/chojzsb/]. Emacs relies more on keybindings, e.g. Ctrl-x Ctrl-s to save a file.&lt;br /&gt;
&lt;br /&gt;
But there are some exceptions. To open the file that the cursor is on, Vim has various keybindings, including &amp;lt;code&amp;gt;gf&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;gF&amp;lt;/code&amp;gt;, Ctrl-w f, etc., but Emacs only has M-x ffap.&lt;br /&gt;
&lt;br /&gt;
==Tree-based undo vs stack-based undo==&lt;br /&gt;
&lt;br /&gt;
==Multiple similar commands vs single repeated command==&lt;br /&gt;
&lt;br /&gt;
This one is a bit hard to explain, but there is a definite pattern where Vim prefers to give the user multiple similar commands, while Emacs prefers to give a single command that you can then repeat or use creatively. The best way to explain is to give a bunch of examples:&lt;br /&gt;
&lt;br /&gt;
* Changing the screen view relative to cursor: Vim gives you zz to scroll so as to leave the cursor at the center of the screen, zt to scroll and put the cursor at the top, and zb to scroll and put the cursor at the bottom. Emacs just gives you a single command, Ctrl-l, which when repeatedly pressed, will cycle between all three views.&lt;br /&gt;
* Moving cursor to top, middle, bottom: Vim gives you H to move cursor to the top of the screen, M to move to middle, and L to move to bottom. Emacs just gives you Alt-r, which will cycle between the three configurations.&lt;br /&gt;
* Folding: Vim gives you fine-grained commands like zo to open a fold, zc to close a fold, zR to globally reduce the fold level in the file, etc. Emacs as far as I know doesn&amp;#039;t have folding by default, but certain major modes like org-mode and markdown-mode do have folding, and in these, you simply press TAB to cycle the different folding levels, or Shift-TAB to do the cycling globally across the entire file.&lt;br /&gt;
* Vim gives you Y, D, C, to copy, delete, and change (respectively) until the end of the line. Emacs just gives you Ctrl-k, which it then expects you to creatively make use of (e.g. if you want to copy until the end of the line, you do Ctrl-k to delete until the end of the line, then Ctrl-/ to undo).&lt;br /&gt;
* Vim has / to search forward, ? to search backward, then n or N to repeat that search in the same direction or opposite direction. Emacs just has Ctrl-s and Ctrl-r to do the search forward or backward. If you want to repeat the search, you just keep pressing Ctrl-s.&lt;br /&gt;
* When you have multiple split windows, Vim has Ctrl-w followed by h, j, k, or l to move to that window. It also has Ctrl-w followed by w to keep cycling between the splits. It also has Ctrl-w followed by p to toggle between the two most recent splits. There are just a lot of fine-grained choices you can make. Emacs just gives you Ctrl-x o which cycles.&lt;br /&gt;
* Text formatting: Vim gives you two operators, gq and gw, which format text; gq moves the cursor to the end of the formatted text, while gw tries to keep the cursor where it was before the formatting. You can then combine these operators with any motion, e.g. gwip to format the current paragraph, gww to format the current line, gwib to format inside parentheses. Emacs just gives you Alt-q to format the paragraph. It is then up to you to creatively combine that with text selection; you can select some text and then do Alt-q to format just the text that is selected.&lt;br /&gt;
* Copy-pasting: Vim gives you named registers, so if you want to copy two different lines and remember both, you do something like &amp;lt;code&amp;gt;&amp;quot;ayy&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;quot;byy&amp;lt;/code&amp;gt;; then you can paste them with &amp;lt;code&amp;gt;&amp;quot;ap&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;quot;bp&amp;lt;/code&amp;gt;. In Emacs, you instead kill both lines, and then when you go to paste them, you first Ctrl-y to paste the most recent, and then you do Alt-y to cycle between the most recently killed text.&lt;br /&gt;
* Vim has j and k to move down and up by logical lines, and also has gj and gk to move down and up by screen-lines. Emacs only has Ctrl-n and Ctrl-p to move down and up by screen-lines. To move by logical lines, you need to do something creative like Ctrl-e Ctrl-f or Ctrl-a Ctrl-b, or just repeatedly press Ctrl-n or Ctrl-p. &lt;br /&gt;
&lt;br /&gt;
In general, I feel that Vim requires more mental energy to use, in some sense. You need to pick the specific action you wanted to perform. You need to think ahead and decide which registers to use. This also comes from Vim&amp;#039;s modal nature, but Vim gives you more decisions and a grammar, whereas Emacs gives you a way to quickly do the common thing. I think much of this may have been forced on the design of Vim by deciding to be keystroke-based, so that the only way to make some action available in normal mode was to assign some key to it. Whereas Emacs went more in the direction of being functions-first, and once you have functions, it is natural to pass arguments to the function to modify the behavior.&lt;br /&gt;
&lt;br /&gt;
==Word movement: consistent vs &amp;quot;do the common thing&amp;quot;==&lt;br /&gt;
&lt;br /&gt;
Vim&amp;#039;s word-based motions like w, b, and e always treat contiguous alphanumeric sequences as single words, and also treats contiguous symbols as single words. This leads to a very consistent word movement, which means you will never have to backtrack.&lt;br /&gt;
&lt;br /&gt;
Emacs does the thing that most other text editors do, which is that if the cursor is before/on a symbol, then moving forward by one word will not just jump to the end of the symbols, but will jump to the end of the alphanumeric sequence &amp;#039;&amp;#039;after&amp;#039;&amp;#039; the symbols. Emacs caters to the most common thing, and sometimes you need to backtrack.&lt;br /&gt;
&lt;br /&gt;
Suppose you have some text like: &amp;lt;code&amp;gt;Hello, world.&amp;lt;/code&amp;gt; and the cursor is past the final period. You want to add the word &amp;lt;code&amp;gt;there&amp;lt;/code&amp;gt; before the comma, to make it &amp;lt;code&amp;gt;Hello there, world.&amp;lt;/code&amp;gt; In Vim, you press b a few times to move backwards by word, until the cursor is on the comma, at which point you can go into insert mode to type the &amp;quot;there&amp;quot;. In Emacs, Alt-b will move the cursor back by word, but once the cursor is on the &amp;#039;w&amp;#039;, pressing Alt-b again will jump past the comma onto the &amp;#039;H&amp;#039; -- in other words, it overshoots. So then you need to backtrack by pressing Alt-f to move forward by word.&lt;br /&gt;
&lt;br /&gt;
==Scrolling: scrolloff vs scroll-into-view==&lt;br /&gt;
&lt;br /&gt;
In Vim, defaults.vim sets scrolloff=5, which means that when the cursor is at the edge of the window, it will always show 5 lines of context. You can never &amp;quot;touch&amp;quot; the very edge of the screen, because the screen will scroll when you try to move to the edge.&lt;br /&gt;
&lt;br /&gt;
In Emacs, the default behavior is instead to jerk the screen to the center &amp;#039;&amp;#039;after&amp;#039;&amp;#039; you step off the edge.&lt;br /&gt;
&lt;br /&gt;
==Search and replace==&lt;br /&gt;
&lt;br /&gt;
Emacs automatically does all the case variants, e.g. if you search and replace foo → bar, it also does Foo → Bar, FOO → Bar, etc. Vim doesn&amp;#039;t do this.&lt;br /&gt;
&lt;br /&gt;
==Prompting the user==&lt;br /&gt;
&lt;br /&gt;
For Vim, see [https://www.reddit.com/r/vim/comments/267vrv/i_am_tim_pope_crafter_of_plugins_ama/chojzsb/].&lt;br /&gt;
&lt;br /&gt;
Emacs often prompts the user.&lt;br /&gt;
&lt;br /&gt;
==Documentation: graph/linear vs tree==&lt;br /&gt;
&lt;br /&gt;
Vim uses a wiki-like help system, where you can click on links to read the sections. It also contains a linear book under :help user-manual. Emacs has a GNU-like hierarchical tree documentation system.&lt;br /&gt;
&lt;br /&gt;
Both have a way to look things up based on keystroke or command name though. Vim has a universal :help command, while Emacs has e.g. Ctrl-h k for keystrokes or Ctrl-h f for functions.&lt;br /&gt;
&lt;br /&gt;
==Selection endpoint==&lt;br /&gt;
&lt;br /&gt;
Vim includes the selection endpoint, whereas Emacs doesn&amp;#039;t. The need to make this decision comes from both editors originating on the terminal with block cursors, rather than the more modern I-beam cursors.&lt;/div&gt;</summary>
		<author><name>Issa</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.issarice.com/index.php?title=Design_philosophies_of_Vim_vs_Emacs&amp;diff=2942</id>
		<title>Design philosophies of Vim vs Emacs</title>
		<link rel="alternate" type="text/html" href="https://wiki.issarice.com/index.php?title=Design_philosophies_of_Vim_vs_Emacs&amp;diff=2942"/>
		<updated>2025-11-27T21:08:16Z</updated>

		<summary type="html">&lt;p&gt;Issa: /* Word movement: predictable vs &amp;quot;do the common thing&amp;quot; */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
==Modal vs chording==&lt;br /&gt;
&lt;br /&gt;
* Atomic edits and the dot command in Vim: When you use Vim, you naturally start to think in terms of repeatable edits that you can then use the &amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt; command to repeat. But this has a side-effect in that Vim requires you to manually chunk your undo history. Emacs instead automatically chunks undos.&lt;br /&gt;
&lt;br /&gt;
==Unix as IDE vs Emacs as OS==&lt;br /&gt;
&lt;br /&gt;
Vim tries to just be a text editor, and tries to play nice with the other tools on your computer, using commands like &amp;lt;code&amp;gt;:!command&amp;lt;/code&amp;gt; (runs external command) or &amp;lt;code&amp;gt;:w !command&amp;lt;/code&amp;gt; (pipes text to external command via stdin) or &amp;lt;code&amp;gt;:r !command&amp;lt;/code&amp;gt; (reads from external command via stdout).&lt;br /&gt;
&lt;br /&gt;
===...with some exceptions===&lt;br /&gt;
&lt;br /&gt;
Vim has a built-in spellchecker, whereas Emacs doesn&amp;#039;t (it does come with flyspell, which works with an external spellchecker like hunspell or aspell). (Emacs comes with tetris, an RPN calculator, an email client, etc., but not a spell-checker!)&lt;br /&gt;
&lt;br /&gt;
==Session management: per project vs single instance==&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;right way&amp;quot; to use Vim is to have one instance of Vim open per &amp;quot;project&amp;quot;. Each Vim instance maintains its own current directory, so you can e.g. open files relative to that current directory.&lt;br /&gt;
&lt;br /&gt;
In Emacs, Emacs itself doesn&amp;#039;t maintain its current directory, and instead all file-open actions are relative to the buffer&amp;#039;s directory.&lt;br /&gt;
&lt;br /&gt;
Vim can do the Emacs thing with :set autochdir, but this is disabled by default.&lt;br /&gt;
&lt;br /&gt;
See [https://nullprogram.com/blog/2017/08/22/ this blog post] for more details.&lt;br /&gt;
&lt;br /&gt;
==Line-based vs character-based==&lt;br /&gt;
&lt;br /&gt;
Vim comes from a lineage of line-based editors. Registers can be linewise or characterwise, which means that actions like pasting text can act on entire lines or on characters. Some commands, like :substitute or :global, only work linewise. This is even reflected in the motion to move up or down a line: by default, j and k move down or up by logical lines instead of screen lines.&lt;br /&gt;
&lt;br /&gt;
Emacs is like most other text editors in that it has no concept of linewise. Ctrl-n and Ctrl-p move by screen-lines, not logical lines, which makes sense when you think of the buffer of text as a stream of characters rather than an array of lines.&lt;br /&gt;
&lt;br /&gt;
==Mappings: keystroke based vs function-based==&lt;br /&gt;
&lt;br /&gt;
In Vim, commands like &amp;quot;copy text&amp;quot; don&amp;#039;t have a &amp;quot;name&amp;quot;; they are simply the keystroke that is used to perform that action. So if you want to &amp;quot;program&amp;quot; Vim to repeat some action, such as when defining a mapping, you simply tell Vim which keystrokes you want to repeat.&lt;br /&gt;
&lt;br /&gt;
In Emacs, every keystroke, even entering a single character, has a function that is associated with it. Emacs is simply an interpreter that runs the function associated with the keystroke. You can always do Ctrl-h k followed by the keystroke to find which function is bound to that particular keystroke.&lt;br /&gt;
&lt;br /&gt;
==Actions: commands vs keybindings==&lt;br /&gt;
&lt;br /&gt;
Vim often uses the command-line for even common actions, e.g. :w to save a file [https://www.reddit.com/r/vim/comments/267vrv/i_am_tim_pope_crafter_of_plugins_ama/chojzsb/]. Emacs relies more on keybindings, e.g. Ctrl-x Ctrl-s to save a file.&lt;br /&gt;
&lt;br /&gt;
But there are some exceptions. To open the file that the cursor is on, Vim has various keybindings, including &amp;lt;code&amp;gt;gf&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;gF&amp;lt;/code&amp;gt;, Ctrl-w f, etc., but Emacs only has M-x ffap.&lt;br /&gt;
&lt;br /&gt;
==Tree-based undo vs stack-based undo==&lt;br /&gt;
&lt;br /&gt;
==Multiple similar commands vs single repeated command==&lt;br /&gt;
&lt;br /&gt;
This one is a bit hard to explain, but there is a definite pattern where Vim prefers to give the user multiple similar commands, while Emacs prefers to give a single command that you can then repeat or use creatively. The best way to explain is to give a bunch of examples:&lt;br /&gt;
&lt;br /&gt;
* Changing the screen view relative to cursor: Vim gives you zz to scroll so as to leave the cursor at the center of the screen, zt to scroll and put the cursor at the top, and zb to scroll and put the cursor at the bottom. Emacs just gives you a single command, Ctrl-l, which when repeatedly pressed, will cycle between all three views.&lt;br /&gt;
* Moving cursor to top, middle, bottom: Vim gives you H to move cursor to the top of the screen, M to move to middle, and L to move to bottom. Emacs just gives you Alt-r, which will cycle between the three configurations.&lt;br /&gt;
* Folding: Vim gives you fine-grained commands like zo to open a fold, zc to close a fold, zR to globally reduce the fold level in the file, etc. Emacs as far as I know doesn&amp;#039;t have folding by default, but certain major modes like org-mode and markdown-mode do have folding, and in these, you simply press TAB to cycle the different folding levels, or Shift-TAB to do the cycling globally across the entire file.&lt;br /&gt;
* Vim gives you Y, D, C, to copy, delete, and change (respectively) until the end of the line. Emacs just gives you Ctrl-k, which it then expects you to creatively make use of (e.g. if you want to copy until the end of the line, you do Ctrl-k to delete until the end of the line, then Ctrl-/ to undo).&lt;br /&gt;
* Vim has / to search forward, ? to search backward, then n or N to repeat that search in the same direction or opposite direction. Emacs just has Ctrl-s and Ctrl-r to do the search forward or backward. If you want to repeat the search, you just keep pressing Ctrl-s.&lt;br /&gt;
* When you have multiple split windows, Vim has Ctrl-w followed by h, j, k, or l to move to that window. It also has Ctrl-w followed by w to keep cycling between the splits. It also has Ctrl-w followed by p to toggle between the two most recent splits. There are just a lot of fine-grained choices you can make. Emacs just gives you Ctrl-x o which cycles.&lt;br /&gt;
* Text formatting: Vim gives you two operators, gq and gw, which format text; gq moves the cursor to the end of the formatted text, while gw tries to keep the cursor where it was before the formatting. You can then combine these operators with any motion, e.g. gwip to format the current paragraph, gww to format the current line, gwib to format inside parentheses. Emacs just gives you Alt-q to format the paragraph. It is then up to you to creatively combine that with text selection; you can select some text and then do Alt-q to format just the text that is selected.&lt;br /&gt;
* Copy-pasting: Vim gives you named registers, so if you want to copy two different lines and remember both, you do something like &amp;lt;code&amp;gt;&amp;quot;ayy&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;quot;byy&amp;lt;/code&amp;gt;; then you can paste them with &amp;lt;code&amp;gt;&amp;quot;ap&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;quot;bp&amp;lt;/code&amp;gt;. In Emacs, you instead kill both lines, and then when you go to paste them, you first Ctrl-y to paste the most recent, and then you do Alt-y to cycle between the most recently killed text.&lt;br /&gt;
* Vim has j and k to move down and up by logical lines, and also has gj and gk to move down and up by screen-lines. Emacs only has Ctrl-n and Ctrl-p to move down and up by screen-lines. To move by logical lines, you need to do something creative like Ctrl-e Ctrl-f or Ctrl-a Ctrl-b, or just repeatedly press Ctrl-n or Ctrl-p. &lt;br /&gt;
&lt;br /&gt;
In general, I feel that Vim requires more mental energy to use, in some sense. You need to pick the specific action you wanted to perform. You need to think ahead and decide which registers to use. This also comes from Vim&amp;#039;s modal nature, but Vim gives you more decisions and a grammar, whereas Emacs gives you a way to quickly do the common thing. I think much of this may have been forced on the design of Vim by deciding to be keystroke-based, so that the only way to make some action available in normal mode was to assign some key to it. Whereas Emacs went more in the direction of being functions-first, and once you have functions, it is natural to pass arguments to the function to modify the behavior.&lt;br /&gt;
&lt;br /&gt;
==Word movement: consistent vs &amp;quot;do the common thing&amp;quot;==&lt;br /&gt;
&lt;br /&gt;
Vim&amp;#039;s word-based motions like w, b, and e always treat contiguous alphanumeric sequences as single words, and also treats contiguous symbols as single words. This leads to a very consistent word movement, which means you will never have to backtrack.&lt;br /&gt;
&lt;br /&gt;
Emacs does the thing that most other text editors do, which is that if the cursor is before/on a symbol, then moving forward by one word will not just jump to the end of the symbols, but will jump to the end of the alphanumeric sequence &amp;#039;&amp;#039;after&amp;#039;&amp;#039; the symbols. Emacs caters to the most common thing, and sometimes you need to backtrack.&lt;br /&gt;
&lt;br /&gt;
Suppose you have some text like: &amp;lt;code&amp;gt;Hello, world.&amp;lt;/code&amp;gt; and the cursor is past the final period. You want to add the word &amp;lt;code&amp;gt;there&amp;lt;/code&amp;gt; before the comma, to make it &amp;lt;code&amp;gt;Hello there, world.&amp;lt;/code&amp;gt; In Vim, you press b a few times to move backwards by word, until the cursor is on the comma, at which point you can go into insert mode to type the &amp;quot;there&amp;quot;. In Emacs, Alt-b will move the cursor back by word, but once the cursor is on the &amp;#039;w&amp;#039;, pressing Alt-b again will jump past the comma onto the &amp;#039;H&amp;#039; -- in other words, it overshoots. So then you need to backtrack by pressing Alt-f to move forward by word.&lt;br /&gt;
&lt;br /&gt;
==Scrolling: scrolloff vs scroll-into-view==&lt;br /&gt;
&lt;br /&gt;
In Vim, defaults.vim sets scrolloff=5, which means that when the cursor is at the edge of the window, it will always show 5 lines of context. You can never &amp;quot;touch&amp;quot; the very edge of the screen, because the screen will scroll when you try to move to the edge.&lt;br /&gt;
&lt;br /&gt;
In Emacs, the default behavior is instead to jerk the screen to the center &amp;#039;&amp;#039;after&amp;#039;&amp;#039; you step off the edge.&lt;br /&gt;
&lt;br /&gt;
==Search and replace==&lt;br /&gt;
&lt;br /&gt;
Emacs automatically does all the case variants, e.g. if you search and replace foo → bar, it also does Foo → Bar, FOO → Bar, etc. Vim doesn&amp;#039;t do this.&lt;br /&gt;
&lt;br /&gt;
==Prompting the user==&lt;br /&gt;
&lt;br /&gt;
For Vim, see [https://www.reddit.com/r/vim/comments/267vrv/i_am_tim_pope_crafter_of_plugins_ama/chojzsb/].&lt;br /&gt;
&lt;br /&gt;
Emacs often prompts the user.&lt;br /&gt;
&lt;br /&gt;
==Documentation: graph/linear vs tree==&lt;br /&gt;
&lt;br /&gt;
Vim uses a wiki-like help system, where you can click on links to read the sections. It also contains a linear book under :help user-manual. Emacs has a GNU-like hierarchical tree documentation system.&lt;br /&gt;
&lt;br /&gt;
Both have a way to look things up based on keystroke or command name though. Vim has a universal :help command, while Emacs has e.g. Ctrl-h k for keystrokes or Ctrl-h f for functions.&lt;br /&gt;
&lt;br /&gt;
==Selection endpoint==&lt;br /&gt;
&lt;br /&gt;
Vim includes the selection endpoint, whereas Emacs doesn&amp;#039;t. The need to make this decision comes from both editors originating on the terminal with block cursors, rather than the more modern I-beam cursors.&lt;/div&gt;</summary>
		<author><name>Issa</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.issarice.com/index.php?title=Design_philosophies_of_Vim_vs_Emacs&amp;diff=2941</id>
		<title>Design philosophies of Vim vs Emacs</title>
		<link rel="alternate" type="text/html" href="https://wiki.issarice.com/index.php?title=Design_philosophies_of_Vim_vs_Emacs&amp;diff=2941"/>
		<updated>2025-11-27T21:00:44Z</updated>

		<summary type="html">&lt;p&gt;Issa: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
==Modal vs chording==&lt;br /&gt;
&lt;br /&gt;
* Atomic edits and the dot command in Vim: When you use Vim, you naturally start to think in terms of repeatable edits that you can then use the &amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt; command to repeat. But this has a side-effect in that Vim requires you to manually chunk your undo history. Emacs instead automatically chunks undos.&lt;br /&gt;
&lt;br /&gt;
==Unix as IDE vs Emacs as OS==&lt;br /&gt;
&lt;br /&gt;
Vim tries to just be a text editor, and tries to play nice with the other tools on your computer, using commands like &amp;lt;code&amp;gt;:!command&amp;lt;/code&amp;gt; (runs external command) or &amp;lt;code&amp;gt;:w !command&amp;lt;/code&amp;gt; (pipes text to external command via stdin) or &amp;lt;code&amp;gt;:r !command&amp;lt;/code&amp;gt; (reads from external command via stdout).&lt;br /&gt;
&lt;br /&gt;
===...with some exceptions===&lt;br /&gt;
&lt;br /&gt;
Vim has a built-in spellchecker, whereas Emacs doesn&amp;#039;t (it does come with flyspell, which works with an external spellchecker like hunspell or aspell). (Emacs comes with tetris, an RPN calculator, an email client, etc., but not a spell-checker!)&lt;br /&gt;
&lt;br /&gt;
==Session management: per project vs single instance==&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;right way&amp;quot; to use Vim is to have one instance of Vim open per &amp;quot;project&amp;quot;. Each Vim instance maintains its own current directory, so you can e.g. open files relative to that current directory.&lt;br /&gt;
&lt;br /&gt;
In Emacs, Emacs itself doesn&amp;#039;t maintain its current directory, and instead all file-open actions are relative to the buffer&amp;#039;s directory.&lt;br /&gt;
&lt;br /&gt;
Vim can do the Emacs thing with :set autochdir, but this is disabled by default.&lt;br /&gt;
&lt;br /&gt;
See [https://nullprogram.com/blog/2017/08/22/ this blog post] for more details.&lt;br /&gt;
&lt;br /&gt;
==Line-based vs character-based==&lt;br /&gt;
&lt;br /&gt;
Vim comes from a lineage of line-based editors. Registers can be linewise or characterwise, which means that actions like pasting text can act on entire lines or on characters. Some commands, like :substitute or :global, only work linewise. This is even reflected in the motion to move up or down a line: by default, j and k move down or up by logical lines instead of screen lines.&lt;br /&gt;
&lt;br /&gt;
Emacs is like most other text editors in that it has no concept of linewise. Ctrl-n and Ctrl-p move by screen-lines, not logical lines, which makes sense when you think of the buffer of text as a stream of characters rather than an array of lines.&lt;br /&gt;
&lt;br /&gt;
==Mappings: keystroke based vs function-based==&lt;br /&gt;
&lt;br /&gt;
In Vim, commands like &amp;quot;copy text&amp;quot; don&amp;#039;t have a &amp;quot;name&amp;quot;; they are simply the keystroke that is used to perform that action. So if you want to &amp;quot;program&amp;quot; Vim to repeat some action, such as when defining a mapping, you simply tell Vim which keystrokes you want to repeat.&lt;br /&gt;
&lt;br /&gt;
In Emacs, every keystroke, even entering a single character, has a function that is associated with it. Emacs is simply an interpreter that runs the function associated with the keystroke. You can always do Ctrl-h k followed by the keystroke to find which function is bound to that particular keystroke.&lt;br /&gt;
&lt;br /&gt;
==Actions: commands vs keybindings==&lt;br /&gt;
&lt;br /&gt;
Vim often uses the command-line for even common actions, e.g. :w to save a file [https://www.reddit.com/r/vim/comments/267vrv/i_am_tim_pope_crafter_of_plugins_ama/chojzsb/]. Emacs relies more on keybindings, e.g. Ctrl-x Ctrl-s to save a file.&lt;br /&gt;
&lt;br /&gt;
But there are some exceptions. To open the file that the cursor is on, Vim has various keybindings, including &amp;lt;code&amp;gt;gf&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;gF&amp;lt;/code&amp;gt;, Ctrl-w f, etc., but Emacs only has M-x ffap.&lt;br /&gt;
&lt;br /&gt;
==Tree-based undo vs stack-based undo==&lt;br /&gt;
&lt;br /&gt;
==Multiple similar commands vs single repeated command==&lt;br /&gt;
&lt;br /&gt;
This one is a bit hard to explain, but there is a definite pattern where Vim prefers to give the user multiple similar commands, while Emacs prefers to give a single command that you can then repeat or use creatively. The best way to explain is to give a bunch of examples:&lt;br /&gt;
&lt;br /&gt;
* Changing the screen view relative to cursor: Vim gives you zz to scroll so as to leave the cursor at the center of the screen, zt to scroll and put the cursor at the top, and zb to scroll and put the cursor at the bottom. Emacs just gives you a single command, Ctrl-l, which when repeatedly pressed, will cycle between all three views.&lt;br /&gt;
* Moving cursor to top, middle, bottom: Vim gives you H to move cursor to the top of the screen, M to move to middle, and L to move to bottom. Emacs just gives you Alt-r, which will cycle between the three configurations.&lt;br /&gt;
* Folding: Vim gives you fine-grained commands like zo to open a fold, zc to close a fold, zR to globally reduce the fold level in the file, etc. Emacs as far as I know doesn&amp;#039;t have folding by default, but certain major modes like org-mode and markdown-mode do have folding, and in these, you simply press TAB to cycle the different folding levels, or Shift-TAB to do the cycling globally across the entire file.&lt;br /&gt;
* Vim gives you Y, D, C, to copy, delete, and change (respectively) until the end of the line. Emacs just gives you Ctrl-k, which it then expects you to creatively make use of (e.g. if you want to copy until the end of the line, you do Ctrl-k to delete until the end of the line, then Ctrl-/ to undo).&lt;br /&gt;
* Vim has / to search forward, ? to search backward, then n or N to repeat that search in the same direction or opposite direction. Emacs just has Ctrl-s and Ctrl-r to do the search forward or backward. If you want to repeat the search, you just keep pressing Ctrl-s.&lt;br /&gt;
* When you have multiple split windows, Vim has Ctrl-w followed by h, j, k, or l to move to that window. It also has Ctrl-w followed by w to keep cycling between the splits. It also has Ctrl-w followed by p to toggle between the two most recent splits. There are just a lot of fine-grained choices you can make. Emacs just gives you Ctrl-x o which cycles.&lt;br /&gt;
* Text formatting: Vim gives you two operators, gq and gw, which format text; gq moves the cursor to the end of the formatted text, while gw tries to keep the cursor where it was before the formatting. You can then combine these operators with any motion, e.g. gwip to format the current paragraph, gww to format the current line, gwib to format inside parentheses. Emacs just gives you Alt-q to format the paragraph. It is then up to you to creatively combine that with text selection; you can select some text and then do Alt-q to format just the text that is selected.&lt;br /&gt;
* Copy-pasting: Vim gives you named registers, so if you want to copy two different lines and remember both, you do something like &amp;lt;code&amp;gt;&amp;quot;ayy&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;quot;byy&amp;lt;/code&amp;gt;; then you can paste them with &amp;lt;code&amp;gt;&amp;quot;ap&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;quot;bp&amp;lt;/code&amp;gt;. In Emacs, you instead kill both lines, and then when you go to paste them, you first Ctrl-y to paste the most recent, and then you do Alt-y to cycle between the most recently killed text.&lt;br /&gt;
* Vim has j and k to move down and up by logical lines, and also has gj and gk to move down and up by screen-lines. Emacs only has Ctrl-n and Ctrl-p to move down and up by screen-lines. To move by logical lines, you need to do something creative like Ctrl-e Ctrl-f or Ctrl-a Ctrl-b, or just repeatedly press Ctrl-n or Ctrl-p. &lt;br /&gt;
&lt;br /&gt;
In general, I feel that Vim requires more mental energy to use, in some sense. You need to pick the specific action you wanted to perform. You need to think ahead and decide which registers to use. This also comes from Vim&amp;#039;s modal nature, but Vim gives you more decisions and a grammar, whereas Emacs gives you a way to quickly do the common thing. I think much of this may have been forced on the design of Vim by deciding to be keystroke-based, so that the only way to make some action available in normal mode was to assign some key to it. Whereas Emacs went more in the direction of being functions-first, and once you have functions, it is natural to pass arguments to the function to modify the behavior.&lt;br /&gt;
&lt;br /&gt;
==Word movement: predictable vs &amp;quot;do the common thing&amp;quot;==&lt;br /&gt;
&lt;br /&gt;
Vim&amp;#039;s word-based motions like w, b, and e always treat contiguous alphanumeric sequences as single words, and also treats contiguous symbols as single words. This leads to a pretty predictable word movement. Emacs does the thing that most other text editors do, which is that if the cursor is before a symbol, then moving forward by one word will not just jump to the end of the symbols, but will jump to the end of the alphanumeric sequence &amp;#039;&amp;#039;after&amp;#039;&amp;#039; the symbols.&lt;br /&gt;
&lt;br /&gt;
Suppose you have something like: &amp;lt;code&amp;gt;&amp;quot;hello&amp;quot;&amp;lt;/code&amp;gt; where the cursor is on the first quote. In Vim, w will move the cursor onto the h. In Emacs, Alt-f will move the cursor past the h onto the second quote.&lt;br /&gt;
&lt;br /&gt;
==Scrolling: scrolloff vs scroll-into-view==&lt;br /&gt;
&lt;br /&gt;
In Vim, defaults.vim sets scrolloff=5, which means that when the cursor is at the edge of the window, it will always show 5 lines of context. You can never &amp;quot;touch&amp;quot; the very edge of the screen, because the screen will scroll when you try to move to the edge.&lt;br /&gt;
&lt;br /&gt;
In Emacs, the default behavior is instead to jerk the screen to the center &amp;#039;&amp;#039;after&amp;#039;&amp;#039; you step off the edge.&lt;br /&gt;
&lt;br /&gt;
==Search and replace==&lt;br /&gt;
&lt;br /&gt;
Emacs automatically does all the case variants, e.g. if you search and replace foo → bar, it also does Foo → Bar, FOO → Bar, etc. Vim doesn&amp;#039;t do this.&lt;br /&gt;
&lt;br /&gt;
==Prompting the user==&lt;br /&gt;
&lt;br /&gt;
For Vim, see [https://www.reddit.com/r/vim/comments/267vrv/i_am_tim_pope_crafter_of_plugins_ama/chojzsb/].&lt;br /&gt;
&lt;br /&gt;
Emacs often prompts the user.&lt;br /&gt;
&lt;br /&gt;
==Documentation: graph/linear vs tree==&lt;br /&gt;
&lt;br /&gt;
Vim uses a wiki-like help system, where you can click on links to read the sections. It also contains a linear book under :help user-manual. Emacs has a GNU-like hierarchical tree documentation system.&lt;br /&gt;
&lt;br /&gt;
Both have a way to look things up based on keystroke or command name though. Vim has a universal :help command, while Emacs has e.g. Ctrl-h k for keystrokes or Ctrl-h f for functions.&lt;br /&gt;
&lt;br /&gt;
==Selection endpoint==&lt;br /&gt;
&lt;br /&gt;
Vim includes the selection endpoint, whereas Emacs doesn&amp;#039;t. The need to make this decision comes from both editors originating on the terminal with block cursors, rather than the more modern I-beam cursors.&lt;/div&gt;</summary>
		<author><name>Issa</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.issarice.com/index.php?title=Design_philosophies_of_Vim_vs_Emacs&amp;diff=2940</id>
		<title>Design philosophies of Vim vs Emacs</title>
		<link rel="alternate" type="text/html" href="https://wiki.issarice.com/index.php?title=Design_philosophies_of_Vim_vs_Emacs&amp;diff=2940"/>
		<updated>2025-11-27T20:59:31Z</updated>

		<summary type="html">&lt;p&gt;Issa: /* Documentation: graph/linear vs tree */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
==Modal vs chording==&lt;br /&gt;
&lt;br /&gt;
* Atomic edits and the dot command in Vim: When you use Vim, you naturally start to think in terms of repeatable edits that you can then use the &amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt; command to repeat. But this has a side-effect in that Vim requires you to manually chunk your undo history. Emacs instead automatically chunks undos.&lt;br /&gt;
&lt;br /&gt;
==Unix as IDE vs Emacs as OS==&lt;br /&gt;
&lt;br /&gt;
Vim tries to just be a text editor, and tries to play nice with the other tools on your computer, using commands like &amp;lt;code&amp;gt;:!command&amp;lt;/code&amp;gt; (runs external command) or &amp;lt;code&amp;gt;:w !command&amp;lt;/code&amp;gt; (pipes text to external command via stdin) or &amp;lt;code&amp;gt;:r !command&amp;lt;/code&amp;gt; (reads from external command via stdout).&lt;br /&gt;
&lt;br /&gt;
===...with some exceptions===&lt;br /&gt;
&lt;br /&gt;
Vim has a built-in spellchecker, whereas Emacs doesn&amp;#039;t (it does come with flyspell, which works with an external spellchecker like hunspell or aspell). (Emacs comes with tetris, an RPN calculator, an email client, etc., but not a spell-checker!)&lt;br /&gt;
&lt;br /&gt;
==Session management: per project vs single instance==&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;right way&amp;quot; to use Vim is to have one instance of Vim open per &amp;quot;project&amp;quot;. Each Vim instance maintains its own current directory, so you can e.g. open files relative to that current directory.&lt;br /&gt;
&lt;br /&gt;
In Emacs, Emacs itself doesn&amp;#039;t maintain its current directory, and instead all file-open actions are relative to the buffer&amp;#039;s directory.&lt;br /&gt;
&lt;br /&gt;
Vim can do the Emacs thing with :set autochdir, but this is disabled by default.&lt;br /&gt;
&lt;br /&gt;
See [https://nullprogram.com/blog/2017/08/22/ this blog post] for more details.&lt;br /&gt;
&lt;br /&gt;
==Line-based vs character-based==&lt;br /&gt;
&lt;br /&gt;
Vim comes from a lineage of line-based editors. Registers can be linewise or characterwise, which means that actions like pasting text can act on entire lines or on characters. Some commands, like :substitute or :global, only work linewise. This is even reflected in the motion to move up or down a line: by default, j and k move down or up by logical lines instead of screen lines.&lt;br /&gt;
&lt;br /&gt;
Emacs is like most other text editors in that it has no concept of linewise. Ctrl-n and Ctrl-p move by screen-lines, not logical lines, which makes sense when you think of the buffer of text as a stream of characters rather than an array of lines.&lt;br /&gt;
&lt;br /&gt;
==Mappings: keystroke based vs function-based==&lt;br /&gt;
&lt;br /&gt;
In Vim, commands like &amp;quot;copy text&amp;quot; don&amp;#039;t have a &amp;quot;name&amp;quot;; they are simply the keystroke that is used to perform that action. So if you want to &amp;quot;program&amp;quot; Vim to repeat some action, such as when defining a mapping, you simply tell Vim which keystrokes you want to repeat.&lt;br /&gt;
&lt;br /&gt;
In Emacs, every keystroke, even entering a single character, has a function that is associated with it. Emacs is simply an interpreter that runs the function associated with the keystroke. You can always do Ctrl-h k followed by the keystroke to find which function is bound to that particular keystroke.&lt;br /&gt;
&lt;br /&gt;
==Actions: commands vs keybindings==&lt;br /&gt;
&lt;br /&gt;
Vim often uses the command-line for even common actions, e.g. :w to save a file [https://www.reddit.com/r/vim/comments/267vrv/i_am_tim_pope_crafter_of_plugins_ama/chojzsb/]. Emacs relies more on keybindings, e.g. Ctrl-x Ctrl-s to save a file.&lt;br /&gt;
&lt;br /&gt;
But there are some exceptions. To open the file that the cursor is on, Vim has various keybindings, including &amp;lt;code&amp;gt;gf&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;gF&amp;lt;/code&amp;gt;, Ctrl-w f, etc., but Emacs only has M-x ffap.&lt;br /&gt;
&lt;br /&gt;
==Tree-based undo vs stack-based undo==&lt;br /&gt;
&lt;br /&gt;
==Multiple similar commands vs single repeated command==&lt;br /&gt;
&lt;br /&gt;
This one is a bit hard to explain, but there is a definite pattern where Vim prefers to give the user multiple similar commands, while Emacs prefers to give a single command that you can then repeat or use creatively. The best way to explain is to give a bunch of examples:&lt;br /&gt;
&lt;br /&gt;
* Changing the screen view relative to cursor: Vim gives you zz to scroll so as to leave the cursor at the center of the screen, zt to scroll and put the cursor at the top, and zb to scroll and put the cursor at the bottom. Emacs just gives you a single command, Ctrl-l, which when repeatedly pressed, will cycle between all three views.&lt;br /&gt;
* Moving cursor to top, middle, bottom: Vim gives you H to move cursor to the top of the screen, M to move to middle, and L to move to bottom. Emacs just gives you Alt-r, which will cycle between the three configurations.&lt;br /&gt;
* Folding: Vim gives you fine-grained commands like zo to open a fold, zc to close a fold, zR to globally reduce the fold level in the file, etc. Emacs as far as I know doesn&amp;#039;t have folding by default, but certain major modes like org-mode and markdown-mode do have folding, and in these, you simply press TAB to cycle the different folding levels, or Shift-TAB to do the cycling globally across the entire file.&lt;br /&gt;
* Vim gives you Y, D, C, to copy, delete, and change (respectively) until the end of the line. Emacs just gives you Ctrl-k, which it then expects you to creatively make use of (e.g. if you want to copy until the end of the line, you do Ctrl-k to delete until the end of the line, then Ctrl-/ to undo).&lt;br /&gt;
* Vim has / to search forward, ? to search backward, then n or N to repeat that search in the same direction or opposite direction. Emacs just has Ctrl-s and Ctrl-r to do the search forward or backward. If you want to repeat the search, you just keep pressing Ctrl-s.&lt;br /&gt;
* When you have multiple split windows, Vim has Ctrl-w followed by h, j, k, or l to move to that window. It also has Ctrl-w followed by w to keep cycling between the splits. It also has Ctrl-w followed by p to toggle between the two most recent splits. There are just a lot of fine-grained choices you can make. Emacs just gives you Ctrl-x o which cycles.&lt;br /&gt;
* Text formatting: Vim gives you two operators, gq and gw, which format text; gq moves the cursor to the end of the formatted text, while gw tries to keep the cursor where it was before the formatting. You can then combine these operators with any motion, e.g. gwip to format the current paragraph, gww to format the current line, gwib to format inside parentheses. Emacs just gives you Alt-q to format the paragraph. It is then up to you to creatively combine that with text selection; you can select some text and then do Alt-q to format just the text that is selected.&lt;br /&gt;
* Copy-pasting: Vim gives you named registers, so if you want to copy two different lines and remember both, you do something like &amp;lt;code&amp;gt;&amp;quot;ayy&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;quot;byy&amp;lt;/code&amp;gt;; then you can paste them with &amp;lt;code&amp;gt;&amp;quot;ap&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;quot;bp&amp;lt;/code&amp;gt;. In Emacs, you instead kill both lines, and then when you go to paste them, you first Ctrl-y to paste the most recent, and then you do Alt-y to cycle between the most recently killed text.&lt;br /&gt;
* Vim has j and k to move down and up by logical lines, and also has gj and gk to move down and up by screen-lines. Emacs only has Ctrl-n and Ctrl-p to move down and up by screen-lines. To move by logical lines, you need to do something creative like Ctrl-e Ctrl-f or Ctrl-a Ctrl-b, or just repeatedly press Ctrl-n or Ctrl-p. &lt;br /&gt;
&lt;br /&gt;
In general, I feel that Vim requires more mental energy to use, in some sense. You need to pick the specific action you wanted to perform. You need to think ahead and decide which registers to use. This also comes from Vim&amp;#039;s modal nature, but Vim gives you more decisions and a grammar, whereas Emacs gives you a way to quickly do the common thing. I think much of this may have been forced on the design of Vim by deciding to be keystroke-based, so that the only way to make some action available in normal mode was to assign some key to it. Whereas Emacs went more in the direction of being functions-first, and once you have functions, it is natural to pass arguments to the function to modify the behavior.&lt;br /&gt;
&lt;br /&gt;
==Word movement: predictable vs &amp;quot;do the common thing&amp;quot;==&lt;br /&gt;
&lt;br /&gt;
Vim&amp;#039;s word-based motions like w, b, and e always treat contiguous alphanumeric sequences as single words, and also treats contiguous symbols as single words. This leads to a pretty predictable word movement. Emacs does the thing that most other text editors do, which is that if the cursor is before a symbol, then moving forward by one word will not just jump to the end of the symbols, but will jump to the end of the alphanumeric sequence &amp;#039;&amp;#039;after&amp;#039;&amp;#039; the symbols.&lt;br /&gt;
&lt;br /&gt;
Suppose you have something like: &amp;lt;code&amp;gt;&amp;quot;hello&amp;quot;&amp;lt;/code&amp;gt; where the cursor is on the first quote. In Vim, w will move the cursor onto the h. In Emacs, Alt-f will move the cursor past the h onto the second quote.&lt;br /&gt;
&lt;br /&gt;
==Scrolling: scrolloff vs scroll-into-view==&lt;br /&gt;
&lt;br /&gt;
In Vim, defaults.vim sets scrolloff=5, which means that when the cursor is at the edge of the window, it will always show 5 lines of context. You can never &amp;quot;touch&amp;quot; the very edge of the screen, because the screen will scroll when you try to move to the edge.&lt;br /&gt;
&lt;br /&gt;
In Emacs, the default behavior is instead to jerk the screen to the center &amp;#039;&amp;#039;after&amp;#039;&amp;#039; you step off the edge.&lt;br /&gt;
&lt;br /&gt;
==Search and replace==&lt;br /&gt;
&lt;br /&gt;
Emacs automatically does all the case variants, e.g. if you search and replace foo → bar, it also does Foo → Bar, FOO → Bar, etc. Vim doesn&amp;#039;t do this.&lt;br /&gt;
&lt;br /&gt;
==Prompting the user==&lt;br /&gt;
&lt;br /&gt;
For Vim, see [https://www.reddit.com/r/vim/comments/267vrv/i_am_tim_pope_crafter_of_plugins_ama/chojzsb/].&lt;br /&gt;
&lt;br /&gt;
Emacs often prompts the user.&lt;br /&gt;
&lt;br /&gt;
==Documentation: graph/linear vs tree==&lt;br /&gt;
&lt;br /&gt;
Vim uses a wiki-like help system, where you can click on links to read the sections. It also contains a linear book under :help user-manual. Emacs has a GNU-like hierarchical tree documentation system.&lt;br /&gt;
&lt;br /&gt;
Both have a way to look things up based on keystroke or command name though. Vim has a universal :help command, while Emacs has e.g. Ctrl-h k for keystrokes or Ctrl-h f for functions.&lt;/div&gt;</summary>
		<author><name>Issa</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.issarice.com/index.php?title=Design_philosophies_of_Vim_vs_Emacs&amp;diff=2939</id>
		<title>Design philosophies of Vim vs Emacs</title>
		<link rel="alternate" type="text/html" href="https://wiki.issarice.com/index.php?title=Design_philosophies_of_Vim_vs_Emacs&amp;diff=2939"/>
		<updated>2025-11-27T20:57:07Z</updated>

		<summary type="html">&lt;p&gt;Issa: /* Multiple similar commands vs single repeated command */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
==Modal vs chording==&lt;br /&gt;
&lt;br /&gt;
* Atomic edits and the dot command in Vim: When you use Vim, you naturally start to think in terms of repeatable edits that you can then use the &amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt; command to repeat. But this has a side-effect in that Vim requires you to manually chunk your undo history. Emacs instead automatically chunks undos.&lt;br /&gt;
&lt;br /&gt;
==Unix as IDE vs Emacs as OS==&lt;br /&gt;
&lt;br /&gt;
Vim tries to just be a text editor, and tries to play nice with the other tools on your computer, using commands like &amp;lt;code&amp;gt;:!command&amp;lt;/code&amp;gt; (runs external command) or &amp;lt;code&amp;gt;:w !command&amp;lt;/code&amp;gt; (pipes text to external command via stdin) or &amp;lt;code&amp;gt;:r !command&amp;lt;/code&amp;gt; (reads from external command via stdout).&lt;br /&gt;
&lt;br /&gt;
===...with some exceptions===&lt;br /&gt;
&lt;br /&gt;
Vim has a built-in spellchecker, whereas Emacs doesn&amp;#039;t (it does come with flyspell, which works with an external spellchecker like hunspell or aspell). (Emacs comes with tetris, an RPN calculator, an email client, etc., but not a spell-checker!)&lt;br /&gt;
&lt;br /&gt;
==Session management: per project vs single instance==&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;right way&amp;quot; to use Vim is to have one instance of Vim open per &amp;quot;project&amp;quot;. Each Vim instance maintains its own current directory, so you can e.g. open files relative to that current directory.&lt;br /&gt;
&lt;br /&gt;
In Emacs, Emacs itself doesn&amp;#039;t maintain its current directory, and instead all file-open actions are relative to the buffer&amp;#039;s directory.&lt;br /&gt;
&lt;br /&gt;
Vim can do the Emacs thing with :set autochdir, but this is disabled by default.&lt;br /&gt;
&lt;br /&gt;
See [https://nullprogram.com/blog/2017/08/22/ this blog post] for more details.&lt;br /&gt;
&lt;br /&gt;
==Line-based vs character-based==&lt;br /&gt;
&lt;br /&gt;
Vim comes from a lineage of line-based editors. Registers can be linewise or characterwise, which means that actions like pasting text can act on entire lines or on characters. Some commands, like :substitute or :global, only work linewise. This is even reflected in the motion to move up or down a line: by default, j and k move down or up by logical lines instead of screen lines.&lt;br /&gt;
&lt;br /&gt;
Emacs is like most other text editors in that it has no concept of linewise. Ctrl-n and Ctrl-p move by screen-lines, not logical lines, which makes sense when you think of the buffer of text as a stream of characters rather than an array of lines.&lt;br /&gt;
&lt;br /&gt;
==Mappings: keystroke based vs function-based==&lt;br /&gt;
&lt;br /&gt;
In Vim, commands like &amp;quot;copy text&amp;quot; don&amp;#039;t have a &amp;quot;name&amp;quot;; they are simply the keystroke that is used to perform that action. So if you want to &amp;quot;program&amp;quot; Vim to repeat some action, such as when defining a mapping, you simply tell Vim which keystrokes you want to repeat.&lt;br /&gt;
&lt;br /&gt;
In Emacs, every keystroke, even entering a single character, has a function that is associated with it. Emacs is simply an interpreter that runs the function associated with the keystroke. You can always do Ctrl-h k followed by the keystroke to find which function is bound to that particular keystroke.&lt;br /&gt;
&lt;br /&gt;
==Actions: commands vs keybindings==&lt;br /&gt;
&lt;br /&gt;
Vim often uses the command-line for even common actions, e.g. :w to save a file [https://www.reddit.com/r/vim/comments/267vrv/i_am_tim_pope_crafter_of_plugins_ama/chojzsb/]. Emacs relies more on keybindings, e.g. Ctrl-x Ctrl-s to save a file.&lt;br /&gt;
&lt;br /&gt;
But there are some exceptions. To open the file that the cursor is on, Vim has various keybindings, including &amp;lt;code&amp;gt;gf&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;gF&amp;lt;/code&amp;gt;, Ctrl-w f, etc., but Emacs only has M-x ffap.&lt;br /&gt;
&lt;br /&gt;
==Tree-based undo vs stack-based undo==&lt;br /&gt;
&lt;br /&gt;
==Multiple similar commands vs single repeated command==&lt;br /&gt;
&lt;br /&gt;
This one is a bit hard to explain, but there is a definite pattern where Vim prefers to give the user multiple similar commands, while Emacs prefers to give a single command that you can then repeat or use creatively. The best way to explain is to give a bunch of examples:&lt;br /&gt;
&lt;br /&gt;
* Changing the screen view relative to cursor: Vim gives you zz to scroll so as to leave the cursor at the center of the screen, zt to scroll and put the cursor at the top, and zb to scroll and put the cursor at the bottom. Emacs just gives you a single command, Ctrl-l, which when repeatedly pressed, will cycle between all three views.&lt;br /&gt;
* Moving cursor to top, middle, bottom: Vim gives you H to move cursor to the top of the screen, M to move to middle, and L to move to bottom. Emacs just gives you Alt-r, which will cycle between the three configurations.&lt;br /&gt;
* Folding: Vim gives you fine-grained commands like zo to open a fold, zc to close a fold, zR to globally reduce the fold level in the file, etc. Emacs as far as I know doesn&amp;#039;t have folding by default, but certain major modes like org-mode and markdown-mode do have folding, and in these, you simply press TAB to cycle the different folding levels, or Shift-TAB to do the cycling globally across the entire file.&lt;br /&gt;
* Vim gives you Y, D, C, to copy, delete, and change (respectively) until the end of the line. Emacs just gives you Ctrl-k, which it then expects you to creatively make use of (e.g. if you want to copy until the end of the line, you do Ctrl-k to delete until the end of the line, then Ctrl-/ to undo).&lt;br /&gt;
* Vim has / to search forward, ? to search backward, then n or N to repeat that search in the same direction or opposite direction. Emacs just has Ctrl-s and Ctrl-r to do the search forward or backward. If you want to repeat the search, you just keep pressing Ctrl-s.&lt;br /&gt;
* When you have multiple split windows, Vim has Ctrl-w followed by h, j, k, or l to move to that window. It also has Ctrl-w followed by w to keep cycling between the splits. It also has Ctrl-w followed by p to toggle between the two most recent splits. There are just a lot of fine-grained choices you can make. Emacs just gives you Ctrl-x o which cycles.&lt;br /&gt;
* Text formatting: Vim gives you two operators, gq and gw, which format text; gq moves the cursor to the end of the formatted text, while gw tries to keep the cursor where it was before the formatting. You can then combine these operators with any motion, e.g. gwip to format the current paragraph, gww to format the current line, gwib to format inside parentheses. Emacs just gives you Alt-q to format the paragraph. It is then up to you to creatively combine that with text selection; you can select some text and then do Alt-q to format just the text that is selected.&lt;br /&gt;
* Copy-pasting: Vim gives you named registers, so if you want to copy two different lines and remember both, you do something like &amp;lt;code&amp;gt;&amp;quot;ayy&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;quot;byy&amp;lt;/code&amp;gt;; then you can paste them with &amp;lt;code&amp;gt;&amp;quot;ap&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;quot;bp&amp;lt;/code&amp;gt;. In Emacs, you instead kill both lines, and then when you go to paste them, you first Ctrl-y to paste the most recent, and then you do Alt-y to cycle between the most recently killed text.&lt;br /&gt;
* Vim has j and k to move down and up by logical lines, and also has gj and gk to move down and up by screen-lines. Emacs only has Ctrl-n and Ctrl-p to move down and up by screen-lines. To move by logical lines, you need to do something creative like Ctrl-e Ctrl-f or Ctrl-a Ctrl-b, or just repeatedly press Ctrl-n or Ctrl-p. &lt;br /&gt;
&lt;br /&gt;
In general, I feel that Vim requires more mental energy to use, in some sense. You need to pick the specific action you wanted to perform. You need to think ahead and decide which registers to use. This also comes from Vim&amp;#039;s modal nature, but Vim gives you more decisions and a grammar, whereas Emacs gives you a way to quickly do the common thing. I think much of this may have been forced on the design of Vim by deciding to be keystroke-based, so that the only way to make some action available in normal mode was to assign some key to it. Whereas Emacs went more in the direction of being functions-first, and once you have functions, it is natural to pass arguments to the function to modify the behavior.&lt;br /&gt;
&lt;br /&gt;
==Word movement: predictable vs &amp;quot;do the common thing&amp;quot;==&lt;br /&gt;
&lt;br /&gt;
Vim&amp;#039;s word-based motions like w, b, and e always treat contiguous alphanumeric sequences as single words, and also treats contiguous symbols as single words. This leads to a pretty predictable word movement. Emacs does the thing that most other text editors do, which is that if the cursor is before a symbol, then moving forward by one word will not just jump to the end of the symbols, but will jump to the end of the alphanumeric sequence &amp;#039;&amp;#039;after&amp;#039;&amp;#039; the symbols.&lt;br /&gt;
&lt;br /&gt;
Suppose you have something like: &amp;lt;code&amp;gt;&amp;quot;hello&amp;quot;&amp;lt;/code&amp;gt; where the cursor is on the first quote. In Vim, w will move the cursor onto the h. In Emacs, Alt-f will move the cursor past the h onto the second quote.&lt;br /&gt;
&lt;br /&gt;
==Scrolling: scrolloff vs scroll-into-view==&lt;br /&gt;
&lt;br /&gt;
In Vim, defaults.vim sets scrolloff=5, which means that when the cursor is at the edge of the window, it will always show 5 lines of context. You can never &amp;quot;touch&amp;quot; the very edge of the screen, because the screen will scroll when you try to move to the edge.&lt;br /&gt;
&lt;br /&gt;
In Emacs, the default behavior is instead to jerk the screen to the center &amp;#039;&amp;#039;after&amp;#039;&amp;#039; you step off the edge.&lt;br /&gt;
&lt;br /&gt;
==Search and replace==&lt;br /&gt;
&lt;br /&gt;
Emacs automatically does all the case variants, e.g. if you search and replace foo → bar, it also does Foo → Bar, FOO → Bar, etc. Vim doesn&amp;#039;t do this.&lt;br /&gt;
&lt;br /&gt;
==Prompting the user==&lt;br /&gt;
&lt;br /&gt;
For Vim, see [https://www.reddit.com/r/vim/comments/267vrv/i_am_tim_pope_crafter_of_plugins_ama/chojzsb/].&lt;br /&gt;
&lt;br /&gt;
Emacs often prompts the user.&lt;br /&gt;
&lt;br /&gt;
==Documentation: graph/linear vs tree==&lt;br /&gt;
&lt;br /&gt;
Vim uses a wiki-like help system, where you can click on links to read the sections. It also contains a linear book under :help user-manual. Emacs has a GNU-like hierarchical tree documentation system.&lt;/div&gt;</summary>
		<author><name>Issa</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.issarice.com/index.php?title=Design_philosophies_of_Vim_vs_Emacs&amp;diff=2938</id>
		<title>Design philosophies of Vim vs Emacs</title>
		<link rel="alternate" type="text/html" href="https://wiki.issarice.com/index.php?title=Design_philosophies_of_Vim_vs_Emacs&amp;diff=2938"/>
		<updated>2025-11-27T20:55:08Z</updated>

		<summary type="html">&lt;p&gt;Issa: /* Line-based vs character-based */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
==Modal vs chording==&lt;br /&gt;
&lt;br /&gt;
* Atomic edits and the dot command in Vim: When you use Vim, you naturally start to think in terms of repeatable edits that you can then use the &amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt; command to repeat. But this has a side-effect in that Vim requires you to manually chunk your undo history. Emacs instead automatically chunks undos.&lt;br /&gt;
&lt;br /&gt;
==Unix as IDE vs Emacs as OS==&lt;br /&gt;
&lt;br /&gt;
Vim tries to just be a text editor, and tries to play nice with the other tools on your computer, using commands like &amp;lt;code&amp;gt;:!command&amp;lt;/code&amp;gt; (runs external command) or &amp;lt;code&amp;gt;:w !command&amp;lt;/code&amp;gt; (pipes text to external command via stdin) or &amp;lt;code&amp;gt;:r !command&amp;lt;/code&amp;gt; (reads from external command via stdout).&lt;br /&gt;
&lt;br /&gt;
===...with some exceptions===&lt;br /&gt;
&lt;br /&gt;
Vim has a built-in spellchecker, whereas Emacs doesn&amp;#039;t (it does come with flyspell, which works with an external spellchecker like hunspell or aspell). (Emacs comes with tetris, an RPN calculator, an email client, etc., but not a spell-checker!)&lt;br /&gt;
&lt;br /&gt;
==Session management: per project vs single instance==&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;right way&amp;quot; to use Vim is to have one instance of Vim open per &amp;quot;project&amp;quot;. Each Vim instance maintains its own current directory, so you can e.g. open files relative to that current directory.&lt;br /&gt;
&lt;br /&gt;
In Emacs, Emacs itself doesn&amp;#039;t maintain its current directory, and instead all file-open actions are relative to the buffer&amp;#039;s directory.&lt;br /&gt;
&lt;br /&gt;
Vim can do the Emacs thing with :set autochdir, but this is disabled by default.&lt;br /&gt;
&lt;br /&gt;
See [https://nullprogram.com/blog/2017/08/22/ this blog post] for more details.&lt;br /&gt;
&lt;br /&gt;
==Line-based vs character-based==&lt;br /&gt;
&lt;br /&gt;
Vim comes from a lineage of line-based editors. Registers can be linewise or characterwise, which means that actions like pasting text can act on entire lines or on characters. Some commands, like :substitute or :global, only work linewise. This is even reflected in the motion to move up or down a line: by default, j and k move down or up by logical lines instead of screen lines.&lt;br /&gt;
&lt;br /&gt;
Emacs is like most other text editors in that it has no concept of linewise. Ctrl-n and Ctrl-p move by screen-lines, not logical lines, which makes sense when you think of the buffer of text as a stream of characters rather than an array of lines.&lt;br /&gt;
&lt;br /&gt;
==Mappings: keystroke based vs function-based==&lt;br /&gt;
&lt;br /&gt;
In Vim, commands like &amp;quot;copy text&amp;quot; don&amp;#039;t have a &amp;quot;name&amp;quot;; they are simply the keystroke that is used to perform that action. So if you want to &amp;quot;program&amp;quot; Vim to repeat some action, such as when defining a mapping, you simply tell Vim which keystrokes you want to repeat.&lt;br /&gt;
&lt;br /&gt;
In Emacs, every keystroke, even entering a single character, has a function that is associated with it. Emacs is simply an interpreter that runs the function associated with the keystroke. You can always do Ctrl-h k followed by the keystroke to find which function is bound to that particular keystroke.&lt;br /&gt;
&lt;br /&gt;
==Actions: commands vs keybindings==&lt;br /&gt;
&lt;br /&gt;
Vim often uses the command-line for even common actions, e.g. :w to save a file [https://www.reddit.com/r/vim/comments/267vrv/i_am_tim_pope_crafter_of_plugins_ama/chojzsb/]. Emacs relies more on keybindings, e.g. Ctrl-x Ctrl-s to save a file.&lt;br /&gt;
&lt;br /&gt;
But there are some exceptions. To open the file that the cursor is on, Vim has various keybindings, including &amp;lt;code&amp;gt;gf&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;gF&amp;lt;/code&amp;gt;, Ctrl-w f, etc., but Emacs only has M-x ffap.&lt;br /&gt;
&lt;br /&gt;
==Tree-based undo vs stack-based undo==&lt;br /&gt;
&lt;br /&gt;
==Multiple similar commands vs single repeated command==&lt;br /&gt;
&lt;br /&gt;
This one is a bit hard to explain, but there is a definite pattern where Vim prefers to give the user multiple similar commands, while Emacs prefers to give a single command that you can then repeat or use creatively. The best way to explain is to give a bunch of examples:&lt;br /&gt;
&lt;br /&gt;
* Changing the screen view relative to cursor: Vim gives you zz to scroll so as to leave the cursor at the center of the screen, zt to scroll and put the cursor at the top, and zb to scroll and put the cursor at the bottom. Emacs just gives you a single command, Ctrl-l, which when repeatedly pressed, will cycle between all three views.&lt;br /&gt;
* Moving cursor to top, middle, bottom: Vim gives you H to move cursor to the top of the screen, M to move to middle, and L to move to bottom. Emacs just gives you Alt-r, which will cycle between the three configurations.&lt;br /&gt;
* Folding: Vim gives you fine-grained commands like zo to open a fold, zc to close a fold, zR to globally reduce the fold level in the file, etc. Emacs as far as I know doesn&amp;#039;t have folding by default, but certain major modes like org-mode and markdown-mode do have folding, and in these, you simply press TAB to cycle the different folding levels, or Shift-TAB to do the cycling globally across the entire file.&lt;br /&gt;
* Vim gives you Y, D, C, to copy, delete, and change (respectively) until the end of the line. Emacs just gives you Ctrl-k, which it then expects you to creatively make use of (e.g. if you want to copy until the end of the line, you do Ctrl-k to delete until the end of the line, then Ctrl-/ to undo).&lt;br /&gt;
* Vim has / to search forward, ? to search backward, then n or N to repeat that search in the same direction or opposite direction. Emacs just has Ctrl-s and Ctrl-r to do the search forward or backward. If you want to repeat the search, you just keep pressing Ctrl-s.&lt;br /&gt;
* When you have multiple split windows, Vim has Ctrl-w followed by h, j, k, or l to move to that window. It also has Ctrl-w followed by w to keep cycling between the splits. It also has Ctrl-w followed by p to toggle between the two most recent splits. There are just a lot of fine-grained choices you can make. Emacs just gives you Ctrl-x o which cycles.&lt;br /&gt;
* Text formatting: Vim gives you two operators, gq and gw, which format text; gq moves the cursor to the end of the formatted text, while gw tries to keep the cursor where it was before the formatting. You can then combine these operators with any motion, e.g. gwip to format the current paragraph, gww to format the current line, gwib to format inside parentheses. Emacs just gives you Alt-q to format the paragraph. It is then up to you to creatively combine that with text selection; you can select some text and then do Alt-q to format just the text that is selected.&lt;br /&gt;
* Copy-pasting: Vim gives you named registers, so if you want to copy two different lines and remember both, you do something like &amp;lt;code&amp;gt;&amp;quot;ayy&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;quot;byy&amp;lt;/code&amp;gt;; then you can paste them with &amp;lt;code&amp;gt;&amp;quot;ap&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;quot;bp&amp;lt;/code&amp;gt;. In Emacs, you instead kill both lines, and then when you go to paste them, you first Ctrl-y to paste the most recent, and then you do Alt-y to cycle between the most recently killed text.&lt;br /&gt;
&lt;br /&gt;
In general, I feel that Vim requires more mental energy to use, in some sense. You need to pick the specific action you wanted to perform. You need to think ahead and decide which registers to use. This also comes from Vim&amp;#039;s modal nature, but Vim gives you more decisions and a grammar, whereas Emacs gives you a way to quickly do the common thing. I think much of this may have been forced on the design of Vim by deciding to be keystroke-based, so that the only way to make some action available in normal mode was to assign some key to it. Whereas Emacs went more in the direction of being functions-first, and once you have functions, it is natural to pass arguments to the function to modify the behavior.&lt;br /&gt;
&lt;br /&gt;
==Word movement: predictable vs &amp;quot;do the common thing&amp;quot;==&lt;br /&gt;
&lt;br /&gt;
Vim&amp;#039;s word-based motions like w, b, and e always treat contiguous alphanumeric sequences as single words, and also treats contiguous symbols as single words. This leads to a pretty predictable word movement. Emacs does the thing that most other text editors do, which is that if the cursor is before a symbol, then moving forward by one word will not just jump to the end of the symbols, but will jump to the end of the alphanumeric sequence &amp;#039;&amp;#039;after&amp;#039;&amp;#039; the symbols.&lt;br /&gt;
&lt;br /&gt;
Suppose you have something like: &amp;lt;code&amp;gt;&amp;quot;hello&amp;quot;&amp;lt;/code&amp;gt; where the cursor is on the first quote. In Vim, w will move the cursor onto the h. In Emacs, Alt-f will move the cursor past the h onto the second quote.&lt;br /&gt;
&lt;br /&gt;
==Scrolling: scrolloff vs scroll-into-view==&lt;br /&gt;
&lt;br /&gt;
In Vim, defaults.vim sets scrolloff=5, which means that when the cursor is at the edge of the window, it will always show 5 lines of context. You can never &amp;quot;touch&amp;quot; the very edge of the screen, because the screen will scroll when you try to move to the edge.&lt;br /&gt;
&lt;br /&gt;
In Emacs, the default behavior is instead to jerk the screen to the center &amp;#039;&amp;#039;after&amp;#039;&amp;#039; you step off the edge.&lt;br /&gt;
&lt;br /&gt;
==Search and replace==&lt;br /&gt;
&lt;br /&gt;
Emacs automatically does all the case variants, e.g. if you search and replace foo → bar, it also does Foo → Bar, FOO → Bar, etc. Vim doesn&amp;#039;t do this.&lt;br /&gt;
&lt;br /&gt;
==Prompting the user==&lt;br /&gt;
&lt;br /&gt;
For Vim, see [https://www.reddit.com/r/vim/comments/267vrv/i_am_tim_pope_crafter_of_plugins_ama/chojzsb/].&lt;br /&gt;
&lt;br /&gt;
Emacs often prompts the user.&lt;br /&gt;
&lt;br /&gt;
==Documentation: graph/linear vs tree==&lt;br /&gt;
&lt;br /&gt;
Vim uses a wiki-like help system, where you can click on links to read the sections. It also contains a linear book under :help user-manual. Emacs has a GNU-like hierarchical tree documentation system.&lt;/div&gt;</summary>
		<author><name>Issa</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.issarice.com/index.php?title=Design_philosophies_of_Vim_vs_Emacs&amp;diff=2937</id>
		<title>Design philosophies of Vim vs Emacs</title>
		<link rel="alternate" type="text/html" href="https://wiki.issarice.com/index.php?title=Design_philosophies_of_Vim_vs_Emacs&amp;diff=2937"/>
		<updated>2025-11-27T20:53:14Z</updated>

		<summary type="html">&lt;p&gt;Issa: /* Multiple similar commands vs single repeated command */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
==Modal vs chording==&lt;br /&gt;
&lt;br /&gt;
* Atomic edits and the dot command in Vim: When you use Vim, you naturally start to think in terms of repeatable edits that you can then use the &amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt; command to repeat. But this has a side-effect in that Vim requires you to manually chunk your undo history. Emacs instead automatically chunks undos.&lt;br /&gt;
&lt;br /&gt;
==Unix as IDE vs Emacs as OS==&lt;br /&gt;
&lt;br /&gt;
Vim tries to just be a text editor, and tries to play nice with the other tools on your computer, using commands like &amp;lt;code&amp;gt;:!command&amp;lt;/code&amp;gt; (runs external command) or &amp;lt;code&amp;gt;:w !command&amp;lt;/code&amp;gt; (pipes text to external command via stdin) or &amp;lt;code&amp;gt;:r !command&amp;lt;/code&amp;gt; (reads from external command via stdout).&lt;br /&gt;
&lt;br /&gt;
===...with some exceptions===&lt;br /&gt;
&lt;br /&gt;
Vim has a built-in spellchecker, whereas Emacs doesn&amp;#039;t (it does come with flyspell, which works with an external spellchecker like hunspell or aspell). (Emacs comes with tetris, an RPN calculator, an email client, etc., but not a spell-checker!)&lt;br /&gt;
&lt;br /&gt;
==Session management: per project vs single instance==&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;right way&amp;quot; to use Vim is to have one instance of Vim open per &amp;quot;project&amp;quot;. Each Vim instance maintains its own current directory, so you can e.g. open files relative to that current directory.&lt;br /&gt;
&lt;br /&gt;
In Emacs, Emacs itself doesn&amp;#039;t maintain its current directory, and instead all file-open actions are relative to the buffer&amp;#039;s directory.&lt;br /&gt;
&lt;br /&gt;
Vim can do the Emacs thing with :set autochdir, but this is disabled by default.&lt;br /&gt;
&lt;br /&gt;
See [https://nullprogram.com/blog/2017/08/22/ this blog post] for more details.&lt;br /&gt;
&lt;br /&gt;
==Line-based vs character-based==&lt;br /&gt;
&lt;br /&gt;
Vim comes from a lineage of line-based editors. Registers can be linewise or characterwise, which means that actions like pasting text can act on entire lines or on characters. Some commands, like :substitute or :global, only work linewise.&lt;br /&gt;
&lt;br /&gt;
Emacs is like most other text editors in that it has no concept of linewise.&lt;br /&gt;
&lt;br /&gt;
==Mappings: keystroke based vs function-based==&lt;br /&gt;
&lt;br /&gt;
In Vim, commands like &amp;quot;copy text&amp;quot; don&amp;#039;t have a &amp;quot;name&amp;quot;; they are simply the keystroke that is used to perform that action. So if you want to &amp;quot;program&amp;quot; Vim to repeat some action, such as when defining a mapping, you simply tell Vim which keystrokes you want to repeat.&lt;br /&gt;
&lt;br /&gt;
In Emacs, every keystroke, even entering a single character, has a function that is associated with it. Emacs is simply an interpreter that runs the function associated with the keystroke. You can always do Ctrl-h k followed by the keystroke to find which function is bound to that particular keystroke.&lt;br /&gt;
&lt;br /&gt;
==Actions: commands vs keybindings==&lt;br /&gt;
&lt;br /&gt;
Vim often uses the command-line for even common actions, e.g. :w to save a file [https://www.reddit.com/r/vim/comments/267vrv/i_am_tim_pope_crafter_of_plugins_ama/chojzsb/]. Emacs relies more on keybindings, e.g. Ctrl-x Ctrl-s to save a file.&lt;br /&gt;
&lt;br /&gt;
But there are some exceptions. To open the file that the cursor is on, Vim has various keybindings, including &amp;lt;code&amp;gt;gf&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;gF&amp;lt;/code&amp;gt;, Ctrl-w f, etc., but Emacs only has M-x ffap.&lt;br /&gt;
&lt;br /&gt;
==Tree-based undo vs stack-based undo==&lt;br /&gt;
&lt;br /&gt;
==Multiple similar commands vs single repeated command==&lt;br /&gt;
&lt;br /&gt;
This one is a bit hard to explain, but there is a definite pattern where Vim prefers to give the user multiple similar commands, while Emacs prefers to give a single command that you can then repeat or use creatively. The best way to explain is to give a bunch of examples:&lt;br /&gt;
&lt;br /&gt;
* Changing the screen view relative to cursor: Vim gives you zz to scroll so as to leave the cursor at the center of the screen, zt to scroll and put the cursor at the top, and zb to scroll and put the cursor at the bottom. Emacs just gives you a single command, Ctrl-l, which when repeatedly pressed, will cycle between all three views.&lt;br /&gt;
* Moving cursor to top, middle, bottom: Vim gives you H to move cursor to the top of the screen, M to move to middle, and L to move to bottom. Emacs just gives you Alt-r, which will cycle between the three configurations.&lt;br /&gt;
* Folding: Vim gives you fine-grained commands like zo to open a fold, zc to close a fold, zR to globally reduce the fold level in the file, etc. Emacs as far as I know doesn&amp;#039;t have folding by default, but certain major modes like org-mode and markdown-mode do have folding, and in these, you simply press TAB to cycle the different folding levels, or Shift-TAB to do the cycling globally across the entire file.&lt;br /&gt;
* Vim gives you Y, D, C, to copy, delete, and change (respectively) until the end of the line. Emacs just gives you Ctrl-k, which it then expects you to creatively make use of (e.g. if you want to copy until the end of the line, you do Ctrl-k to delete until the end of the line, then Ctrl-/ to undo).&lt;br /&gt;
* Vim has / to search forward, ? to search backward, then n or N to repeat that search in the same direction or opposite direction. Emacs just has Ctrl-s and Ctrl-r to do the search forward or backward. If you want to repeat the search, you just keep pressing Ctrl-s.&lt;br /&gt;
* When you have multiple split windows, Vim has Ctrl-w followed by h, j, k, or l to move to that window. It also has Ctrl-w followed by w to keep cycling between the splits. It also has Ctrl-w followed by p to toggle between the two most recent splits. There are just a lot of fine-grained choices you can make. Emacs just gives you Ctrl-x o which cycles.&lt;br /&gt;
* Text formatting: Vim gives you two operators, gq and gw, which format text; gq moves the cursor to the end of the formatted text, while gw tries to keep the cursor where it was before the formatting. You can then combine these operators with any motion, e.g. gwip to format the current paragraph, gww to format the current line, gwib to format inside parentheses. Emacs just gives you Alt-q to format the paragraph. It is then up to you to creatively combine that with text selection; you can select some text and then do Alt-q to format just the text that is selected.&lt;br /&gt;
* Copy-pasting: Vim gives you named registers, so if you want to copy two different lines and remember both, you do something like &amp;lt;code&amp;gt;&amp;quot;ayy&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;quot;byy&amp;lt;/code&amp;gt;; then you can paste them with &amp;lt;code&amp;gt;&amp;quot;ap&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;quot;bp&amp;lt;/code&amp;gt;. In Emacs, you instead kill both lines, and then when you go to paste them, you first Ctrl-y to paste the most recent, and then you do Alt-y to cycle between the most recently killed text.&lt;br /&gt;
&lt;br /&gt;
In general, I feel that Vim requires more mental energy to use, in some sense. You need to pick the specific action you wanted to perform. You need to think ahead and decide which registers to use. This also comes from Vim&amp;#039;s modal nature, but Vim gives you more decisions and a grammar, whereas Emacs gives you a way to quickly do the common thing. I think much of this may have been forced on the design of Vim by deciding to be keystroke-based, so that the only way to make some action available in normal mode was to assign some key to it. Whereas Emacs went more in the direction of being functions-first, and once you have functions, it is natural to pass arguments to the function to modify the behavior.&lt;br /&gt;
&lt;br /&gt;
==Word movement: predictable vs &amp;quot;do the common thing&amp;quot;==&lt;br /&gt;
&lt;br /&gt;
Vim&amp;#039;s word-based motions like w, b, and e always treat contiguous alphanumeric sequences as single words, and also treats contiguous symbols as single words. This leads to a pretty predictable word movement. Emacs does the thing that most other text editors do, which is that if the cursor is before a symbol, then moving forward by one word will not just jump to the end of the symbols, but will jump to the end of the alphanumeric sequence &amp;#039;&amp;#039;after&amp;#039;&amp;#039; the symbols.&lt;br /&gt;
&lt;br /&gt;
Suppose you have something like: &amp;lt;code&amp;gt;&amp;quot;hello&amp;quot;&amp;lt;/code&amp;gt; where the cursor is on the first quote. In Vim, w will move the cursor onto the h. In Emacs, Alt-f will move the cursor past the h onto the second quote.&lt;br /&gt;
&lt;br /&gt;
==Scrolling: scrolloff vs scroll-into-view==&lt;br /&gt;
&lt;br /&gt;
In Vim, defaults.vim sets scrolloff=5, which means that when the cursor is at the edge of the window, it will always show 5 lines of context. You can never &amp;quot;touch&amp;quot; the very edge of the screen, because the screen will scroll when you try to move to the edge.&lt;br /&gt;
&lt;br /&gt;
In Emacs, the default behavior is instead to jerk the screen to the center &amp;#039;&amp;#039;after&amp;#039;&amp;#039; you step off the edge.&lt;br /&gt;
&lt;br /&gt;
==Search and replace==&lt;br /&gt;
&lt;br /&gt;
Emacs automatically does all the case variants, e.g. if you search and replace foo → bar, it also does Foo → Bar, FOO → Bar, etc. Vim doesn&amp;#039;t do this.&lt;br /&gt;
&lt;br /&gt;
==Prompting the user==&lt;br /&gt;
&lt;br /&gt;
For Vim, see [https://www.reddit.com/r/vim/comments/267vrv/i_am_tim_pope_crafter_of_plugins_ama/chojzsb/].&lt;br /&gt;
&lt;br /&gt;
Emacs often prompts the user.&lt;br /&gt;
&lt;br /&gt;
==Documentation: graph/linear vs tree==&lt;br /&gt;
&lt;br /&gt;
Vim uses a wiki-like help system, where you can click on links to read the sections. It also contains a linear book under :help user-manual. Emacs has a GNU-like hierarchical tree documentation system.&lt;/div&gt;</summary>
		<author><name>Issa</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.issarice.com/index.php?title=Design_philosophies_of_Vim_vs_Emacs&amp;diff=2936</id>
		<title>Design philosophies of Vim vs Emacs</title>
		<link rel="alternate" type="text/html" href="https://wiki.issarice.com/index.php?title=Design_philosophies_of_Vim_vs_Emacs&amp;diff=2936"/>
		<updated>2025-11-27T20:48:28Z</updated>

		<summary type="html">&lt;p&gt;Issa: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
==Modal vs chording==&lt;br /&gt;
&lt;br /&gt;
* Atomic edits and the dot command in Vim: When you use Vim, you naturally start to think in terms of repeatable edits that you can then use the &amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt; command to repeat. But this has a side-effect in that Vim requires you to manually chunk your undo history. Emacs instead automatically chunks undos.&lt;br /&gt;
&lt;br /&gt;
==Unix as IDE vs Emacs as OS==&lt;br /&gt;
&lt;br /&gt;
Vim tries to just be a text editor, and tries to play nice with the other tools on your computer, using commands like &amp;lt;code&amp;gt;:!command&amp;lt;/code&amp;gt; (runs external command) or &amp;lt;code&amp;gt;:w !command&amp;lt;/code&amp;gt; (pipes text to external command via stdin) or &amp;lt;code&amp;gt;:r !command&amp;lt;/code&amp;gt; (reads from external command via stdout).&lt;br /&gt;
&lt;br /&gt;
===...with some exceptions===&lt;br /&gt;
&lt;br /&gt;
Vim has a built-in spellchecker, whereas Emacs doesn&amp;#039;t (it does come with flyspell, which works with an external spellchecker like hunspell or aspell). (Emacs comes with tetris, an RPN calculator, an email client, etc., but not a spell-checker!)&lt;br /&gt;
&lt;br /&gt;
==Session management: per project vs single instance==&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;right way&amp;quot; to use Vim is to have one instance of Vim open per &amp;quot;project&amp;quot;. Each Vim instance maintains its own current directory, so you can e.g. open files relative to that current directory.&lt;br /&gt;
&lt;br /&gt;
In Emacs, Emacs itself doesn&amp;#039;t maintain its current directory, and instead all file-open actions are relative to the buffer&amp;#039;s directory.&lt;br /&gt;
&lt;br /&gt;
Vim can do the Emacs thing with :set autochdir, but this is disabled by default.&lt;br /&gt;
&lt;br /&gt;
See [https://nullprogram.com/blog/2017/08/22/ this blog post] for more details.&lt;br /&gt;
&lt;br /&gt;
==Line-based vs character-based==&lt;br /&gt;
&lt;br /&gt;
Vim comes from a lineage of line-based editors. Registers can be linewise or characterwise, which means that actions like pasting text can act on entire lines or on characters. Some commands, like :substitute or :global, only work linewise.&lt;br /&gt;
&lt;br /&gt;
Emacs is like most other text editors in that it has no concept of linewise.&lt;br /&gt;
&lt;br /&gt;
==Mappings: keystroke based vs function-based==&lt;br /&gt;
&lt;br /&gt;
In Vim, commands like &amp;quot;copy text&amp;quot; don&amp;#039;t have a &amp;quot;name&amp;quot;; they are simply the keystroke that is used to perform that action. So if you want to &amp;quot;program&amp;quot; Vim to repeat some action, such as when defining a mapping, you simply tell Vim which keystrokes you want to repeat.&lt;br /&gt;
&lt;br /&gt;
In Emacs, every keystroke, even entering a single character, has a function that is associated with it. Emacs is simply an interpreter that runs the function associated with the keystroke. You can always do Ctrl-h k followed by the keystroke to find which function is bound to that particular keystroke.&lt;br /&gt;
&lt;br /&gt;
==Actions: commands vs keybindings==&lt;br /&gt;
&lt;br /&gt;
Vim often uses the command-line for even common actions, e.g. :w to save a file [https://www.reddit.com/r/vim/comments/267vrv/i_am_tim_pope_crafter_of_plugins_ama/chojzsb/]. Emacs relies more on keybindings, e.g. Ctrl-x Ctrl-s to save a file.&lt;br /&gt;
&lt;br /&gt;
But there are some exceptions. To open the file that the cursor is on, Vim has various keybindings, including &amp;lt;code&amp;gt;gf&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;gF&amp;lt;/code&amp;gt;, Ctrl-w f, etc., but Emacs only has M-x ffap.&lt;br /&gt;
&lt;br /&gt;
==Tree-based undo vs stack-based undo==&lt;br /&gt;
&lt;br /&gt;
==Multiple similar commands vs single repeated command==&lt;br /&gt;
&lt;br /&gt;
This one is a bit hard to explain, but there is a definite pattern where Vim prefers to give the user multiple similar commands, while Emacs prefers to give a single command that you can then repeat or use creatively. The best way to explain is to give a bunch of examples:&lt;br /&gt;
&lt;br /&gt;
* Changing the screen view relative to cursor: Vim gives you zz to scroll so as to leave the cursor at the center of the screen, zt to scroll and put the cursor at the top, and zb to scroll and put the cursor at the bottom. Emacs just gives you a single command, Ctrl-l, which when repeatedly pressed, will cycle between all three views.&lt;br /&gt;
* Moving cursor to top, middle, bottom: Vim gives you H to move cursor to the top of the screen, M to move to middle, and L to move to bottom. Emacs just gives you Alt-r, which will cycle between the three configurations.&lt;br /&gt;
* Folding: Vim gives you fine-grained commands like zo to open a fold, zc to close a fold, zR to globally reduce the fold level in the file, etc. Emacs as far as I know doesn&amp;#039;t have folding by default, but certain major modes like org-mode and markdown-mode do have folding, and in these, you simply press TAB to cycle the different folding levels, or Shift-TAB to do the cycling globally across the entire file.&lt;br /&gt;
* Vim gives you Y, D, C, to copy, delete, and change (respectively) until the end of the line. Emacs just gives you Ctrl-k, which it then expects you to creatively make use of (e.g. if you want to copy until the end of the line, you do Ctrl-k to delete until the end of the line, then Ctrl-/ to undo).&lt;br /&gt;
* Vim has / to search forward, ? to search backward, then n or N to repeat that search in the same direction or opposite direction. Emacs just has Ctrl-s and Ctrl-r to do the search forward or backward. If you want to repeat the search, you just keep pressing Ctrl-s.&lt;br /&gt;
* When you have multiple split windows, Vim has Ctrl-w followed by h, j, k, or l to move to that window. It also has Ctrl-w followed by w to keep cycling between the splits. It also has Ctrl-w followed by p to toggle between the two most recent splits. There are just a lot of fine-grained choices you can make. Emacs just gives you Ctrl-x o which cycles.&lt;br /&gt;
* Text formatting: Vim gives you two operators, gq and gw, which format text; gq moves the cursor to the end of the formatted text, while gw tries to keep the cursor where it was before the formatting. You can then combine these operators with any motion, e.g. gwip to format the current paragraph, gww to format the current line, gwib to format inside parentheses. Emacs just gives you Alt-q to format the paragraph. It is then up to you to creatively combine that with text selection; you can select some text and then do Alt-q to format just the text that is selected.&lt;br /&gt;
* Copy-pasting: Vim gives you named registers, so if you want to copy two different lines and remember both, you do something like &amp;lt;code&amp;gt;&amp;quot;ayy&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;quot;byy&amp;lt;/code&amp;gt;; then you can paste them with &amp;lt;code&amp;gt;&amp;quot;ap&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;quot;bp&amp;lt;/code&amp;gt;. In Emacs, you instead kill both lines, and then when you go to paste them, you first Ctrl-y to paste the most recent, and then you do Alt-y to cycle between the most recently killed text.&lt;br /&gt;
&lt;br /&gt;
In general, I feel that Vim requires more mental energy to use, in some sense. You need to pick the specific action you wanted to perform. You need to think ahead and decide which registers to use. I think much of this may have been forced on the design of Vim by deciding to be keystroke-based, so that the only way to make some action available in normal mode was to assign some key to it. Whereas Emacs went more in the direction of being functions-first, and once you have functions, it is natural to pass arguments to the function to modify the behavior.&lt;br /&gt;
&lt;br /&gt;
==Word movement: predictable vs &amp;quot;do the common thing&amp;quot;==&lt;br /&gt;
&lt;br /&gt;
Vim&amp;#039;s word-based motions like w, b, and e always treat contiguous alphanumeric sequences as single words, and also treats contiguous symbols as single words. This leads to a pretty predictable word movement. Emacs does the thing that most other text editors do, which is that if the cursor is before a symbol, then moving forward by one word will not just jump to the end of the symbols, but will jump to the end of the alphanumeric sequence &amp;#039;&amp;#039;after&amp;#039;&amp;#039; the symbols.&lt;br /&gt;
&lt;br /&gt;
Suppose you have something like: &amp;lt;code&amp;gt;&amp;quot;hello&amp;quot;&amp;lt;/code&amp;gt; where the cursor is on the first quote. In Vim, w will move the cursor onto the h. In Emacs, Alt-f will move the cursor past the h onto the second quote.&lt;br /&gt;
&lt;br /&gt;
==Scrolling: scrolloff vs scroll-into-view==&lt;br /&gt;
&lt;br /&gt;
In Vim, defaults.vim sets scrolloff=5, which means that when the cursor is at the edge of the window, it will always show 5 lines of context. You can never &amp;quot;touch&amp;quot; the very edge of the screen, because the screen will scroll when you try to move to the edge.&lt;br /&gt;
&lt;br /&gt;
In Emacs, the default behavior is instead to jerk the screen to the center &amp;#039;&amp;#039;after&amp;#039;&amp;#039; you step off the edge.&lt;br /&gt;
&lt;br /&gt;
==Search and replace==&lt;br /&gt;
&lt;br /&gt;
Emacs automatically does all the case variants, e.g. if you search and replace foo → bar, it also does Foo → Bar, FOO → Bar, etc. Vim doesn&amp;#039;t do this.&lt;br /&gt;
&lt;br /&gt;
==Prompting the user==&lt;br /&gt;
&lt;br /&gt;
For Vim, see [https://www.reddit.com/r/vim/comments/267vrv/i_am_tim_pope_crafter_of_plugins_ama/chojzsb/].&lt;br /&gt;
&lt;br /&gt;
Emacs often prompts the user.&lt;br /&gt;
&lt;br /&gt;
==Documentation: graph/linear vs tree==&lt;br /&gt;
&lt;br /&gt;
Vim uses a wiki-like help system, where you can click on links to read the sections. It also contains a linear book under :help user-manual. Emacs has a GNU-like hierarchical tree documentation system.&lt;/div&gt;</summary>
		<author><name>Issa</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.issarice.com/index.php?title=Design_philosophies_of_Vim_vs_Emacs&amp;diff=2935</id>
		<title>Design philosophies of Vim vs Emacs</title>
		<link rel="alternate" type="text/html" href="https://wiki.issarice.com/index.php?title=Design_philosophies_of_Vim_vs_Emacs&amp;diff=2935"/>
		<updated>2025-11-27T20:47:42Z</updated>

		<summary type="html">&lt;p&gt;Issa: /* Actions: commands vs keybindings */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
==Modal vs chording==&lt;br /&gt;
&lt;br /&gt;
* Atomic edits and the dot command in Vim: When you use Vim, you naturally start to think in terms of repeatable edits that you can then use the &amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt; command to repeat. But this has a side-effect in that Vim requires you to manually chunk your undo history. Emacs instead automatically chunks undos.&lt;br /&gt;
&lt;br /&gt;
==Unix as IDE vs Emacs as OS==&lt;br /&gt;
&lt;br /&gt;
Vim tries to just be a text editor, and tries to play nice with the other tools on your computer, using commands like &amp;lt;code&amp;gt;:!command&amp;lt;/code&amp;gt; (runs external command) or &amp;lt;code&amp;gt;:w !command&amp;lt;/code&amp;gt; (pipes text to external command via stdin) or &amp;lt;code&amp;gt;:r !command&amp;lt;/code&amp;gt; (reads from external command via stdout).&lt;br /&gt;
&lt;br /&gt;
===...with some exceptions===&lt;br /&gt;
&lt;br /&gt;
Vim has a built-in spellchecker, whereas Emacs doesn&amp;#039;t (it does come with flyspell, which works with an external spellchecker like hunspell or aspell). (Emacs comes with tetris, an RPN calculator, an email client, etc., but not a spell-checker!)&lt;br /&gt;
&lt;br /&gt;
==Session management: per project vs single instance==&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;right way&amp;quot; to use Vim is to have one instance of Vim open per &amp;quot;project&amp;quot;. Each Vim instance maintains its own current directory, so you can e.g. open files relative to that current directory.&lt;br /&gt;
&lt;br /&gt;
In Emacs, Emacs itself doesn&amp;#039;t maintain its current directory, and instead all file-open actions are relative to the buffer&amp;#039;s directory.&lt;br /&gt;
&lt;br /&gt;
Vim can do the Emacs thing with :set autochdir, but this is disabled by default.&lt;br /&gt;
&lt;br /&gt;
See [https://nullprogram.com/blog/2017/08/22/ this blog post] for more details.&lt;br /&gt;
&lt;br /&gt;
==Line-based vs character-based==&lt;br /&gt;
&lt;br /&gt;
Vim comes from a lineage of line-based editors. Registers can be linewise or characterwise, which means that actions like pasting text can act on entire lines or on characters. Some commands, like :substitute or :global, only work linewise.&lt;br /&gt;
&lt;br /&gt;
Emacs is like most other text editors in that it has no concept of linewise.&lt;br /&gt;
&lt;br /&gt;
==Mappings: keystroke based vs function-based==&lt;br /&gt;
&lt;br /&gt;
In Vim, commands like &amp;quot;copy text&amp;quot; don&amp;#039;t have a &amp;quot;name&amp;quot;; they are simply the keystroke that is used to perform that action. So if you want to &amp;quot;program&amp;quot; Vim to repeat some action, such as when defining a mapping, you simply tell Vim which keystrokes you want to repeat.&lt;br /&gt;
&lt;br /&gt;
In Emacs, every keystroke, even entering a single character, has a function that is associated with it. Emacs is simply an interpreter that runs the function associated with the keystroke. You can always do Ctrl-h k followed by the keystroke to find which function is bound to that particular keystroke.&lt;br /&gt;
&lt;br /&gt;
==Actions: commands vs keybindings==&lt;br /&gt;
&lt;br /&gt;
Vim often uses the command-line for even common actions, e.g. :w to save a file [https://www.reddit.com/r/vim/comments/267vrv/i_am_tim_pope_crafter_of_plugins_ama/chojzsb/]. Emacs relies more on keybindings, e.g. Ctrl-x Ctrl-s to save a file.&lt;br /&gt;
&lt;br /&gt;
But there are some exceptions. To open the file that the cursor is on, Vim has various keybindings, including &amp;lt;code&amp;gt;gf&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;gF&amp;lt;/code&amp;gt;, Ctrl-w f, etc., but Emacs only has M-x ffap.&lt;br /&gt;
&lt;br /&gt;
==Tree-based undo vs stack-based undo==&lt;br /&gt;
&lt;br /&gt;
==Multiple similar commands vs single repeated command==&lt;br /&gt;
&lt;br /&gt;
This one is a bit hard to explain, but there is a definite pattern where Vim prefers to give the user multiple similar commands, while Emacs prefers to give a single command that you can then repeat or use creatively. The best way to explain is to give a bunch of examples:&lt;br /&gt;
&lt;br /&gt;
* Changing the screen view relative to cursor: Vim gives you zz to scroll so as to leave the cursor at the center of the screen, zt to scroll and put the cursor at the top, and zb to scroll and put the cursor at the bottom. Emacs just gives you a single command, Ctrl-l, which when repeatedly pressed, will cycle between all three views.&lt;br /&gt;
* Moving cursor to top, middle, bottom: Vim gives you H to move cursor to the top of the screen, M to move to middle, and L to move to bottom. Emacs just gives you Alt-r, which will cycle between the three configurations.&lt;br /&gt;
* Folding: Vim gives you fine-grained commands like zo to open a fold, zc to close a fold, zR to globally reduce the fold level in the file, etc. Emacs as far as I know doesn&amp;#039;t have folding by default, but certain major modes like org-mode and markdown-mode do have folding, and in these, you simply press TAB to cycle the different folding levels, or Shift-TAB to do the cycling globally across the entire file.&lt;br /&gt;
* Vim gives you Y, D, C, to copy, delete, and change (respectively) until the end of the line. Emacs just gives you Ctrl-k, which it then expects you to creatively make use of (e.g. if you want to copy until the end of the line, you do Ctrl-k to delete until the end of the line, then Ctrl-/ to undo).&lt;br /&gt;
* Vim has / to search forward, ? to search backward, then n or N to repeat that search in the same direction or opposite direction. Emacs just has Ctrl-s and Ctrl-r to do the search forward or backward. If you want to repeat the search, you just keep pressing Ctrl-s.&lt;br /&gt;
* When you have multiple split windows, Vim has Ctrl-w followed by h, j, k, or l to move to that window. It also has Ctrl-w followed by w to keep cycling between the splits. It also has Ctrl-w followed by p to toggle between the two most recent splits. There are just a lot of fine-grained choices you can make. Emacs just gives you Ctrl-x o which cycles.&lt;br /&gt;
* Text formatting: Vim gives you two operators, gq and gw, which format text; gq moves the cursor to the end of the formatted text, while gw tries to keep the cursor where it was before the formatting. You can then combine these operators with any motion, e.g. gwip to format the current paragraph, gww to format the current line, gwib to format inside parentheses. Emacs just gives you Alt-q to format the paragraph. It is then up to you to creatively combine that with text selection; you can select some text and then do Alt-q to format just the text that is selected.&lt;br /&gt;
* Copy-pasting: Vim gives you named registers, so if you want to copy two different lines and remember both, you do something like &amp;lt;code&amp;gt;&amp;quot;ayy&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;quot;byy&amp;lt;/code&amp;gt;; then you can paste them with &amp;lt;code&amp;gt;&amp;quot;ap&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;quot;bp&amp;lt;/code&amp;gt;. In Emacs, you instead kill both lines, and then when you go to paste them, you first Ctrl-y to paste the most recent, and then you do Alt-y to cycle between the most recently killed text.&lt;br /&gt;
&lt;br /&gt;
In general, I feel that Vim requires more mental energy to use, in some sense. You need to pick the specific action you wanted to perform. You need to think ahead and decide which registers to use. I think much of this may have been forced on the design of Vim by deciding to be keystroke-based, so that the only way to make some action available in normal mode was to assign some key to it. Whereas Emacs went more in the direction of being functions-first, and once you have functions, it is natural to pass arguments to the function to modify the behavior.&lt;br /&gt;
&lt;br /&gt;
==Word movement: predictable vs &amp;quot;do the common thing&amp;quot;==&lt;br /&gt;
&lt;br /&gt;
Vim&amp;#039;s word-based motions like w, b, and e always treat contiguous alphanumeric sequences as single words, and also treats contiguous symbols as single words. This leads to a pretty predictable word movement. Emacs does the thing that most other text editors do, which is that if the cursor is before a symbol, then moving forward by one word will not just jump to the end of the symbols, but will jump to the end of the alphanumeric sequence &amp;#039;&amp;#039;after&amp;#039;&amp;#039; the symbols.&lt;br /&gt;
&lt;br /&gt;
Suppose you have something like: &amp;lt;code&amp;gt;&amp;quot;hello&amp;quot;&amp;lt;/code&amp;gt; where the cursor is on the first quote. In Vim, w will move the cursor onto the h. In Emacs, Alt-f will move the cursor past the h onto the second quote.&lt;br /&gt;
&lt;br /&gt;
==Scrolling: scrolloff vs scroll-into-view==&lt;br /&gt;
&lt;br /&gt;
In Vim, defaults.vim sets scrolloff=5, which means that when the cursor is at the edge of the window, it will always show 5 lines of context. You can never &amp;quot;touch&amp;quot; the very edge of the screen, because the screen will scroll when you try to move to the edge.&lt;br /&gt;
&lt;br /&gt;
In Emacs, the default behavior is instead to jerk the screen to the center &amp;#039;&amp;#039;after&amp;#039;&amp;#039; you step off the edge.&lt;br /&gt;
&lt;br /&gt;
==Search and replace==&lt;br /&gt;
&lt;br /&gt;
Emacs automatically does all the case variants, e.g. if you search and replace foo → bar, it also does Foo → Bar, FOO → Bar, etc. Vim doesn&amp;#039;t do this.&lt;br /&gt;
&lt;br /&gt;
==Documentation: graph/linear vs tree==&lt;br /&gt;
&lt;br /&gt;
Vim uses a wiki-like help system, where you can click on links to read the sections. It also contains a linear book under :help user-manual. Emacs has a GNU-like hierarchical tree documentation system.&lt;/div&gt;</summary>
		<author><name>Issa</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.issarice.com/index.php?title=Design_philosophies_of_Vim_vs_Emacs&amp;diff=2934</id>
		<title>Design philosophies of Vim vs Emacs</title>
		<link rel="alternate" type="text/html" href="https://wiki.issarice.com/index.php?title=Design_philosophies_of_Vim_vs_Emacs&amp;diff=2934"/>
		<updated>2025-11-27T20:46:32Z</updated>

		<summary type="html">&lt;p&gt;Issa: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
==Modal vs chording==&lt;br /&gt;
&lt;br /&gt;
* Atomic edits and the dot command in Vim: When you use Vim, you naturally start to think in terms of repeatable edits that you can then use the &amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt; command to repeat. But this has a side-effect in that Vim requires you to manually chunk your undo history. Emacs instead automatically chunks undos.&lt;br /&gt;
&lt;br /&gt;
==Unix as IDE vs Emacs as OS==&lt;br /&gt;
&lt;br /&gt;
Vim tries to just be a text editor, and tries to play nice with the other tools on your computer, using commands like &amp;lt;code&amp;gt;:!command&amp;lt;/code&amp;gt; (runs external command) or &amp;lt;code&amp;gt;:w !command&amp;lt;/code&amp;gt; (pipes text to external command via stdin) or &amp;lt;code&amp;gt;:r !command&amp;lt;/code&amp;gt; (reads from external command via stdout).&lt;br /&gt;
&lt;br /&gt;
===...with some exceptions===&lt;br /&gt;
&lt;br /&gt;
Vim has a built-in spellchecker, whereas Emacs doesn&amp;#039;t (it does come with flyspell, which works with an external spellchecker like hunspell or aspell). (Emacs comes with tetris, an RPN calculator, an email client, etc., but not a spell-checker!)&lt;br /&gt;
&lt;br /&gt;
==Session management: per project vs single instance==&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;right way&amp;quot; to use Vim is to have one instance of Vim open per &amp;quot;project&amp;quot;. Each Vim instance maintains its own current directory, so you can e.g. open files relative to that current directory.&lt;br /&gt;
&lt;br /&gt;
In Emacs, Emacs itself doesn&amp;#039;t maintain its current directory, and instead all file-open actions are relative to the buffer&amp;#039;s directory.&lt;br /&gt;
&lt;br /&gt;
Vim can do the Emacs thing with :set autochdir, but this is disabled by default.&lt;br /&gt;
&lt;br /&gt;
See [https://nullprogram.com/blog/2017/08/22/ this blog post] for more details.&lt;br /&gt;
&lt;br /&gt;
==Line-based vs character-based==&lt;br /&gt;
&lt;br /&gt;
Vim comes from a lineage of line-based editors. Registers can be linewise or characterwise, which means that actions like pasting text can act on entire lines or on characters. Some commands, like :substitute or :global, only work linewise.&lt;br /&gt;
&lt;br /&gt;
Emacs is like most other text editors in that it has no concept of linewise.&lt;br /&gt;
&lt;br /&gt;
==Mappings: keystroke based vs function-based==&lt;br /&gt;
&lt;br /&gt;
In Vim, commands like &amp;quot;copy text&amp;quot; don&amp;#039;t have a &amp;quot;name&amp;quot;; they are simply the keystroke that is used to perform that action. So if you want to &amp;quot;program&amp;quot; Vim to repeat some action, such as when defining a mapping, you simply tell Vim which keystrokes you want to repeat.&lt;br /&gt;
&lt;br /&gt;
In Emacs, every keystroke, even entering a single character, has a function that is associated with it. Emacs is simply an interpreter that runs the function associated with the keystroke. You can always do Ctrl-h k followed by the keystroke to find which function is bound to that particular keystroke.&lt;br /&gt;
&lt;br /&gt;
==Actions: commands vs keybindings==&lt;br /&gt;
&lt;br /&gt;
Vim often uses the command-line for even common actions, e.g. :w to save a file. Emacs relies more on keybindings, e.g. Ctrl-x Ctrl-s to save a file.&lt;br /&gt;
&lt;br /&gt;
But there are some exceptions. To open the file that the cursor is on, Vim has various keybindings, including &amp;lt;code&amp;gt;gf&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;gF&amp;lt;/code&amp;gt;, Ctrl-w f, etc., but Emacs only has M-x ffap.&lt;br /&gt;
&lt;br /&gt;
==Tree-based undo vs stack-based undo==&lt;br /&gt;
&lt;br /&gt;
==Multiple similar commands vs single repeated command==&lt;br /&gt;
&lt;br /&gt;
This one is a bit hard to explain, but there is a definite pattern where Vim prefers to give the user multiple similar commands, while Emacs prefers to give a single command that you can then repeat or use creatively. The best way to explain is to give a bunch of examples:&lt;br /&gt;
&lt;br /&gt;
* Changing the screen view relative to cursor: Vim gives you zz to scroll so as to leave the cursor at the center of the screen, zt to scroll and put the cursor at the top, and zb to scroll and put the cursor at the bottom. Emacs just gives you a single command, Ctrl-l, which when repeatedly pressed, will cycle between all three views.&lt;br /&gt;
* Moving cursor to top, middle, bottom: Vim gives you H to move cursor to the top of the screen, M to move to middle, and L to move to bottom. Emacs just gives you Alt-r, which will cycle between the three configurations.&lt;br /&gt;
* Folding: Vim gives you fine-grained commands like zo to open a fold, zc to close a fold, zR to globally reduce the fold level in the file, etc. Emacs as far as I know doesn&amp;#039;t have folding by default, but certain major modes like org-mode and markdown-mode do have folding, and in these, you simply press TAB to cycle the different folding levels, or Shift-TAB to do the cycling globally across the entire file.&lt;br /&gt;
* Vim gives you Y, D, C, to copy, delete, and change (respectively) until the end of the line. Emacs just gives you Ctrl-k, which it then expects you to creatively make use of (e.g. if you want to copy until the end of the line, you do Ctrl-k to delete until the end of the line, then Ctrl-/ to undo).&lt;br /&gt;
* Vim has / to search forward, ? to search backward, then n or N to repeat that search in the same direction or opposite direction. Emacs just has Ctrl-s and Ctrl-r to do the search forward or backward. If you want to repeat the search, you just keep pressing Ctrl-s.&lt;br /&gt;
* When you have multiple split windows, Vim has Ctrl-w followed by h, j, k, or l to move to that window. It also has Ctrl-w followed by w to keep cycling between the splits. It also has Ctrl-w followed by p to toggle between the two most recent splits. There are just a lot of fine-grained choices you can make. Emacs just gives you Ctrl-x o which cycles.&lt;br /&gt;
* Text formatting: Vim gives you two operators, gq and gw, which format text; gq moves the cursor to the end of the formatted text, while gw tries to keep the cursor where it was before the formatting. You can then combine these operators with any motion, e.g. gwip to format the current paragraph, gww to format the current line, gwib to format inside parentheses. Emacs just gives you Alt-q to format the paragraph. It is then up to you to creatively combine that with text selection; you can select some text and then do Alt-q to format just the text that is selected.&lt;br /&gt;
* Copy-pasting: Vim gives you named registers, so if you want to copy two different lines and remember both, you do something like &amp;lt;code&amp;gt;&amp;quot;ayy&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;quot;byy&amp;lt;/code&amp;gt;; then you can paste them with &amp;lt;code&amp;gt;&amp;quot;ap&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;quot;bp&amp;lt;/code&amp;gt;. In Emacs, you instead kill both lines, and then when you go to paste them, you first Ctrl-y to paste the most recent, and then you do Alt-y to cycle between the most recently killed text.&lt;br /&gt;
&lt;br /&gt;
In general, I feel that Vim requires more mental energy to use, in some sense. You need to pick the specific action you wanted to perform. You need to think ahead and decide which registers to use. I think much of this may have been forced on the design of Vim by deciding to be keystroke-based, so that the only way to make some action available in normal mode was to assign some key to it. Whereas Emacs went more in the direction of being functions-first, and once you have functions, it is natural to pass arguments to the function to modify the behavior.&lt;br /&gt;
&lt;br /&gt;
==Word movement: predictable vs &amp;quot;do the common thing&amp;quot;==&lt;br /&gt;
&lt;br /&gt;
Vim&amp;#039;s word-based motions like w, b, and e always treat contiguous alphanumeric sequences as single words, and also treats contiguous symbols as single words. This leads to a pretty predictable word movement. Emacs does the thing that most other text editors do, which is that if the cursor is before a symbol, then moving forward by one word will not just jump to the end of the symbols, but will jump to the end of the alphanumeric sequence &amp;#039;&amp;#039;after&amp;#039;&amp;#039; the symbols.&lt;br /&gt;
&lt;br /&gt;
Suppose you have something like: &amp;lt;code&amp;gt;&amp;quot;hello&amp;quot;&amp;lt;/code&amp;gt; where the cursor is on the first quote. In Vim, w will move the cursor onto the h. In Emacs, Alt-f will move the cursor past the h onto the second quote.&lt;br /&gt;
&lt;br /&gt;
==Scrolling: scrolloff vs scroll-into-view==&lt;br /&gt;
&lt;br /&gt;
In Vim, defaults.vim sets scrolloff=5, which means that when the cursor is at the edge of the window, it will always show 5 lines of context. You can never &amp;quot;touch&amp;quot; the very edge of the screen, because the screen will scroll when you try to move to the edge.&lt;br /&gt;
&lt;br /&gt;
In Emacs, the default behavior is instead to jerk the screen to the center &amp;#039;&amp;#039;after&amp;#039;&amp;#039; you step off the edge.&lt;br /&gt;
&lt;br /&gt;
==Search and replace==&lt;br /&gt;
&lt;br /&gt;
Emacs automatically does all the case variants, e.g. if you search and replace foo → bar, it also does Foo → Bar, FOO → Bar, etc. Vim doesn&amp;#039;t do this.&lt;br /&gt;
&lt;br /&gt;
==Documentation: graph/linear vs tree==&lt;br /&gt;
&lt;br /&gt;
Vim uses a wiki-like help system, where you can click on links to read the sections. It also contains a linear book under :help user-manual. Emacs has a GNU-like hierarchical tree documentation system.&lt;/div&gt;</summary>
		<author><name>Issa</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.issarice.com/index.php?title=Design_philosophies_of_Vim_vs_Emacs&amp;diff=2932</id>
		<title>Design philosophies of Vim vs Emacs</title>
		<link rel="alternate" type="text/html" href="https://wiki.issarice.com/index.php?title=Design_philosophies_of_Vim_vs_Emacs&amp;diff=2932"/>
		<updated>2025-11-27T20:42:29Z</updated>

		<summary type="html">&lt;p&gt;Issa: Issa moved page Vim vs Emacs to Design philosophies of Vim vs Emacs&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
==Modal vs chording==&lt;br /&gt;
&lt;br /&gt;
* Atomic edits and the dot command in Vim: When you use Vim, you naturally start to think in terms of repeatable edits that you can then use the &amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt; command to repeat. But this has a side-effect in that Vim requires you to manually chunk your undo history. Emacs instead automatically chunks undos.&lt;br /&gt;
&lt;br /&gt;
==Unix as IDE vs Emacs as OS==&lt;br /&gt;
&lt;br /&gt;
Vim tries to just be a text editor, and tries to play nice with the other tools on your computer, using commands like &amp;lt;code&amp;gt;:!command&amp;lt;/code&amp;gt; (runs external command) or &amp;lt;code&amp;gt;:w !command&amp;lt;/code&amp;gt; (pipes text to external command via stdin) or &amp;lt;code&amp;gt;:r !command&amp;lt;/code&amp;gt; (reads from external command via stdout).&lt;br /&gt;
&lt;br /&gt;
===...with some exceptions===&lt;br /&gt;
&lt;br /&gt;
Vim has a built-in spellchecker, whereas Emacs doesn&amp;#039;t (it does come with flyspell, which works with an external spellchecker like hunspell or aspell). (Emacs comes with tetris, an RPN calculator, an email client, etc., but not a spell-checker!)&lt;br /&gt;
&lt;br /&gt;
==Session management: per project vs single instance==&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;right way&amp;quot; to use Vim is to have one instance of Vim open per &amp;quot;project&amp;quot;. Each Vim instance maintains its own current directory, so you can e.g. open files relative to that current directory.&lt;br /&gt;
&lt;br /&gt;
In Emacs, Emacs itself doesn&amp;#039;t maintain its current directory, and instead all file-open actions are relative to the buffer&amp;#039;s directory.&lt;br /&gt;
&lt;br /&gt;
Vim can do the Emacs thing with :set autochdir, but this is disabled by default.&lt;br /&gt;
&lt;br /&gt;
See [https://nullprogram.com/blog/2017/08/22/ this blog post] for more details.&lt;br /&gt;
&lt;br /&gt;
==Line-based vs character-based==&lt;br /&gt;
&lt;br /&gt;
Vim comes from a lineage of line-based editors. Registers can be linewise or characterwise, which means that actions like pasting text can act on entire lines or on characters. Some commands, like :substitute or :global, only work linewise.&lt;br /&gt;
&lt;br /&gt;
Emacs is like most other text editors in that it has no concept of linewise.&lt;br /&gt;
&lt;br /&gt;
==Mappings: keystroke based vs function-based==&lt;br /&gt;
&lt;br /&gt;
In Vim, commands like &amp;quot;copy text&amp;quot; don&amp;#039;t have a &amp;quot;name&amp;quot;; they are simply the keystroke that is used to perform that action. So if you want to &amp;quot;program&amp;quot; Vim to repeat some action, such as when defining a mapping, you simply tell Vim which keystrokes you want to repeat.&lt;br /&gt;
&lt;br /&gt;
In Emacs, every keystroke, even entering a single character, has a function that is associated with it. Emacs is simply an interpreter that runs the function associated with the keystroke. You can always do Ctrl-h k followed by the keystroke to find which function is bound to that particular keystroke.&lt;br /&gt;
&lt;br /&gt;
==Tree-based undo vs stack-based undo==&lt;br /&gt;
&lt;br /&gt;
==Multiple similar commands vs single repeated command==&lt;br /&gt;
&lt;br /&gt;
This one is a bit hard to explain, but there is a definite pattern where Vim prefers to give the user multiple similar commands, while Emacs prefers to give a single command that you can then repeat or use creatively. The best way to explain is to give a bunch of examples:&lt;br /&gt;
&lt;br /&gt;
* Changing the screen view relative to cursor: Vim gives you zz to scroll so as to leave the cursor at the center of the screen, zt to scroll and put the cursor at the top, and zb to scroll and put the cursor at the bottom. Emacs just gives you a single command, Ctrl-l, which when repeatedly pressed, will cycle between all three views.&lt;br /&gt;
* Moving cursor to top, middle, bottom: Vim gives you H to move cursor to the top of the screen, M to move to middle, and L to move to bottom. Emacs just gives you Alt-r, which will cycle between the three configurations.&lt;br /&gt;
* Folding: Vim gives you fine-grained commands like zo to open a fold, zc to close a fold, zR to globally reduce the fold level in the file, etc. Emacs as far as I know doesn&amp;#039;t have folding by default, but certain major modes like org-mode and markdown-mode do have folding, and in these, you simply press TAB to cycle the different folding levels, or Shift-TAB to do the cycling globally across the entire file.&lt;br /&gt;
* Vim gives you Y, D, C, to copy, delete, and change (respectively) until the end of the line. Emacs just gives you Ctrl-k, which it then expects you to creatively make use of (e.g. if you want to copy until the end of the line, you do Ctrl-k to delete until the end of the line, then Ctrl-/ to undo).&lt;br /&gt;
* Vim has / to search forward, ? to search backward, then n or N to repeat that search in the same direction or opposite direction. Emacs just has Ctrl-s and Ctrl-r to do the search forward or backward. If you want to repeat the search, you just keep pressing Ctrl-s.&lt;br /&gt;
* When you have multiple split windows, Vim has Ctrl-w followed by h, j, k, or l to move to that window. It also has Ctrl-w followed by w to keep cycling between the splits. It also has Ctrl-w followed by p to toggle between the two most recent splits. There are just a lot of fine-grained choices you can make. Emacs just gives you Ctrl-x o which cycles.&lt;br /&gt;
* Text formatting: Vim gives you two operators, gq and gw, which format text; gq moves the cursor to the end of the formatted text, while gw tries to keep the cursor where it was before the formatting. You can then combine these operators with any motion, e.g. gwip to format the current paragraph, gww to format the current line, gwib to format inside parentheses. Emacs just gives you Alt-q to format the paragraph. It is then up to you to creatively combine that with text selection; you can select some text and then do Alt-q to format just the text that is selected.&lt;br /&gt;
* Copy-pasting: Vim gives you named registers, so if you want to copy two different lines and remember both, you do something like &amp;lt;code&amp;gt;&amp;quot;ayy&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;quot;byy&amp;lt;/code&amp;gt;; then you can paste them with &amp;lt;code&amp;gt;&amp;quot;ap&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;quot;bp&amp;lt;/code&amp;gt;. In Emacs, you instead kill both lines, and then when you go to paste them, you first Ctrl-y to paste the most recent, and then you do Alt-y to cycle between the most recently killed text.&lt;br /&gt;
&lt;br /&gt;
In general, I feel that Vim requires more mental energy to use, in some sense. You need to pick the specific action you wanted to perform. You need to think ahead and decide which registers to use. I think much of this may have been forced on the design of Vim by deciding to be keystroke-based, so that the only way to make some action available in normal mode was to assign some key to it. Whereas Emacs went more in the direction of being functions-first, and once you have functions, it is natural to pass arguments to the function to modify the behavior.&lt;br /&gt;
&lt;br /&gt;
==Word movement: predictable vs &amp;quot;do the common thing&amp;quot;==&lt;br /&gt;
&lt;br /&gt;
Vim&amp;#039;s word-based motions like w, b, and e always treat contiguous alphanumeric sequences as single words, and also treats contiguous symbols as single words. This leads to a pretty predictable word movement. Emacs does the thing that most other text editors do, which is that if the cursor is before a symbol, then moving forward by one word will not just jump to the end of the symbols, but will jump to the end of the alphanumeric sequence &amp;#039;&amp;#039;after&amp;#039;&amp;#039; the symbols.&lt;br /&gt;
&lt;br /&gt;
Suppose you have something like: &amp;lt;code&amp;gt;&amp;quot;hello&amp;quot;&amp;lt;/code&amp;gt; where the cursor is on the first quote. In Vim, w will move the cursor onto the h. In Emacs, Alt-f will move the cursor past the h onto the second quote.&lt;br /&gt;
&lt;br /&gt;
==Scrolling: scrolloff vs scroll-into-view==&lt;br /&gt;
&lt;br /&gt;
In Vim, defaults.vim sets scrolloff=5, which means that when the cursor is at the edge of the window, it will always show 5 lines of context. You can never &amp;quot;touch&amp;quot; the very edge of the screen, because the screen will scroll when you try to move to the edge.&lt;br /&gt;
&lt;br /&gt;
In Emacs, the default behavior is instead to jerk the screen to the center &amp;#039;&amp;#039;after&amp;#039;&amp;#039; you step off the edge.&lt;br /&gt;
&lt;br /&gt;
==Search and replace==&lt;br /&gt;
&lt;br /&gt;
Emacs automatically does all the case variants, e.g. if you search and replace foo → bar, it also does Foo → Bar, FOO → Bar, etc. Vim doesn&amp;#039;t do this.&lt;br /&gt;
&lt;br /&gt;
==Documentation: graph/linear vs tree==&lt;br /&gt;
&lt;br /&gt;
Vim uses a wiki-like help system, where you can click on links to read the sections. It also contains a linear book under :help user-manual. Emacs has a GNU-like hierarchical tree documentation system.&lt;/div&gt;</summary>
		<author><name>Issa</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.issarice.com/index.php?title=Vim_vs_Emacs&amp;diff=2933</id>
		<title>Vim vs Emacs</title>
		<link rel="alternate" type="text/html" href="https://wiki.issarice.com/index.php?title=Vim_vs_Emacs&amp;diff=2933"/>
		<updated>2025-11-27T20:42:29Z</updated>

		<summary type="html">&lt;p&gt;Issa: Issa moved page Vim vs Emacs to Design philosophies of Vim vs Emacs&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Design philosophies of Vim vs Emacs]]&lt;/div&gt;</summary>
		<author><name>Issa</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.issarice.com/index.php?title=Design_philosophies_of_Vim_vs_Emacs&amp;diff=2931</id>
		<title>Design philosophies of Vim vs Emacs</title>
		<link rel="alternate" type="text/html" href="https://wiki.issarice.com/index.php?title=Design_philosophies_of_Vim_vs_Emacs&amp;diff=2931"/>
		<updated>2025-11-27T20:40:55Z</updated>

		<summary type="html">&lt;p&gt;Issa: /* Search and replace */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
==Modal vs chording==&lt;br /&gt;
&lt;br /&gt;
* Atomic edits and the dot command in Vim: When you use Vim, you naturally start to think in terms of repeatable edits that you can then use the &amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt; command to repeat. But this has a side-effect in that Vim requires you to manually chunk your undo history. Emacs instead automatically chunks undos.&lt;br /&gt;
&lt;br /&gt;
==Unix as IDE vs Emacs as OS==&lt;br /&gt;
&lt;br /&gt;
Vim tries to just be a text editor, and tries to play nice with the other tools on your computer, using commands like &amp;lt;code&amp;gt;:!command&amp;lt;/code&amp;gt; (runs external command) or &amp;lt;code&amp;gt;:w !command&amp;lt;/code&amp;gt; (pipes text to external command via stdin) or &amp;lt;code&amp;gt;:r !command&amp;lt;/code&amp;gt; (reads from external command via stdout).&lt;br /&gt;
&lt;br /&gt;
===...with some exceptions===&lt;br /&gt;
&lt;br /&gt;
Vim has a built-in spellchecker, whereas Emacs doesn&amp;#039;t (it does come with flyspell, which works with an external spellchecker like hunspell or aspell). (Emacs comes with tetris, an RPN calculator, an email client, etc., but not a spell-checker!)&lt;br /&gt;
&lt;br /&gt;
==Session management: per project vs single instance==&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;right way&amp;quot; to use Vim is to have one instance of Vim open per &amp;quot;project&amp;quot;. Each Vim instance maintains its own current directory, so you can e.g. open files relative to that current directory.&lt;br /&gt;
&lt;br /&gt;
In Emacs, Emacs itself doesn&amp;#039;t maintain its current directory, and instead all file-open actions are relative to the buffer&amp;#039;s directory.&lt;br /&gt;
&lt;br /&gt;
Vim can do the Emacs thing with :set autochdir, but this is disabled by default.&lt;br /&gt;
&lt;br /&gt;
See [https://nullprogram.com/blog/2017/08/22/ this blog post] for more details.&lt;br /&gt;
&lt;br /&gt;
==Line-based vs character-based==&lt;br /&gt;
&lt;br /&gt;
Vim comes from a lineage of line-based editors. Registers can be linewise or characterwise, which means that actions like pasting text can act on entire lines or on characters. Some commands, like :substitute or :global, only work linewise.&lt;br /&gt;
&lt;br /&gt;
Emacs is like most other text editors in that it has no concept of linewise.&lt;br /&gt;
&lt;br /&gt;
==Mappings: keystroke based vs function-based==&lt;br /&gt;
&lt;br /&gt;
In Vim, commands like &amp;quot;copy text&amp;quot; don&amp;#039;t have a &amp;quot;name&amp;quot;; they are simply the keystroke that is used to perform that action. So if you want to &amp;quot;program&amp;quot; Vim to repeat some action, such as when defining a mapping, you simply tell Vim which keystrokes you want to repeat.&lt;br /&gt;
&lt;br /&gt;
In Emacs, every keystroke, even entering a single character, has a function that is associated with it. Emacs is simply an interpreter that runs the function associated with the keystroke. You can always do Ctrl-h k followed by the keystroke to find which function is bound to that particular keystroke.&lt;br /&gt;
&lt;br /&gt;
==Tree-based undo vs stack-based undo==&lt;br /&gt;
&lt;br /&gt;
==Multiple similar commands vs single repeated command==&lt;br /&gt;
&lt;br /&gt;
This one is a bit hard to explain, but there is a definite pattern where Vim prefers to give the user multiple similar commands, while Emacs prefers to give a single command that you can then repeat or use creatively. The best way to explain is to give a bunch of examples:&lt;br /&gt;
&lt;br /&gt;
* Changing the screen view relative to cursor: Vim gives you zz to scroll so as to leave the cursor at the center of the screen, zt to scroll and put the cursor at the top, and zb to scroll and put the cursor at the bottom. Emacs just gives you a single command, Ctrl-l, which when repeatedly pressed, will cycle between all three views.&lt;br /&gt;
* Moving cursor to top, middle, bottom: Vim gives you H to move cursor to the top of the screen, M to move to middle, and L to move to bottom. Emacs just gives you Alt-r, which will cycle between the three configurations.&lt;br /&gt;
* Folding: Vim gives you fine-grained commands like zo to open a fold, zc to close a fold, zR to globally reduce the fold level in the file, etc. Emacs as far as I know doesn&amp;#039;t have folding by default, but certain major modes like org-mode and markdown-mode do have folding, and in these, you simply press TAB to cycle the different folding levels, or Shift-TAB to do the cycling globally across the entire file.&lt;br /&gt;
* Vim gives you Y, D, C, to copy, delete, and change (respectively) until the end of the line. Emacs just gives you Ctrl-k, which it then expects you to creatively make use of (e.g. if you want to copy until the end of the line, you do Ctrl-k to delete until the end of the line, then Ctrl-/ to undo).&lt;br /&gt;
* Vim has / to search forward, ? to search backward, then n or N to repeat that search in the same direction or opposite direction. Emacs just has Ctrl-s and Ctrl-r to do the search forward or backward. If you want to repeat the search, you just keep pressing Ctrl-s.&lt;br /&gt;
* When you have multiple split windows, Vim has Ctrl-w followed by h, j, k, or l to move to that window. It also has Ctrl-w followed by w to keep cycling between the splits. It also has Ctrl-w followed by p to toggle between the two most recent splits. There are just a lot of fine-grained choices you can make. Emacs just gives you Ctrl-x o which cycles.&lt;br /&gt;
* Text formatting: Vim gives you two operators, gq and gw, which format text; gq moves the cursor to the end of the formatted text, while gw tries to keep the cursor where it was before the formatting. You can then combine these operators with any motion, e.g. gwip to format the current paragraph, gww to format the current line, gwib to format inside parentheses. Emacs just gives you Alt-q to format the paragraph. It is then up to you to creatively combine that with text selection; you can select some text and then do Alt-q to format just the text that is selected.&lt;br /&gt;
* Copy-pasting: Vim gives you named registers, so if you want to copy two different lines and remember both, you do something like &amp;lt;code&amp;gt;&amp;quot;ayy&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;quot;byy&amp;lt;/code&amp;gt;; then you can paste them with &amp;lt;code&amp;gt;&amp;quot;ap&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;quot;bp&amp;lt;/code&amp;gt;. In Emacs, you instead kill both lines, and then when you go to paste them, you first Ctrl-y to paste the most recent, and then you do Alt-y to cycle between the most recently killed text.&lt;br /&gt;
&lt;br /&gt;
In general, I feel that Vim requires more mental energy to use, in some sense. You need to pick the specific action you wanted to perform. You need to think ahead and decide which registers to use. I think much of this may have been forced on the design of Vim by deciding to be keystroke-based, so that the only way to make some action available in normal mode was to assign some key to it. Whereas Emacs went more in the direction of being functions-first, and once you have functions, it is natural to pass arguments to the function to modify the behavior.&lt;br /&gt;
&lt;br /&gt;
==Word movement: predictable vs &amp;quot;do the common thing&amp;quot;==&lt;br /&gt;
&lt;br /&gt;
Vim&amp;#039;s word-based motions like w, b, and e always treat contiguous alphanumeric sequences as single words, and also treats contiguous symbols as single words. This leads to a pretty predictable word movement. Emacs does the thing that most other text editors do, which is that if the cursor is before a symbol, then moving forward by one word will not just jump to the end of the symbols, but will jump to the end of the alphanumeric sequence &amp;#039;&amp;#039;after&amp;#039;&amp;#039; the symbols.&lt;br /&gt;
&lt;br /&gt;
Suppose you have something like: &amp;lt;code&amp;gt;&amp;quot;hello&amp;quot;&amp;lt;/code&amp;gt; where the cursor is on the first quote. In Vim, w will move the cursor onto the h. In Emacs, Alt-f will move the cursor past the h onto the second quote.&lt;br /&gt;
&lt;br /&gt;
==Scrolling: scrolloff vs scroll-into-view==&lt;br /&gt;
&lt;br /&gt;
In Vim, defaults.vim sets scrolloff=5, which means that when the cursor is at the edge of the window, it will always show 5 lines of context. You can never &amp;quot;touch&amp;quot; the very edge of the screen, because the screen will scroll when you try to move to the edge.&lt;br /&gt;
&lt;br /&gt;
In Emacs, the default behavior is instead to jerk the screen to the center &amp;#039;&amp;#039;after&amp;#039;&amp;#039; you step off the edge.&lt;br /&gt;
&lt;br /&gt;
==Search and replace==&lt;br /&gt;
&lt;br /&gt;
Emacs automatically does all the case variants, e.g. if you search and replace foo → bar, it also does Foo → Bar, FOO → Bar, etc. Vim doesn&amp;#039;t do this.&lt;br /&gt;
&lt;br /&gt;
==Documentation: graph/linear vs tree==&lt;br /&gt;
&lt;br /&gt;
Vim uses a wiki-like help system, where you can click on links to read the sections. It also contains a linear book under :help user-manual. Emacs has a GNU-like hierarchical tree documentation system.&lt;/div&gt;</summary>
		<author><name>Issa</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.issarice.com/index.php?title=Design_philosophies_of_Vim_vs_Emacs&amp;diff=2930</id>
		<title>Design philosophies of Vim vs Emacs</title>
		<link rel="alternate" type="text/html" href="https://wiki.issarice.com/index.php?title=Design_philosophies_of_Vim_vs_Emacs&amp;diff=2930"/>
		<updated>2025-11-27T20:40:33Z</updated>

		<summary type="html">&lt;p&gt;Issa: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
==Modal vs chording==&lt;br /&gt;
&lt;br /&gt;
* Atomic edits and the dot command in Vim: When you use Vim, you naturally start to think in terms of repeatable edits that you can then use the &amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt; command to repeat. But this has a side-effect in that Vim requires you to manually chunk your undo history. Emacs instead automatically chunks undos.&lt;br /&gt;
&lt;br /&gt;
==Unix as IDE vs Emacs as OS==&lt;br /&gt;
&lt;br /&gt;
Vim tries to just be a text editor, and tries to play nice with the other tools on your computer, using commands like &amp;lt;code&amp;gt;:!command&amp;lt;/code&amp;gt; (runs external command) or &amp;lt;code&amp;gt;:w !command&amp;lt;/code&amp;gt; (pipes text to external command via stdin) or &amp;lt;code&amp;gt;:r !command&amp;lt;/code&amp;gt; (reads from external command via stdout).&lt;br /&gt;
&lt;br /&gt;
===...with some exceptions===&lt;br /&gt;
&lt;br /&gt;
Vim has a built-in spellchecker, whereas Emacs doesn&amp;#039;t (it does come with flyspell, which works with an external spellchecker like hunspell or aspell). (Emacs comes with tetris, an RPN calculator, an email client, etc., but not a spell-checker!)&lt;br /&gt;
&lt;br /&gt;
==Session management: per project vs single instance==&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;right way&amp;quot; to use Vim is to have one instance of Vim open per &amp;quot;project&amp;quot;. Each Vim instance maintains its own current directory, so you can e.g. open files relative to that current directory.&lt;br /&gt;
&lt;br /&gt;
In Emacs, Emacs itself doesn&amp;#039;t maintain its current directory, and instead all file-open actions are relative to the buffer&amp;#039;s directory.&lt;br /&gt;
&lt;br /&gt;
Vim can do the Emacs thing with :set autochdir, but this is disabled by default.&lt;br /&gt;
&lt;br /&gt;
See [https://nullprogram.com/blog/2017/08/22/ this blog post] for more details.&lt;br /&gt;
&lt;br /&gt;
==Line-based vs character-based==&lt;br /&gt;
&lt;br /&gt;
Vim comes from a lineage of line-based editors. Registers can be linewise or characterwise, which means that actions like pasting text can act on entire lines or on characters. Some commands, like :substitute or :global, only work linewise.&lt;br /&gt;
&lt;br /&gt;
Emacs is like most other text editors in that it has no concept of linewise.&lt;br /&gt;
&lt;br /&gt;
==Mappings: keystroke based vs function-based==&lt;br /&gt;
&lt;br /&gt;
In Vim, commands like &amp;quot;copy text&amp;quot; don&amp;#039;t have a &amp;quot;name&amp;quot;; they are simply the keystroke that is used to perform that action. So if you want to &amp;quot;program&amp;quot; Vim to repeat some action, such as when defining a mapping, you simply tell Vim which keystrokes you want to repeat.&lt;br /&gt;
&lt;br /&gt;
In Emacs, every keystroke, even entering a single character, has a function that is associated with it. Emacs is simply an interpreter that runs the function associated with the keystroke. You can always do Ctrl-h k followed by the keystroke to find which function is bound to that particular keystroke.&lt;br /&gt;
&lt;br /&gt;
==Tree-based undo vs stack-based undo==&lt;br /&gt;
&lt;br /&gt;
==Multiple similar commands vs single repeated command==&lt;br /&gt;
&lt;br /&gt;
This one is a bit hard to explain, but there is a definite pattern where Vim prefers to give the user multiple similar commands, while Emacs prefers to give a single command that you can then repeat or use creatively. The best way to explain is to give a bunch of examples:&lt;br /&gt;
&lt;br /&gt;
* Changing the screen view relative to cursor: Vim gives you zz to scroll so as to leave the cursor at the center of the screen, zt to scroll and put the cursor at the top, and zb to scroll and put the cursor at the bottom. Emacs just gives you a single command, Ctrl-l, which when repeatedly pressed, will cycle between all three views.&lt;br /&gt;
* Moving cursor to top, middle, bottom: Vim gives you H to move cursor to the top of the screen, M to move to middle, and L to move to bottom. Emacs just gives you Alt-r, which will cycle between the three configurations.&lt;br /&gt;
* Folding: Vim gives you fine-grained commands like zo to open a fold, zc to close a fold, zR to globally reduce the fold level in the file, etc. Emacs as far as I know doesn&amp;#039;t have folding by default, but certain major modes like org-mode and markdown-mode do have folding, and in these, you simply press TAB to cycle the different folding levels, or Shift-TAB to do the cycling globally across the entire file.&lt;br /&gt;
* Vim gives you Y, D, C, to copy, delete, and change (respectively) until the end of the line. Emacs just gives you Ctrl-k, which it then expects you to creatively make use of (e.g. if you want to copy until the end of the line, you do Ctrl-k to delete until the end of the line, then Ctrl-/ to undo).&lt;br /&gt;
* Vim has / to search forward, ? to search backward, then n or N to repeat that search in the same direction or opposite direction. Emacs just has Ctrl-s and Ctrl-r to do the search forward or backward. If you want to repeat the search, you just keep pressing Ctrl-s.&lt;br /&gt;
* When you have multiple split windows, Vim has Ctrl-w followed by h, j, k, or l to move to that window. It also has Ctrl-w followed by w to keep cycling between the splits. It also has Ctrl-w followed by p to toggle between the two most recent splits. There are just a lot of fine-grained choices you can make. Emacs just gives you Ctrl-x o which cycles.&lt;br /&gt;
* Text formatting: Vim gives you two operators, gq and gw, which format text; gq moves the cursor to the end of the formatted text, while gw tries to keep the cursor where it was before the formatting. You can then combine these operators with any motion, e.g. gwip to format the current paragraph, gww to format the current line, gwib to format inside parentheses. Emacs just gives you Alt-q to format the paragraph. It is then up to you to creatively combine that with text selection; you can select some text and then do Alt-q to format just the text that is selected.&lt;br /&gt;
* Copy-pasting: Vim gives you named registers, so if you want to copy two different lines and remember both, you do something like &amp;lt;code&amp;gt;&amp;quot;ayy&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;quot;byy&amp;lt;/code&amp;gt;; then you can paste them with &amp;lt;code&amp;gt;&amp;quot;ap&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;quot;bp&amp;lt;/code&amp;gt;. In Emacs, you instead kill both lines, and then when you go to paste them, you first Ctrl-y to paste the most recent, and then you do Alt-y to cycle between the most recently killed text.&lt;br /&gt;
&lt;br /&gt;
In general, I feel that Vim requires more mental energy to use, in some sense. You need to pick the specific action you wanted to perform. You need to think ahead and decide which registers to use. I think much of this may have been forced on the design of Vim by deciding to be keystroke-based, so that the only way to make some action available in normal mode was to assign some key to it. Whereas Emacs went more in the direction of being functions-first, and once you have functions, it is natural to pass arguments to the function to modify the behavior.&lt;br /&gt;
&lt;br /&gt;
==Word movement: predictable vs &amp;quot;do the common thing&amp;quot;==&lt;br /&gt;
&lt;br /&gt;
Vim&amp;#039;s word-based motions like w, b, and e always treat contiguous alphanumeric sequences as single words, and also treats contiguous symbols as single words. This leads to a pretty predictable word movement. Emacs does the thing that most other text editors do, which is that if the cursor is before a symbol, then moving forward by one word will not just jump to the end of the symbols, but will jump to the end of the alphanumeric sequence &amp;#039;&amp;#039;after&amp;#039;&amp;#039; the symbols.&lt;br /&gt;
&lt;br /&gt;
Suppose you have something like: &amp;lt;code&amp;gt;&amp;quot;hello&amp;quot;&amp;lt;/code&amp;gt; where the cursor is on the first quote. In Vim, w will move the cursor onto the h. In Emacs, Alt-f will move the cursor past the h onto the second quote.&lt;br /&gt;
&lt;br /&gt;
==Scrolling: scrolloff vs scroll-into-view==&lt;br /&gt;
&lt;br /&gt;
In Vim, defaults.vim sets scrolloff=5, which means that when the cursor is at the edge of the window, it will always show 5 lines of context. You can never &amp;quot;touch&amp;quot; the very edge of the screen, because the screen will scroll when you try to move to the edge.&lt;br /&gt;
&lt;br /&gt;
In Emacs, the default behavior is instead to jerk the screen to the center &amp;#039;&amp;#039;after&amp;#039;&amp;#039; you step off the edge.&lt;br /&gt;
&lt;br /&gt;
==Search and replace==&lt;br /&gt;
&lt;br /&gt;
Emacs automatically does all the case variants, e.g. if you search and replace foo -&amp;gt; bar, it also does Foo -&amp;gt; Bar, FOO -&amp;gt; Bar, etc. Vim doesn&amp;#039;t do this.&lt;br /&gt;
&lt;br /&gt;
==Documentation: graph/linear vs tree==&lt;br /&gt;
&lt;br /&gt;
Vim uses a wiki-like help system, where you can click on links to read the sections. It also contains a linear book under :help user-manual. Emacs has a GNU-like hierarchical tree documentation system.&lt;/div&gt;</summary>
		<author><name>Issa</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.issarice.com/index.php?title=Design_philosophies_of_Vim_vs_Emacs&amp;diff=2929</id>
		<title>Design philosophies of Vim vs Emacs</title>
		<link rel="alternate" type="text/html" href="https://wiki.issarice.com/index.php?title=Design_philosophies_of_Vim_vs_Emacs&amp;diff=2929"/>
		<updated>2025-11-27T20:29:11Z</updated>

		<summary type="html">&lt;p&gt;Issa: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
==Modal vs chording==&lt;br /&gt;
&lt;br /&gt;
* Atomic edits and the dot command in Vim: When you use Vim, you naturally start to think in terms of repeatable edits that you can then use the &amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt; command to repeat. But this has a side-effect in that Vim requires you to manually chunk your undo history. Emacs instead automatically chunks undos.&lt;br /&gt;
&lt;br /&gt;
==Unix as IDE vs Emacs as OS==&lt;br /&gt;
&lt;br /&gt;
Vim tries to just be a text editor, and tries to play nice with the other tools on your computer, using commands like &amp;lt;code&amp;gt;:!command&amp;lt;/code&amp;gt; (runs external command) or &amp;lt;code&amp;gt;:w !command&amp;lt;/code&amp;gt; (pipes text to external command via stdin) or &amp;lt;code&amp;gt;:r !command&amp;lt;/code&amp;gt; (reads from external command via stdout).&lt;br /&gt;
&lt;br /&gt;
===...with some exceptions===&lt;br /&gt;
&lt;br /&gt;
Vim has a built-in spellchecker, whereas Emacs doesn&amp;#039;t (it does come with flyspell, which works with an external spellchecker like hunspell or aspell). (Emacs comes with tetris, an RPN calculator, an email client, etc., but not a spell-checker!)&lt;br /&gt;
&lt;br /&gt;
==Session management: per project vs single instance==&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;right way&amp;quot; to use Vim is to have one instance of Vim open per &amp;quot;project&amp;quot;. Each Vim instance maintains its own current directory, so you can e.g. open files relative to that current directory.&lt;br /&gt;
&lt;br /&gt;
In Emacs, Emacs itself doesn&amp;#039;t maintain its current directory, and instead all file-open actions are relative to the buffer&amp;#039;s directory.&lt;br /&gt;
&lt;br /&gt;
Vim can do the Emacs thing with :set autochdir, but this is disabled by default.&lt;br /&gt;
&lt;br /&gt;
See [https://nullprogram.com/blog/2017/08/22/ this blog post] for more details.&lt;br /&gt;
&lt;br /&gt;
==Line-based vs character-based==&lt;br /&gt;
&lt;br /&gt;
Vim comes from a lineage of line-based editors. Registers can be linewise or characterwise, which means that actions like pasting text can act on entire lines or on characters. Some commands, like :substitute or :global, only work linewise.&lt;br /&gt;
&lt;br /&gt;
Emacs is like most other text editors in that it has no concept of linewise.&lt;br /&gt;
&lt;br /&gt;
==Mappings: keystroke based vs function-based==&lt;br /&gt;
&lt;br /&gt;
In Vim, commands like &amp;quot;copy text&amp;quot; don&amp;#039;t have a &amp;quot;name&amp;quot;; they are simply the keystroke that is used to perform that action. So if you want to &amp;quot;program&amp;quot; Vim to repeat some action, such as when defining a mapping, you simply tell Vim which keystrokes you want to repeat.&lt;br /&gt;
&lt;br /&gt;
In Emacs, every keystroke, even entering a single character, has a function that is associated with it. Emacs is simply an interpreter that runs the function associated with the keystroke. You can always do Ctrl-h k followed by the keystroke to find which function is bound to that particular keystroke.&lt;br /&gt;
&lt;br /&gt;
==Tree-based undo vs stack-based undo==&lt;br /&gt;
&lt;br /&gt;
==Multiple similar commands vs single repeated command==&lt;br /&gt;
&lt;br /&gt;
This one is a bit hard to explain, but there is a definite pattern where Vim prefers to give the user multiple similar commands, while Emacs prefers to give a single command that you can then repeat or use creatively. The best way to explain is to give a bunch of examples:&lt;br /&gt;
&lt;br /&gt;
* Changing the screen view relative to cursor: Vim gives you zz to scroll so as to leave the cursor at the center of the screen, zt to scroll and put the cursor at the top, and zb to scroll and put the cursor at the bottom. Emacs just gives you a single command, Ctrl-l, which when repeatedly pressed, will cycle between all three views.&lt;br /&gt;
* Moving cursor to top, middle, bottom: Vim gives you H to move cursor to the top of the screen, M to move to middle, and L to move to bottom. Emacs just gives you Alt-r, which will cycle between the three configurations.&lt;br /&gt;
* Folding: Vim gives you fine-grained commands like zo to open a fold, zc to close a fold, zR to globally reduce the fold level in the file, etc. Emacs as far as I know doesn&amp;#039;t have folding by default, but certain major modes like org-mode and markdown-mode do have folding, and in these, you simply press TAB to cycle the different folding levels, or Shift-TAB to do the cycling globally across the entire file.&lt;br /&gt;
* Vim gives you Y, D, C, to copy, delete, and change (respectively) until the end of the line. Emacs just gives you Ctrl-k, which it then expects you to creatively make use of (e.g. if you want to copy until the end of the line, you do Ctrl-k to delete until the end of the line, then Ctrl-/ to undo).&lt;br /&gt;
* Vim has / to search forward, ? to search backward, then n or N to repeat that search in the same direction or opposite direction. Emacs just has Ctrl-s and Ctrl-r to do the search forward or backward. If you want to repeat the search, you just keep pressing Ctrl-s.&lt;br /&gt;
* When you have multiple split windows, Vim has Ctrl-w followed by h, j, k, or l to move to that window. It also has Ctrl-w followed by w to keep cycling between the splits. It also has Ctrl-w followed by p to toggle between the two most recent splits. There are just a lot of fine-grained choices you can make. Emacs just gives you Ctrl-x o which cycles.&lt;br /&gt;
* Text formatting: Vim gives you two operators, gq and gw, which format text; gq moves the cursor to the end of the formatted text, while gw tries to keep the cursor where it was before the formatting. You can then combine these operators with any motion, e.g. gwip to format the current paragraph, gww to format the current line, gwib to format inside parentheses. Emacs just gives you Alt-q to format the paragraph. It is then up to you to creatively combine that with text selection; you can select some text and then do Alt-q to format just the text that is selected.&lt;br /&gt;
* Copy-pasting: Vim gives you named registers, so if you want to copy two different lines and remember both, you do something like &amp;lt;code&amp;gt;&amp;quot;ayy&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;quot;byy&amp;lt;/code&amp;gt;; then you can paste them with &amp;lt;code&amp;gt;&amp;quot;ap&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;quot;bp&amp;lt;/code&amp;gt;. In Emacs, you instead kill both lines, and then when you go to paste them, you first Ctrl-y to paste the most recent, and then you do Alt-y to cycle between the most recently killed text.&lt;br /&gt;
&lt;br /&gt;
In general, I feel that Vim requires more mental energy to use, in some sense. You need to pick the specific action you wanted to perform. You need to think ahead and decide which registers to use. I think much of this may have been forced on the design of Vim by deciding to be keystroke-based, so that the only way to make some action available in normal mode was to assign some key to it. Whereas Emacs went more in the direction of being functions-first, and once you have functions, it is natural to pass arguments to the function to modify the behavior.&lt;br /&gt;
&lt;br /&gt;
==Word movement: predictable vs &amp;quot;do the common thing&amp;quot;==&lt;br /&gt;
&lt;br /&gt;
Vim&amp;#039;s word-based motions like w, b, and e always treat contiguous alphanumeric sequences as single words, and also treats contiguous symbols as single words. This leads to a pretty predictable word movement. Emacs does the thing that most other text editors do, which is that if the cursor is before a symbol, then moving forward by one word will not just jump to the end of the symbols, but will jump to the end of the alphanumeric sequence &amp;#039;&amp;#039;after&amp;#039;&amp;#039; the symbols.&lt;br /&gt;
&lt;br /&gt;
Suppose you have something like: &amp;lt;code&amp;gt;&amp;quot;hello&amp;quot;&amp;lt;/code&amp;gt; where the cursor is on the first quote. In Vim, w will move the cursor onto the h. In Emacs, Alt-f will move the cursor past the h onto the second quote.&lt;br /&gt;
&lt;br /&gt;
==Scrolling: scrolloff vs scroll-into-view==&lt;br /&gt;
&lt;br /&gt;
In Vim, defaults.vim sets scrolloff=5, which means that when the cursor is at the edge of the window, it will always show 5 lines of context. You can never &amp;quot;touch&amp;quot; the very edge of the screen, because the screen will scroll when you try to move to the edge.&lt;br /&gt;
&lt;br /&gt;
In Emacs, the default behavior is instead to jerk the screen to the center &amp;#039;&amp;#039;after&amp;#039;&amp;#039; you step off the edge.&lt;br /&gt;
&lt;br /&gt;
==Documentation: graph/linear vs tree==&lt;br /&gt;
&lt;br /&gt;
Vim uses a wiki-like help system, where you can click on links to read the sections. It also contains a linear book under :help user-manual. Emacs has a GNU-like hierarchical tree documentation system.&lt;/div&gt;</summary>
		<author><name>Issa</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.issarice.com/index.php?title=Design_philosophies_of_Vim_vs_Emacs&amp;diff=2928</id>
		<title>Design philosophies of Vim vs Emacs</title>
		<link rel="alternate" type="text/html" href="https://wiki.issarice.com/index.php?title=Design_philosophies_of_Vim_vs_Emacs&amp;diff=2928"/>
		<updated>2025-11-27T20:26:08Z</updated>

		<summary type="html">&lt;p&gt;Issa: /* Multiple similar commands vs single repeated command */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
==Modal vs chording==&lt;br /&gt;
&lt;br /&gt;
* Atomic edits and the dot command in Vim: When you use Vim, you naturally start to think in terms of repeatable edits that you can then use the &amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt; command to repeat. But this has a side-effect in that Vim requires you to manually chunk your undo history. Emacs instead automatically chunks undos.&lt;br /&gt;
&lt;br /&gt;
==Unix as IDE vs Emacs as OS==&lt;br /&gt;
&lt;br /&gt;
Vim tries to just be a text editor, and tries to play nice with the other tools on your computer, using commands like &amp;lt;code&amp;gt;:!command&amp;lt;/code&amp;gt; (runs external command) or &amp;lt;code&amp;gt;:w !command&amp;lt;/code&amp;gt; (pipes text to external command via stdin) or &amp;lt;code&amp;gt;:r !command&amp;lt;/code&amp;gt; (reads from external command via stdout).&lt;br /&gt;
&lt;br /&gt;
===...with some exceptions===&lt;br /&gt;
&lt;br /&gt;
Vim has a built-in spellchecker, whereas Emacs doesn&amp;#039;t (it does come with flyspell, which works with an external spellchecker like hunspell or aspell). (Emacs comes with tetris, an RPN calculator, an email client, etc., but not a spell-checker!)&lt;br /&gt;
&lt;br /&gt;
==Session management: per project vs single instance==&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;right way&amp;quot; to use Vim is to have one instance of Vim open per &amp;quot;project&amp;quot;. Each Vim instance maintains its own current directory, so you can e.g. open files relative to that current directory.&lt;br /&gt;
&lt;br /&gt;
In Emacs, Emacs itself doesn&amp;#039;t maintain its current directory, and instead all file-open actions are relative to the buffer&amp;#039;s directory.&lt;br /&gt;
&lt;br /&gt;
Vim can do the Emacs thing with :set autochdir, but this is disabled by default.&lt;br /&gt;
&lt;br /&gt;
See [https://nullprogram.com/blog/2017/08/22/ this blog post] for more details.&lt;br /&gt;
&lt;br /&gt;
==Line-based vs character-based==&lt;br /&gt;
&lt;br /&gt;
Vim comes from a lineage of line-based editors. Registers can be linewise or characterwise, which means that actions like pasting text can act on entire lines or on characters. Some commands, like :substitute or :global, only work linewise.&lt;br /&gt;
&lt;br /&gt;
Emacs is like most other text editors in that it has no concept of linewise.&lt;br /&gt;
&lt;br /&gt;
==Mappings: keystroke based vs function-based==&lt;br /&gt;
&lt;br /&gt;
In Vim, commands like &amp;quot;copy text&amp;quot; don&amp;#039;t have a &amp;quot;name&amp;quot;; they are simply the keystroke that is used to perform that action. So if you want to &amp;quot;program&amp;quot; Vim to repeat some action, such as when defining a mapping, you simply tell Vim which keystrokes you want to repeat.&lt;br /&gt;
&lt;br /&gt;
In Emacs, every keystroke, even entering a single character, has a function that is associated with it. Emacs is simply an interpreter that runs the function associated with the keystroke. You can always do Ctrl-h k followed by the keystroke to find which function is bound to that particular keystroke.&lt;br /&gt;
&lt;br /&gt;
==Tree-based undo vs stack-based undo==&lt;br /&gt;
&lt;br /&gt;
==Multiple similar commands vs single repeated command==&lt;br /&gt;
&lt;br /&gt;
This one is a bit hard to explain, but there is a definite pattern where Vim prefers to give the user multiple similar commands, while Emacs prefers to give a single command that you can then repeat or use creatively. The best way to explain is to give a bunch of examples:&lt;br /&gt;
&lt;br /&gt;
* Changing the screen view relative to cursor: Vim gives you zz to scroll so as to leave the cursor at the center of the screen, zt to scroll and put the cursor at the top, and zb to scroll and put the cursor at the bottom. Emacs just gives you a single command, Ctrl-l, which when repeatedly pressed, will cycle between all three views.&lt;br /&gt;
* Moving cursor to top, middle, bottom: Vim gives you H to move cursor to the top of the screen, M to move to middle, and L to move to bottom. Emacs just gives you Alt-r, which will cycle between the three configurations.&lt;br /&gt;
* Folding: Vim gives you fine-grained commands like zo to open a fold, zc to close a fold, zR to globally reduce the fold level in the file, etc. Emacs as far as I know doesn&amp;#039;t have folding by default, but certain major modes like org-mode and markdown-mode do have folding, and in these, you simply press TAB to cycle the different folding levels, or Shift-TAB to do the cycling globally across the entire file.&lt;br /&gt;
* Vim gives you Y, D, C, to copy, delete, and change (respectively) until the end of the line. Emacs just gives you Ctrl-k, which it then expects you to creatively make use of (e.g. if you want to copy until the end of the line, you do Ctrl-k to delete until the end of the line, then Ctrl-/ to undo).&lt;br /&gt;
* Vim has / to search forward, ? to search backward, then n or N to repeat that search in the same direction or opposite direction. Emacs just has Ctrl-s and Ctrl-r to do the search forward or backward. If you want to repeat the search, you just keep pressing Ctrl-s.&lt;br /&gt;
* When you have multiple split windows, Vim has Ctrl-w followed by h, j, k, or l to move to that window. It also has Ctrl-w followed by w to keep cycling between the splits. It also has Ctrl-w followed by p to toggle between the two most recent splits. There are just a lot of fine-grained choices you can make. Emacs just gives you Ctrl-x o which cycles.&lt;br /&gt;
* Text formatting: Vim gives you two operators, gq and gw, which format text; gq moves the cursor to the end of the formatted text, while gw tries to keep the cursor where it was before the formatting. You can then combine these operators with any motion, e.g. gwip to format the current paragraph, gww to format the current line, gwib to format inside parentheses. Emacs just gives you Alt-q to format the paragraph. It is then up to you to creatively combine that with text selection; you can select some text and then do Alt-q to format just the text that is selected.&lt;br /&gt;
* Copy-pasting: Vim gives you named registers, so if you want to copy two different lines and remember both, you do something like &amp;lt;code&amp;gt;&amp;quot;ayy&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;quot;byy&amp;lt;/code&amp;gt;; then you can paste them with &amp;lt;code&amp;gt;&amp;quot;ap&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;quot;bp&amp;lt;/code&amp;gt;. In Emacs, you instead kill both lines, and then when you go to paste them, you first Ctrl-y to paste the most recent, and then you do Alt-y to cycle between the most recently killed text.&lt;br /&gt;
&lt;br /&gt;
In general, I feel that Vim requires more mental energy to use, in some sense. You need to pick the specific action you wanted to perform. You need to think ahead and decide which registers to use. I think much of this may have been forced on the design of Vim by deciding to be keystroke-based, so that the only way to make some action available in normal mode was to assign some key to it. Whereas Emacs went more in the direction of being functions-first, and once you have functions, it is natural to pass arguments to the function to modify the behavior.&lt;br /&gt;
&lt;br /&gt;
==Word movement: predictable vs &amp;quot;do the common thing&amp;quot;==&lt;br /&gt;
&lt;br /&gt;
Vim&amp;#039;s word-based motions like w, b, and e always treat contiguous alphanumeric sequences as single words, and also treats contiguous symbols as single words. This leads to a pretty predictable word movement. Emacs does the thing that most other text editors do, which is that if the cursor is before a symbol, then moving forward by one word will not just jump to the end of the symbols, but will jump to the end of the alphanumeric sequence &amp;#039;&amp;#039;after&amp;#039;&amp;#039; the symbols.&lt;br /&gt;
&lt;br /&gt;
Suppose you have something like: &amp;lt;code&amp;gt;&amp;quot;hello&amp;quot;&amp;lt;/code&amp;gt; where the cursor is on the first quote. In Vim, w will move the cursor onto the h. In Emacs, Alt-f will move the cursor past the h onto the second quote.&lt;br /&gt;
&lt;br /&gt;
==Documentation: graph/linear vs tree==&lt;br /&gt;
&lt;br /&gt;
Vim uses a wiki-like help system, where you can click on links to read the sections. It also contains a linear book under :help user-manual. Emacs has a GNU-like hierarchical tree documentation system.&lt;/div&gt;</summary>
		<author><name>Issa</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.issarice.com/index.php?title=Design_philosophies_of_Vim_vs_Emacs&amp;diff=2927</id>
		<title>Design philosophies of Vim vs Emacs</title>
		<link rel="alternate" type="text/html" href="https://wiki.issarice.com/index.php?title=Design_philosophies_of_Vim_vs_Emacs&amp;diff=2927"/>
		<updated>2025-11-27T20:24:07Z</updated>

		<summary type="html">&lt;p&gt;Issa: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
==Modal vs chording==&lt;br /&gt;
&lt;br /&gt;
* Atomic edits and the dot command in Vim: When you use Vim, you naturally start to think in terms of repeatable edits that you can then use the &amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt; command to repeat. But this has a side-effect in that Vim requires you to manually chunk your undo history. Emacs instead automatically chunks undos.&lt;br /&gt;
&lt;br /&gt;
==Unix as IDE vs Emacs as OS==&lt;br /&gt;
&lt;br /&gt;
Vim tries to just be a text editor, and tries to play nice with the other tools on your computer, using commands like &amp;lt;code&amp;gt;:!command&amp;lt;/code&amp;gt; (runs external command) or &amp;lt;code&amp;gt;:w !command&amp;lt;/code&amp;gt; (pipes text to external command via stdin) or &amp;lt;code&amp;gt;:r !command&amp;lt;/code&amp;gt; (reads from external command via stdout).&lt;br /&gt;
&lt;br /&gt;
===...with some exceptions===&lt;br /&gt;
&lt;br /&gt;
Vim has a built-in spellchecker, whereas Emacs doesn&amp;#039;t (it does come with flyspell, which works with an external spellchecker like hunspell or aspell). (Emacs comes with tetris, an RPN calculator, an email client, etc., but not a spell-checker!)&lt;br /&gt;
&lt;br /&gt;
==Session management: per project vs single instance==&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;right way&amp;quot; to use Vim is to have one instance of Vim open per &amp;quot;project&amp;quot;. Each Vim instance maintains its own current directory, so you can e.g. open files relative to that current directory.&lt;br /&gt;
&lt;br /&gt;
In Emacs, Emacs itself doesn&amp;#039;t maintain its current directory, and instead all file-open actions are relative to the buffer&amp;#039;s directory.&lt;br /&gt;
&lt;br /&gt;
Vim can do the Emacs thing with :set autochdir, but this is disabled by default.&lt;br /&gt;
&lt;br /&gt;
See [https://nullprogram.com/blog/2017/08/22/ this blog post] for more details.&lt;br /&gt;
&lt;br /&gt;
==Line-based vs character-based==&lt;br /&gt;
&lt;br /&gt;
Vim comes from a lineage of line-based editors. Registers can be linewise or characterwise, which means that actions like pasting text can act on entire lines or on characters. Some commands, like :substitute or :global, only work linewise.&lt;br /&gt;
&lt;br /&gt;
Emacs is like most other text editors in that it has no concept of linewise.&lt;br /&gt;
&lt;br /&gt;
==Mappings: keystroke based vs function-based==&lt;br /&gt;
&lt;br /&gt;
In Vim, commands like &amp;quot;copy text&amp;quot; don&amp;#039;t have a &amp;quot;name&amp;quot;; they are simply the keystroke that is used to perform that action. So if you want to &amp;quot;program&amp;quot; Vim to repeat some action, such as when defining a mapping, you simply tell Vim which keystrokes you want to repeat.&lt;br /&gt;
&lt;br /&gt;
In Emacs, every keystroke, even entering a single character, has a function that is associated with it. Emacs is simply an interpreter that runs the function associated with the keystroke. You can always do Ctrl-h k followed by the keystroke to find which function is bound to that particular keystroke.&lt;br /&gt;
&lt;br /&gt;
==Tree-based undo vs stack-based undo==&lt;br /&gt;
&lt;br /&gt;
==Multiple similar commands vs single repeated command==&lt;br /&gt;
&lt;br /&gt;
This one is a bit hard to explain, but there is a definite pattern where Vim prefers to give the user multiple similar commands, while Emacs prefers to give a single command that you can then repeat or use creatively. The best way to explain is to give a bunch of examples:&lt;br /&gt;
&lt;br /&gt;
* Changing the screen view relative to cursor: Vim gives you zz to scroll so as to leave the cursor at the center of the screen, zt to scroll and put the cursor at the top, and zb to scroll and put the cursor at the bottom. Emacs just gives you a single command, Ctrl-l, which when repeatedly pressed, will cycle between all three views.&lt;br /&gt;
* Moving cursor to top, middle, bottom: Vim gives you H to move cursor to the top of the screen, M to move to middle, and L to move to bottom. Emacs just gives you Alt-r, which will cycle between the three configurations.&lt;br /&gt;
* Folding: Vim gives you fine-grained commands like zo to open a fold, zc to close a fold, zR to globally reduce the fold level in the file, etc. Emacs as far as I know doesn&amp;#039;t have folding by default, but certain major modes like org-mode and markdown-mode do have folding, and in these, you simply press TAB to cycle the different folding levels, or Shift-TAB to do the cycling globally across the entire file.&lt;br /&gt;
* Vim gives you Y, D, C, to copy, delete, and change (respectively) until the end of the line. Emacs just gives you Ctrl-k, which it then expects you to creatively make use of (e.g. if you want to copy until the end of the line, you do Ctrl-k to delete until the end of the line, then Ctrl-/ to undo).&lt;br /&gt;
* Vim has / to search forward, ? to search backward, then n or N to repeat that search in the same direction or opposite direction. Emacs just has Ctrl-s and Ctrl-r to do the search forward or backward. If you want to repeat the search, you just keep pressing Ctrl-s.&lt;br /&gt;
* When you have multiple split windows, Vim has Ctrl-w followed by h, j, k, or l to move to that window. It also has Ctrl-w followed by w to keep cycling between the splits. It also has Ctrl-w followed by p to toggle between the two most recent splits. There are just a lot of fine-grained choices you can make. Emacs just gives you Ctrl-x o which cycles.&lt;br /&gt;
* Text formatting: Vim gives you two operators, gq and gw, which format text; gq moves the cursor to the end of the formatted text, while gw tries to keep the cursor where it was before the formatting. You can then combine these operators with any motion, e.g. gwip to format the current paragraph, gww to format the current line, gwib to format inside parentheses. Emacs just gives you Alt-q to format the paragraph. It is then up to you to creatively combine that with text selection; you can select some text and then do Alt-q to format just the text that is selected.&lt;br /&gt;
* Copy-pasting: Vim gives you named registers, so if you want to copy two different lines and remember both, you do something like &amp;lt;code&amp;gt;&amp;quot;ayy&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;quot;byy&amp;lt;/code&amp;gt;; then you can paste them with &amp;lt;code&amp;gt;&amp;quot;ap&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;quot;bp&amp;lt;/code&amp;gt;. In Emacs, you instead kill both lines, and then when you go to paste them, you first Ctrl-y to paste the most recent, and then you do Alt-y to cycle between the most recently killed text.&lt;br /&gt;
&lt;br /&gt;
In general, I feel that Vim requires more mental energy to use, in some sense. You need to pick the specific action you wanted to perform. You need to think ahead and decide which registers to use.&lt;br /&gt;
&lt;br /&gt;
==Word movement: predictable vs &amp;quot;do the common thing&amp;quot;==&lt;br /&gt;
&lt;br /&gt;
Vim&amp;#039;s word-based motions like w, b, and e always treat contiguous alphanumeric sequences as single words, and also treats contiguous symbols as single words. This leads to a pretty predictable word movement. Emacs does the thing that most other text editors do, which is that if the cursor is before a symbol, then moving forward by one word will not just jump to the end of the symbols, but will jump to the end of the alphanumeric sequence &amp;#039;&amp;#039;after&amp;#039;&amp;#039; the symbols.&lt;br /&gt;
&lt;br /&gt;
Suppose you have something like: &amp;lt;code&amp;gt;&amp;quot;hello&amp;quot;&amp;lt;/code&amp;gt; where the cursor is on the first quote. In Vim, w will move the cursor onto the h. In Emacs, Alt-f will move the cursor past the h onto the second quote.&lt;br /&gt;
&lt;br /&gt;
==Documentation: graph/linear vs tree==&lt;br /&gt;
&lt;br /&gt;
Vim uses a wiki-like help system, where you can click on links to read the sections. It also contains a linear book under :help user-manual. Emacs has a GNU-like hierarchical tree documentation system.&lt;/div&gt;</summary>
		<author><name>Issa</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.issarice.com/index.php?title=Design_philosophies_of_Vim_vs_Emacs&amp;diff=2926</id>
		<title>Design philosophies of Vim vs Emacs</title>
		<link rel="alternate" type="text/html" href="https://wiki.issarice.com/index.php?title=Design_philosophies_of_Vim_vs_Emacs&amp;diff=2926"/>
		<updated>2025-11-27T20:21:21Z</updated>

		<summary type="html">&lt;p&gt;Issa: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
==Modal vs chording==&lt;br /&gt;
&lt;br /&gt;
* Atomic edits and the dot command in Vim: When you use Vim, you naturally start to think in terms of repeatable edits that you can then use the &amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt; command to repeat. But this has a side-effect in that Vim requires you to manually chunk your undo history. Emacs instead automatically chunks undos.&lt;br /&gt;
&lt;br /&gt;
==Unix as IDE vs Emacs as OS==&lt;br /&gt;
&lt;br /&gt;
Vim tries to just be a text editor, and tries to play nice with the other tools on your computer, using commands like &amp;lt;code&amp;gt;:!command&amp;lt;/code&amp;gt; (runs external command) or &amp;lt;code&amp;gt;:w !command&amp;lt;/code&amp;gt; (pipes text to external command via stdin) or &amp;lt;code&amp;gt;:r !command&amp;lt;/code&amp;gt; (reads from external command via stdout).&lt;br /&gt;
&lt;br /&gt;
===...with some exceptions===&lt;br /&gt;
&lt;br /&gt;
Vim has a built-in spellchecker, whereas Emacs doesn&amp;#039;t (it does come with flyspell, which works with an external spellchecker like hunspell or aspell). (Emacs comes with tetris, an RPN calculator, an email client, etc., but not a spell-checker!)&lt;br /&gt;
&lt;br /&gt;
==Session management: per project vs single instance==&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;right way&amp;quot; to use Vim is to have one instance of Vim open per &amp;quot;project&amp;quot;. Each Vim instance maintains its own current directory, so you can e.g. open files relative to that current directory.&lt;br /&gt;
&lt;br /&gt;
In Emacs, Emacs itself doesn&amp;#039;t maintain its current directory, and instead all file-open actions are relative to the buffer&amp;#039;s directory.&lt;br /&gt;
&lt;br /&gt;
Vim can do the Emacs thing with :set autochdir, but this is disabled by default.&lt;br /&gt;
&lt;br /&gt;
See [https://nullprogram.com/blog/2017/08/22/ this blog post] for more details.&lt;br /&gt;
&lt;br /&gt;
==Line-based vs character-based==&lt;br /&gt;
&lt;br /&gt;
Vim comes from a lineage of line-based editors. Registers can be linewise or characterwise, which means that actions like pasting text can act on entire lines or on characters. Some commands, like :substitute or :global, only work linewise.&lt;br /&gt;
&lt;br /&gt;
Emacs is like most other text editors in that it has no concept of linewise.&lt;br /&gt;
&lt;br /&gt;
==Mappings: keystroke based vs function-based==&lt;br /&gt;
&lt;br /&gt;
In Vim, commands like &amp;quot;copy text&amp;quot; don&amp;#039;t have a &amp;quot;name&amp;quot;; they are simply the keystroke that is used to perform that action. So if you want to &amp;quot;program&amp;quot; Vim to repeat some action, such as when defining a mapping, you simply tell Vim which keystrokes you want to repeat.&lt;br /&gt;
&lt;br /&gt;
In Emacs, every keystroke, even entering a single character, has a function that is associated with it. Emacs is simply an interpreter that runs the function associated with the keystroke. You can always do Ctrl-h k followed by the keystroke to find which function is bound to that particular keystroke.&lt;br /&gt;
&lt;br /&gt;
==Tree-based undo vs stack-based undo==&lt;br /&gt;
&lt;br /&gt;
==Multiple similar commands vs single repeated command==&lt;br /&gt;
&lt;br /&gt;
This one is a bit hard to explain, but there is a definite pattern where Vim prefers to give the user multiple similar commands, while Emacs prefers to give a single command that you can then repeat or use creatively. The best way to explain is to give a bunch of examples:&lt;br /&gt;
&lt;br /&gt;
* Changing the screen view relative to cursor: Vim gives you zz to scroll so as to leave the cursor at the center of the screen, zt to scroll and put the cursor at the top, and zb to scroll and put the cursor at the bottom. Emacs just gives you a single command, Ctrl-l, which when repeatedly pressed, will cycle between all three views.&lt;br /&gt;
* Moving cursor to top, middle, bottom: Vim gives you H to move cursor to the top of the screen, M to move to middle, and L to move to bottom. Emacs just gives you Alt-r, which will cycle between the three configurations.&lt;br /&gt;
* Folding: Vim gives you fine-grained commands like zo to open a fold, zc to close a fold, zR to globally reduce the fold level in the file, etc. Emacs as far as I know doesn&amp;#039;t have folding by default, but certain major modes like org-mode and markdown-mode do have folding, and in these, you simply press TAB to cycle the different folding levels, or Shift-TAB to do the cycling globally across the entire file.&lt;br /&gt;
* Vim gives you Y, D, C, to copy, delete, and change (respectively) until the end of the line. Emacs just gives you Ctrl-k, which it then expects you to creatively make use of (e.g. if you want to copy until the end of the line, you do Ctrl-k to delete until the end of the line, then Ctrl-/ to undo).&lt;br /&gt;
* Vim has / to search forward, ? to search backward, then n or N to repeat that search in the same direction or opposite direction. Emacs just has Ctrl-s and Ctrl-r to do the search forward or backward. If you want to repeat the search, you just keep pressing Ctrl-s.&lt;br /&gt;
* When you have multiple split windows, Vim has Ctrl-w followed by h, j, k, or l to move to that window. It also has Ctrl-w followed by w to keep cycling between the splits. It also has Ctrl-w followed by p to toggle between the two most recent splits. There are just a lot of fine-grained choices you can make. Emacs just gives you Ctrl-x o which cycles.&lt;br /&gt;
* Text formatting: Vim gives you two operators, gq and gw, which format text; gq moves the cursor to the end of the formatted text, while gw tries to keep the cursor where it was before the formatting. You can then combine these operators with any motion, e.g. gwip to format the current paragraph, gww to format the current line, gwib to format inside parentheses. Emacs just gives you Alt-q to format the paragraph. It is then up to you to creatively combine that with text selection; you can select some text and then do Alt-q to format just the text that is selected.&lt;br /&gt;
* Copy-pasting: Vim gives you named registers, so if you want to copy two different lines and remember both, you do something like &amp;lt;code&amp;gt;&amp;quot;ayy&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;quot;byy&amp;lt;/code&amp;gt;; then you can paste them with &amp;lt;code&amp;gt;&amp;quot;ap&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;quot;bp&amp;lt;/code&amp;gt;. In Emacs, you instead kill both lines, and then when you go to paste them, you first Ctrl-y to paste the most recent, and then you do Alt-y to cycle between the most recently killed text.&lt;br /&gt;
&lt;br /&gt;
==Word movement: predictable vs &amp;quot;do the common thing&amp;quot;==&lt;br /&gt;
&lt;br /&gt;
Vim&amp;#039;s word-based motions like w, b, and e always treat contiguous alphanumeric sequences as single words, and also treats contiguous symbols as single words. This leads to a pretty predictable word movement. Emacs does the thing that most other text editors do, which is that if the cursor is before a symbol, then moving forward by one word will not just jump to the end of the symbols, but will jump to the end of the alphanumeric sequence &amp;#039;&amp;#039;after&amp;#039;&amp;#039; the symbols.&lt;br /&gt;
&lt;br /&gt;
Suppose you have something like: &amp;lt;code&amp;gt;&amp;quot;hello&amp;quot;&amp;lt;/code&amp;gt; where the cursor is on the first quote. In Vim, w will move the cursor onto the h. In Emacs, Alt-f will move the cursor past the h onto the second quote.&lt;br /&gt;
&lt;br /&gt;
==Documentation: graph/linear vs tree==&lt;br /&gt;
&lt;br /&gt;
Vim uses a wiki-like help system, where you can click on links to read the sections. It also contains a linear book under :help user-manual. Emacs has a GNU-like hierarchical tree documentation system.&lt;/div&gt;</summary>
		<author><name>Issa</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.issarice.com/index.php?title=Design_philosophies_of_Vim_vs_Emacs&amp;diff=2925</id>
		<title>Design philosophies of Vim vs Emacs</title>
		<link rel="alternate" type="text/html" href="https://wiki.issarice.com/index.php?title=Design_philosophies_of_Vim_vs_Emacs&amp;diff=2925"/>
		<updated>2025-11-27T20:16:36Z</updated>

		<summary type="html">&lt;p&gt;Issa: /* Session management: per project vs single instance */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
==Modal vs chording==&lt;br /&gt;
&lt;br /&gt;
* Atomic edits and the dot command in Vim: When you use Vim, you naturally start to think in terms of repeatable edits that you can then use the &amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt; command to repeat. But this has a side-effect in that Vim requires you to manually chunk your undo history. Emacs instead automatically chunks undos.&lt;br /&gt;
&lt;br /&gt;
==Unix as IDE vs Emacs as OS==&lt;br /&gt;
&lt;br /&gt;
Vim tries to just be a text editor, and tries to play nice with the other tools on your computer, using commands like &amp;lt;code&amp;gt;:!command&amp;lt;/code&amp;gt; (runs external command) or &amp;lt;code&amp;gt;:w !command&amp;lt;/code&amp;gt; (pipes text to external command via stdin) or &amp;lt;code&amp;gt;:r !command&amp;lt;/code&amp;gt; (reads from external command via stdout).&lt;br /&gt;
&lt;br /&gt;
===...with some exceptions===&lt;br /&gt;
&lt;br /&gt;
Vim has a built-in spellchecker, whereas Emacs doesn&amp;#039;t (it does come with flyspell, which works with an external spellchecker like hunspell or aspell). (Emacs comes with tetris, an RPN calculator, an email client, etc., but not a spell-checker!)&lt;br /&gt;
&lt;br /&gt;
==Session management: per project vs single instance==&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;right way&amp;quot; to use Vim is to have one instance of Vim open per &amp;quot;project&amp;quot;. Each Vim instance maintains its own current directory, so you can e.g. open files relative to that current directory.&lt;br /&gt;
&lt;br /&gt;
In Emacs, Emacs itself doesn&amp;#039;t maintain its current directory, and instead all file-open actions are relative to the buffer&amp;#039;s directory.&lt;br /&gt;
&lt;br /&gt;
Vim can do the Emacs thing with :set autochdir, but this is disabled by default.&lt;br /&gt;
&lt;br /&gt;
See [https://nullprogram.com/blog/2017/08/22/ this blog post] for more details.&lt;br /&gt;
&lt;br /&gt;
==Line-based vs character-based==&lt;br /&gt;
&lt;br /&gt;
Vim comes from a lineage of line-based editors. Registers can be linewise or characterwise, which means that actions like pasting text can act on entire lines or on characters. Some commands, like :substitute or :global, only work linewise.&lt;br /&gt;
&lt;br /&gt;
Emacs is like most other text editors in that it has no concept of linewise.&lt;br /&gt;
&lt;br /&gt;
==Tree-based undo vs stack-based undo==&lt;br /&gt;
&lt;br /&gt;
==Multiple similar commands vs single repeated command==&lt;br /&gt;
&lt;br /&gt;
This one is a bit hard to explain, but there is a definite pattern where Vim prefers to give the user multiple similar commands, while Emacs prefers to give a single command that you can then repeat or use creatively. The best way to explain is to give a bunch of examples:&lt;br /&gt;
&lt;br /&gt;
* Changing the screen view relative to cursor: Vim gives you zz to scroll so as to leave the cursor at the center of the screen, zt to scroll and put the cursor at the top, and zb to scroll and put the cursor at the bottom. Emacs just gives you a single command, Ctrl-l, which when repeatedly pressed, will cycle between all three views.&lt;br /&gt;
* Moving cursor to top, middle, bottom: Vim gives you H to move cursor to the top of the screen, M to move to middle, and L to move to bottom. Emacs just gives you Alt-r, which will cycle between the three configurations.&lt;br /&gt;
* Folding: Vim gives you fine-grained commands like zo to open a fold, zc to close a fold, zR to globally reduce the fold level in the file, etc. Emacs as far as I know doesn&amp;#039;t have folding by default, but certain major modes like org-mode and markdown-mode do have folding, and in these, you simply press TAB to cycle the different folding levels, or Shift-TAB to do the cycling globally across the entire file.&lt;br /&gt;
* Vim gives you Y, D, C, to copy, delete, and change (respectively) until the end of the line. Emacs just gives you Ctrl-k, which it then expects you to creatively make use of (e.g. if you want to copy until the end of the line, you do Ctrl-k to delete until the end of the line, then Ctrl-/ to undo).&lt;br /&gt;
* Vim has / to search forward, ? to search backward, then n or N to repeat that search in the same direction or opposite direction. Emacs just has Ctrl-s and Ctrl-r to do the search forward or backward. If you want to repeat the search, you just keep pressing Ctrl-s.&lt;br /&gt;
* When you have multiple split windows, Vim has Ctrl-w followed by h, j, k, or l to move to that window. It also has Ctrl-w followed by w to keep cycling between the splits. It also has Ctrl-w followed by p to toggle between the two most recent splits. There are just a lot of fine-grained choices you can make. Emacs just gives you Ctrl-x o which cycles.&lt;br /&gt;
* Text formatting: Vim gives you two operators, gq and gw, which format text; gq moves the cursor to the end of the formatted text, while gw tries to keep the cursor where it was before the formatting. You can then combine these operators with any motion, e.g. gwip to format the current paragraph, gww to format the current line, gwib to format inside parentheses. Emacs just gives you Alt-q to format the paragraph. It is then up to you to creatively combine that with text selection; you can select some text and then do Alt-q to format just the text that is selected.&lt;br /&gt;
* Copy-pasting: Vim gives you named registers, so if you want to copy two different lines and remember both, you do something like &amp;lt;code&amp;gt;&amp;quot;ayy&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;quot;byy&amp;lt;/code&amp;gt;; then you can paste them with &amp;lt;code&amp;gt;&amp;quot;ap&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;quot;bp&amp;lt;/code&amp;gt;. In Emacs, you instead kill both lines, and then when you go to paste them, you first Ctrl-y to paste the most recent, and then you do Alt-y to cycle between the most recently killed text.&lt;br /&gt;
&lt;br /&gt;
==Word movement: predictable vs &amp;quot;do the common thing&amp;quot;==&lt;br /&gt;
&lt;br /&gt;
Vim&amp;#039;s word-based motions like w, b, and e always treat contiguous alphanumeric sequences as single words, and also treats contiguous symbols as single words. This leads to a pretty predictable word movement. Emacs does the thing that most other text editors do, which is that if the cursor is before a symbol, then moving forward by one word will not just jump to the end of the symbols, but will jump to the end of the alphanumeric sequence &amp;#039;&amp;#039;after&amp;#039;&amp;#039; the symbols.&lt;br /&gt;
&lt;br /&gt;
Suppose you have something like: &amp;lt;code&amp;gt;&amp;quot;hello&amp;quot;&amp;lt;/code&amp;gt; where the cursor is on the first quote. In Vim, w will move the cursor onto the h. In Emacs, Alt-f will move the cursor past the h onto the second quote.&lt;br /&gt;
&lt;br /&gt;
==Documentation: graph/linear vs tree==&lt;br /&gt;
&lt;br /&gt;
Vim uses a wiki-like help system, where you can click on links to read the sections. It also contains a linear book under :help user-manual. Emacs has a GNU-like hierarchical tree documentation system.&lt;/div&gt;</summary>
		<author><name>Issa</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.issarice.com/index.php?title=Design_philosophies_of_Vim_vs_Emacs&amp;diff=2924</id>
		<title>Design philosophies of Vim vs Emacs</title>
		<link rel="alternate" type="text/html" href="https://wiki.issarice.com/index.php?title=Design_philosophies_of_Vim_vs_Emacs&amp;diff=2924"/>
		<updated>2025-11-27T20:15:31Z</updated>

		<summary type="html">&lt;p&gt;Issa: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
==Modal vs chording==&lt;br /&gt;
&lt;br /&gt;
* Atomic edits and the dot command in Vim: When you use Vim, you naturally start to think in terms of repeatable edits that you can then use the &amp;lt;code&amp;gt;.&amp;lt;/code&amp;gt; command to repeat. But this has a side-effect in that Vim requires you to manually chunk your undo history. Emacs instead automatically chunks undos.&lt;br /&gt;
&lt;br /&gt;
==Unix as IDE vs Emacs as OS==&lt;br /&gt;
&lt;br /&gt;
Vim tries to just be a text editor, and tries to play nice with the other tools on your computer, using commands like &amp;lt;code&amp;gt;:!command&amp;lt;/code&amp;gt; (runs external command) or &amp;lt;code&amp;gt;:w !command&amp;lt;/code&amp;gt; (pipes text to external command via stdin) or &amp;lt;code&amp;gt;:r !command&amp;lt;/code&amp;gt; (reads from external command via stdout).&lt;br /&gt;
&lt;br /&gt;
===...with some exceptions===&lt;br /&gt;
&lt;br /&gt;
Vim has a built-in spellchecker, whereas Emacs doesn&amp;#039;t (it does come with flyspell, which works with an external spellchecker like hunspell or aspell). (Emacs comes with tetris, an RPN calculator, an email client, etc., but not a spell-checker!)&lt;br /&gt;
&lt;br /&gt;
==Session management: per project vs single instance==&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;right way&amp;quot; to use Vim is to have one instance of Vim open per &amp;quot;project&amp;quot;. Each Vim instance maintains its own current directory, so you can e.g. open files relative to that current directory.&lt;br /&gt;
&lt;br /&gt;
In Emacs, Emacs itself doesn&amp;#039;t maintain its current directory, and instead all file-open actions are relative to the buffer&amp;#039;s directory.&lt;br /&gt;
&lt;br /&gt;
Vim can do the Emacs thing with :set autochdir, but this is disabled by default.&lt;br /&gt;
&lt;br /&gt;
==Line-based vs character-based==&lt;br /&gt;
&lt;br /&gt;
Vim comes from a lineage of line-based editors. Registers can be linewise or characterwise, which means that actions like pasting text can act on entire lines or on characters. Some commands, like :substitute or :global, only work linewise.&lt;br /&gt;
&lt;br /&gt;
Emacs is like most other text editors in that it has no concept of linewise.&lt;br /&gt;
&lt;br /&gt;
==Tree-based undo vs stack-based undo==&lt;br /&gt;
&lt;br /&gt;
==Multiple similar commands vs single repeated command==&lt;br /&gt;
&lt;br /&gt;
This one is a bit hard to explain, but there is a definite pattern where Vim prefers to give the user multiple similar commands, while Emacs prefers to give a single command that you can then repeat or use creatively. The best way to explain is to give a bunch of examples:&lt;br /&gt;
&lt;br /&gt;
* Changing the screen view relative to cursor: Vim gives you zz to scroll so as to leave the cursor at the center of the screen, zt to scroll and put the cursor at the top, and zb to scroll and put the cursor at the bottom. Emacs just gives you a single command, Ctrl-l, which when repeatedly pressed, will cycle between all three views.&lt;br /&gt;
* Moving cursor to top, middle, bottom: Vim gives you H to move cursor to the top of the screen, M to move to middle, and L to move to bottom. Emacs just gives you Alt-r, which will cycle between the three configurations.&lt;br /&gt;
* Folding: Vim gives you fine-grained commands like zo to open a fold, zc to close a fold, zR to globally reduce the fold level in the file, etc. Emacs as far as I know doesn&amp;#039;t have folding by default, but certain major modes like org-mode and markdown-mode do have folding, and in these, you simply press TAB to cycle the different folding levels, or Shift-TAB to do the cycling globally across the entire file.&lt;br /&gt;
* Vim gives you Y, D, C, to copy, delete, and change (respectively) until the end of the line. Emacs just gives you Ctrl-k, which it then expects you to creatively make use of (e.g. if you want to copy until the end of the line, you do Ctrl-k to delete until the end of the line, then Ctrl-/ to undo).&lt;br /&gt;
* Vim has / to search forward, ? to search backward, then n or N to repeat that search in the same direction or opposite direction. Emacs just has Ctrl-s and Ctrl-r to do the search forward or backward. If you want to repeat the search, you just keep pressing Ctrl-s.&lt;br /&gt;
* When you have multiple split windows, Vim has Ctrl-w followed by h, j, k, or l to move to that window. It also has Ctrl-w followed by w to keep cycling between the splits. It also has Ctrl-w followed by p to toggle between the two most recent splits. There are just a lot of fine-grained choices you can make. Emacs just gives you Ctrl-x o which cycles.&lt;br /&gt;
* Text formatting: Vim gives you two operators, gq and gw, which format text; gq moves the cursor to the end of the formatted text, while gw tries to keep the cursor where it was before the formatting. You can then combine these operators with any motion, e.g. gwip to format the current paragraph, gww to format the current line, gwib to format inside parentheses. Emacs just gives you Alt-q to format the paragraph. It is then up to you to creatively combine that with text selection; you can select some text and then do Alt-q to format just the text that is selected.&lt;br /&gt;
* Copy-pasting: Vim gives you named registers, so if you want to copy two different lines and remember both, you do something like &amp;lt;code&amp;gt;&amp;quot;ayy&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;quot;byy&amp;lt;/code&amp;gt;; then you can paste them with &amp;lt;code&amp;gt;&amp;quot;ap&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;quot;bp&amp;lt;/code&amp;gt;. In Emacs, you instead kill both lines, and then when you go to paste them, you first Ctrl-y to paste the most recent, and then you do Alt-y to cycle between the most recently killed text.&lt;br /&gt;
&lt;br /&gt;
==Word movement: predictable vs &amp;quot;do the common thing&amp;quot;==&lt;br /&gt;
&lt;br /&gt;
Vim&amp;#039;s word-based motions like w, b, and e always treat contiguous alphanumeric sequences as single words, and also treats contiguous symbols as single words. This leads to a pretty predictable word movement. Emacs does the thing that most other text editors do, which is that if the cursor is before a symbol, then moving forward by one word will not just jump to the end of the symbols, but will jump to the end of the alphanumeric sequence &amp;#039;&amp;#039;after&amp;#039;&amp;#039; the symbols.&lt;br /&gt;
&lt;br /&gt;
Suppose you have something like: &amp;lt;code&amp;gt;&amp;quot;hello&amp;quot;&amp;lt;/code&amp;gt; where the cursor is on the first quote. In Vim, w will move the cursor onto the h. In Emacs, Alt-f will move the cursor past the h onto the second quote.&lt;br /&gt;
&lt;br /&gt;
==Documentation: graph/linear vs tree==&lt;br /&gt;
&lt;br /&gt;
Vim uses a wiki-like help system, where you can click on links to read the sections. It also contains a linear book under :help user-manual. Emacs has a GNU-like hierarchical tree documentation system.&lt;/div&gt;</summary>
		<author><name>Issa</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.issarice.com/index.php?title=Design_philosophies_of_Vim_vs_Emacs&amp;diff=2923</id>
		<title>Design philosophies of Vim vs Emacs</title>
		<link rel="alternate" type="text/html" href="https://wiki.issarice.com/index.php?title=Design_philosophies_of_Vim_vs_Emacs&amp;diff=2923"/>
		<updated>2025-11-27T20:13:34Z</updated>

		<summary type="html">&lt;p&gt;Issa: /* Multiple similar commands vs single repeated command */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
==Modal vs chording==&lt;br /&gt;
&lt;br /&gt;
==Unix as IDE vs Emacs as OS==&lt;br /&gt;
&lt;br /&gt;
Vim tries to just be a text editor, and tries to play nice with the other tools on your computer, using commands like &amp;lt;code&amp;gt;:!command&amp;lt;/code&amp;gt; (runs external command) or &amp;lt;code&amp;gt;:w !command&amp;lt;/code&amp;gt; (pipes text to external command via stdin) or &amp;lt;code&amp;gt;:r !command&amp;lt;/code&amp;gt; (reads from external command via stdout).&lt;br /&gt;
&lt;br /&gt;
===...with some exceptions===&lt;br /&gt;
&lt;br /&gt;
Vim has a built-in spellchecker, whereas Emacs doesn&amp;#039;t (it does come with flyspell, which works with an external spellchecker like hunspell or aspell). (Emacs comes with tetris, an RPN calculator, an email client, etc., but not a spell-checker!)&lt;br /&gt;
&lt;br /&gt;
==Session management: per project vs single instance==&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;right way&amp;quot; to use Vim is to have one instance of Vim open per &amp;quot;project&amp;quot;. Each Vim instance maintains its own current directory, so you can e.g. open files relative to that current directory.&lt;br /&gt;
&lt;br /&gt;
In Emacs, Emacs itself doesn&amp;#039;t maintain its current directory, and instead all file-open actions are relative to the buffer&amp;#039;s directory.&lt;br /&gt;
&lt;br /&gt;
Vim can do the Emacs thing with :set autochdir, but this is disabled by default.&lt;br /&gt;
&lt;br /&gt;
==Line-based vs character-based==&lt;br /&gt;
&lt;br /&gt;
Vim comes from a lineage of line-based editors. Registers can be linewise or characterwise, which means that actions like pasting text can act on entire lines or on characters. Some commands, like :substitute or :global, only work linewise.&lt;br /&gt;
&lt;br /&gt;
Emacs is like most other text editors in that it has no concept of linewise.&lt;br /&gt;
&lt;br /&gt;
==Tree-based undo vs stack-based undo==&lt;br /&gt;
&lt;br /&gt;
==Multiple similar commands vs single repeated command==&lt;br /&gt;
&lt;br /&gt;
This one is a bit hard to explain, but there is a definite pattern where Vim prefers to give the user multiple similar commands, while Emacs prefers to give a single command that you can then repeat or use creatively. The best way to explain is to give a bunch of examples:&lt;br /&gt;
&lt;br /&gt;
* Changing the screen view relative to cursor: Vim gives you zz to scroll so as to leave the cursor at the center of the screen, zt to scroll and put the cursor at the top, and zb to scroll and put the cursor at the bottom. Emacs just gives you a single command, Ctrl-l, which when repeatedly pressed, will cycle between all three views.&lt;br /&gt;
* Moving cursor to top, middle, bottom: Vim gives you H to move cursor to the top of the screen, M to move to middle, and L to move to bottom. Emacs just gives you Alt-r, which will cycle between the three configurations.&lt;br /&gt;
* Folding: Vim gives you fine-grained commands like zo to open a fold, zc to close a fold, zR to globally reduce the fold level in the file, etc. Emacs as far as I know doesn&amp;#039;t have folding by default, but certain major modes like org-mode and markdown-mode do have folding, and in these, you simply press TAB to cycle the different folding levels, or Shift-TAB to do the cycling globally across the entire file.&lt;br /&gt;
* Vim gives you Y, D, C, to copy, delete, and change (respectively) until the end of the line. Emacs just gives you Ctrl-k, which it then expects you to creatively make use of (e.g. if you want to copy until the end of the line, you do Ctrl-k to delete until the end of the line, then Ctrl-/ to undo).&lt;br /&gt;
* Vim has / to search forward, ? to search backward, then n or N to repeat that search in the same direction or opposite direction. Emacs just has Ctrl-s and Ctrl-r to do the search forward or backward. If you want to repeat the search, you just keep pressing Ctrl-s.&lt;br /&gt;
* When you have multiple split windows, Vim has Ctrl-w followed by h, j, k, or l to move to that window. It also has Ctrl-w followed by w to keep cycling between the splits. It also has Ctrl-w followed by p to toggle between the two most recent splits. There are just a lot of fine-grained choices you can make. Emacs just gives you Ctrl-x o which cycles.&lt;br /&gt;
* Text formatting: Vim gives you two operators, gq and gw, which format text; gq moves the cursor to the end of the formatted text, while gw tries to keep the cursor where it was before the formatting. You can then combine these operators with any motion, e.g. gwip to format the current paragraph, gww to format the current line, gwib to format inside parentheses. Emacs just gives you Alt-q to format the paragraph. It is then up to you to creatively combine that with text selection; you can select some text and then do Alt-q to format just the text that is selected.&lt;br /&gt;
* Copy-pasting: Vim gives you named registers, so if you want to copy two different lines and remember both, you do something like &amp;lt;code&amp;gt;&amp;quot;ayy&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;quot;byy&amp;lt;/code&amp;gt;; then you can paste them with &amp;lt;code&amp;gt;&amp;quot;ap&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;quot;bp&amp;lt;/code&amp;gt;. In Emacs, you instead kill both lines, and then when you go to paste them, you first Ctrl-y to paste the most recent, and then you do Alt-y to cycle between the most recently killed text.&lt;br /&gt;
&lt;br /&gt;
==Word movement: predictable vs &amp;quot;do the common thing&amp;quot;==&lt;br /&gt;
&lt;br /&gt;
Vim&amp;#039;s word-based motions like w, b, and e always treat contiguous alphanumeric sequences as single words, and also treats contiguous symbols as single words. This leads to a pretty predictable word movement. Emacs does the thing that most other text editors do, which is that if the cursor is before a symbol, then moving forward by one word will not just jump to the end of the symbols, but will jump to the end of the alphanumeric sequence &amp;#039;&amp;#039;after&amp;#039;&amp;#039; the symbols.&lt;br /&gt;
&lt;br /&gt;
Suppose you have something like: &amp;lt;code&amp;gt;&amp;quot;hello&amp;quot;&amp;lt;/code&amp;gt; where the cursor is on the first quote. In Vim, w will move the cursor onto the h. In Emacs, Alt-f will move the cursor past the h onto the second quote.&lt;br /&gt;
&lt;br /&gt;
==Documentation: graph/linear vs tree==&lt;br /&gt;
&lt;br /&gt;
Vim uses a wiki-like help system, where you can click on links to read the sections. It also contains a linear book under :help user-manual. Emacs has a GNU-like hierarchical tree documentation system.&lt;/div&gt;</summary>
		<author><name>Issa</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.issarice.com/index.php?title=Design_philosophies_of_Vim_vs_Emacs&amp;diff=2922</id>
		<title>Design philosophies of Vim vs Emacs</title>
		<link rel="alternate" type="text/html" href="https://wiki.issarice.com/index.php?title=Design_philosophies_of_Vim_vs_Emacs&amp;diff=2922"/>
		<updated>2025-11-27T20:08:43Z</updated>

		<summary type="html">&lt;p&gt;Issa: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
==Modal vs chording==&lt;br /&gt;
&lt;br /&gt;
==Unix as IDE vs Emacs as OS==&lt;br /&gt;
&lt;br /&gt;
Vim tries to just be a text editor, and tries to play nice with the other tools on your computer, using commands like &amp;lt;code&amp;gt;:!command&amp;lt;/code&amp;gt; (runs external command) or &amp;lt;code&amp;gt;:w !command&amp;lt;/code&amp;gt; (pipes text to external command via stdin) or &amp;lt;code&amp;gt;:r !command&amp;lt;/code&amp;gt; (reads from external command via stdout).&lt;br /&gt;
&lt;br /&gt;
===...with some exceptions===&lt;br /&gt;
&lt;br /&gt;
Vim has a built-in spellchecker, whereas Emacs doesn&amp;#039;t (it does come with flyspell, which works with an external spellchecker like hunspell or aspell). (Emacs comes with tetris, an RPN calculator, an email client, etc., but not a spell-checker!)&lt;br /&gt;
&lt;br /&gt;
==Session management: per project vs single instance==&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;right way&amp;quot; to use Vim is to have one instance of Vim open per &amp;quot;project&amp;quot;. Each Vim instance maintains its own current directory, so you can e.g. open files relative to that current directory.&lt;br /&gt;
&lt;br /&gt;
In Emacs, Emacs itself doesn&amp;#039;t maintain its current directory, and instead all file-open actions are relative to the buffer&amp;#039;s directory.&lt;br /&gt;
&lt;br /&gt;
Vim can do the Emacs thing with :set autochdir, but this is disabled by default.&lt;br /&gt;
&lt;br /&gt;
==Line-based vs character-based==&lt;br /&gt;
&lt;br /&gt;
Vim comes from a lineage of line-based editors. Registers can be linewise or characterwise, which means that actions like pasting text can act on entire lines or on characters. Some commands, like :substitute or :global, only work linewise.&lt;br /&gt;
&lt;br /&gt;
Emacs is like most other text editors in that it has no concept of linewise.&lt;br /&gt;
&lt;br /&gt;
==Tree-based undo vs stack-based undo==&lt;br /&gt;
&lt;br /&gt;
==Multiple similar commands vs single repeated command==&lt;br /&gt;
&lt;br /&gt;
This one is a bit hard to explain, but there is a definite pattern where Vim prefers to give the user multiple similar commands, while Emacs prefers to give a single command that you can then repeat or use creatively. The best way to explain is to give a bunch of examples:&lt;br /&gt;
&lt;br /&gt;
* Changing the screen view relative to cursor: Vim gives you zz to scroll so as to leave the cursor at the center of the screen, zt to scroll and put the cursor at the top, and zb to scroll and put the cursor at the bottom. Emacs just gives you a single command, Ctrl-l, which when repeatedly pressed, will cycle between all three views.&lt;br /&gt;
* Moving cursor to top, middle, bottom: Vim gives you H to move cursor to the top of the screen, M to move to middle, and L to move to bottom. Emacs just gives you Alt-r, which will cycle between the three configurations.&lt;br /&gt;
* Folding: Vim gives you fine-grained commands like zo to open a fold, zc to close a fold, zR to globally reduce the fold level in the file, etc. Emacs as far as I know doesn&amp;#039;t have folding by default, but certain major modes like org-mode and markdown-mode do have folding, and in these, you simply press TAB to cycle the different folding levels, or Shift-TAB to do the cycling globally across the entire file.&lt;br /&gt;
* Vim gives you Y, D, C, to copy, delete, and change (respectively) until the end of the line. Emacs just gives you Ctrl-k, which it then expects you to creatively make use of (e.g. if you want to copy until the end of the line, you do Ctrl-k to delete until the end of the line, then Ctrl-/ to undo).&lt;br /&gt;
* Vim has / to search forward, ? to search backward, then n or N to repeat that search in the same direction or opposite direction. Emacs just has Ctrl-s and Ctrl-r to do the search forward or backward. If you want to repeat the search, you just keep pressing Ctrl-s.&lt;br /&gt;
* When you have multiple split windows, Vim has Ctrl-w followed by h, j, k, or l to move to that window. It also has Ctrl-w followed by w to keep cycling between the splits. It also has Ctrl-w followed by p to toggle between the two most recent splits. There are just a lot of fine-grained choices you can make. Emacs just gives you Ctrl-x o which cycles.&lt;br /&gt;
* Text formatting: Vim gives you two operators, gq and gw, which format text; gq moves the cursor to the end of the formatted text, while gw tries to keep the cursor where it was before the formatting. You can then combine these operators with any motion, e.g. gwip to format the current paragraph, gww to format the current line, gwib to format inside parentheses. Emacs just gives you Alt-q to format the paragraph. It is then up to you to creatively combine that with text selection; you can select some text and then do Alt-q to format just the text that is selected.&lt;br /&gt;
&lt;br /&gt;
==Word movement: predictable vs &amp;quot;do the common thing&amp;quot;==&lt;br /&gt;
&lt;br /&gt;
Vim&amp;#039;s word-based motions like w, b, and e always treat contiguous alphanumeric sequences as single words, and also treats contiguous symbols as single words. This leads to a pretty predictable word movement. Emacs does the thing that most other text editors do, which is that if the cursor is before a symbol, then moving forward by one word will not just jump to the end of the symbols, but will jump to the end of the alphanumeric sequence &amp;#039;&amp;#039;after&amp;#039;&amp;#039; the symbols.&lt;br /&gt;
&lt;br /&gt;
Suppose you have something like: &amp;lt;code&amp;gt;&amp;quot;hello&amp;quot;&amp;lt;/code&amp;gt; where the cursor is on the first quote. In Vim, w will move the cursor onto the h. In Emacs, Alt-f will move the cursor past the h onto the second quote.&lt;br /&gt;
&lt;br /&gt;
==Documentation: graph/linear vs tree==&lt;br /&gt;
&lt;br /&gt;
Vim uses a wiki-like help system, where you can click on links to read the sections. It also contains a linear book under :help user-manual. Emacs has a GNU-like hierarchical tree documentation system.&lt;/div&gt;</summary>
		<author><name>Issa</name></author>
		
	</entry>
</feed>