{"id":13479788,"url":"https://github.com/easymotion/vim-easymotion","last_synced_at":"2025-12-16T16:53:26.662Z","repository":{"id":38325787,"uuid":"1534303","full_name":"easymotion/vim-easymotion","owner":"easymotion","description":"Vim motions on speed!","archived":false,"fork":false,"pushed_at":"2024-02-05T02:30:15.000Z","size":1534,"stargazers_count":7586,"open_issues_count":127,"forks_count":359,"subscribers_count":66,"default_branch":"master","last_synced_at":"2025-04-10T20:55:36.918Z","etag":null,"topics":["vim","vim-easymotion","vim-plugin"],"latest_commit_sha":null,"homepage":"http://www.vim.org/scripts/script.php?script_id=3526","language":"Vim script","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/easymotion.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":["haya14busa"],"patreon":null,"open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"custom":null}},"created_at":"2011-03-27T22:07:13.000Z","updated_at":"2025-04-08T10:27:51.000Z","dependencies_parsed_at":"2023-01-19T15:46:22.473Z","dependency_job_id":"4639c4a0-2309-4cfa-949e-dd4ca3e30a4c","html_url":"https://github.com/easymotion/vim-easymotion","commit_stats":null,"previous_names":["lokaltog/vim-easymotion"],"tags_count":26,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/easymotion%2Fvim-easymotion","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/easymotion%2Fvim-easymotion/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/easymotion%2Fvim-easymotion/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/easymotion%2Fvim-easymotion/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/easymotion","download_url":"https://codeload.github.com/easymotion/vim-easymotion/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254067295,"owners_count":22009136,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["vim","vim-easymotion","vim-plugin"],"created_at":"2024-07-31T16:02:22.994Z","updated_at":"2025-12-16T16:53:26.590Z","avatar_url":"https://github.com/easymotion.png","language":"Vim script","readme":"Vim motion on speed!\n=====\n[![Build Status](https://travis-ci.org/easymotion/vim-easymotion.svg?branch=master)](https://travis-ci.org/easymotion/vim-easymotion)\n[![reviewdog](https://github.com/easymotion/vim-easymotion/workflows/reviewdog/badge.svg?branch=master\u0026event=push)](https://github.com/easymotion/vim-easymotion/actions?query=workflow%3Areviewdog+event%3Apush+branch%3Amaster)\n\n![Animated demonstration](https://f.cloud.github.com/assets/3797062/2039359/a8e938d6-899f-11e3-8789-60025ea83656.gif)\n\nAbout the authors\n=====\n\n| Authors          |                               |\n|------------------|-------------------------------|\n| Kim Silkebækken | https://github.com/Lokaltog   |\n| haya14busa       | https://github.com/haya14busa |\n\nThe EasyMotion project, revived!\n======\n\nStarting from version 2.0 [haya14busa](https://github.com/haya14busa) will be\ntaking over the project from [Lokaltog](https://github.com/Lokaltog). He's\nimproved the default motions, implemented many useful new features, and fixed\nsome bugs.\n\nEasyMotion is now completely:\n\n- **Well-behaved**: It's consistent with the default motions of Vim and works\n  well in all modes. And it now supports repeating with the dot operator.\n- **Configurable**: You can easily configure its behavior and map it to any key\n- **Sophisticated**: Provide flawless, smooth and fast motions with minimal keystrokes\n\nEven though some default behaviors were modified and many new features were\nadded, I carefully considered backward compatibility. So those of you updating\nfrom older versions can do so without worry and start benefiting immediately\nfrom all the new features!\n\nIntroduction\n=====\n\nEasyMotion provides a much simpler way to use some motions in vim. It\ntakes the `\u003cnumber\u003e` out of `\u003cnumber\u003ew` or `\u003cnumber\u003ef{char}` by\nhighlighting all possible choices and allowing you to press one key to\njump directly to the target.\n\nWhen one of the available motions is triggered, all visible text\npreceding or following the cursor is faded, and motion targets are\nhighlighted.\n\nEasyMotion is triggered by the provided mappings. This readme only covers the\nbasics; please refer to\n[`:help easymotion.txt`](https://github.com/easymotion/vim-easymotion/blob/master/doc/easymotion.txt#L86)\nto see all the available mappings.\n\nImportant notes\n=====\n\n### Default bindings\n\n**The default leader has been changed to `\u003cLeader\u003e\u003cLeader\u003e` to avoid\nconflicts with other plugins you may have installed.** This can easily be\nchanged back to pre-1.3 behavior by rebinding the leader in your vimrc:\n\n```vim\nmap \u003cLeader\u003e \u003cPlug\u003e(easymotion-prefix)\n```\n\nAll motions will then be triggered with `\u003cLeader\u003e` by default, e.g.\n`\u003cLeader\u003es`, `\u003cLeader\u003egE`.\n\n### For users of the forked version\n\nSelectLines and SelectPhrase are not actually *motions*, so I've moved them into\nseparate plugins.\n\n- https://github.com/haya14busa/vim-easyoperator-line\n- https://github.com/haya14busa/vim-easyoperator-phrase\n\nUsage example for the base features\n=====\n\n\t\u003ccursor\u003eLorem ipsum dolor sit amet.\n\nType `\u003cLeader\u003e\u003cLeader\u003ew`(`\u003cPlug\u003e(easymotion-w)`) to trigger the word motion `w`.\nWhen the motion is triggered, the text is updated (no braces are actually added,\nthe text is highlighted in red by default):\n\n\t\u003ccursor\u003eLorem {a}psum {b}olor {c}it {d}met.\n\nPress `c` to jump to the beginning of the word \"sit\":\n\n\tLorem ipsum dolor \u003ccursor\u003esit amet.\n\nSimilarly, if you're looking for an \"o\", you can use the `f` motion.\nType `\u003cLeader\u003e\u003cLeader\u003efo`, and all \"o\" characters are highlighted:\n\n\t\u003ccursor\u003eL{a}rem ipsum d{b}l{c}r sit amet.\n\nPress `b` to jump to the second \"o\":\n\n\tLorem ipsum d\u003ccursor\u003eolor sit amet.\n\nJeffrey Way of Nettuts+ has also [written\na tutorial](https://code.tutsplus.com/tutorials/vim-essential-plugin-easymotion--net-19223)\nabout EasyMotion.\n\nNew features in version 3.0\n====\n\n### Overwin motions\n![](https://raw.githubusercontent.com/haya14busa/i/2753bd4dd1dfdf5962dbdbffabf24244e4e14243/easymotion/overwin-motions.gif)\n\nEasyMotion now supports moving cursor across/over window.\nSince it doesn't make sense that moving cursor to other window while Visual or\nOperator-pending mode, overwin motions only provides mappings for Normal\nmode.  Please use `nmap` to use overwin motions. Overwin motions only\nsupports bi-directional motions.\n\n#### Example configuration\n\n```vim\n\" \u003cLeader\u003ef{char} to move to {char}\nmap  \u003cLeader\u003ef \u003cPlug\u003e(easymotion-bd-f)\nnmap \u003cLeader\u003ef \u003cPlug\u003e(easymotion-overwin-f)\n\n\" s{char}{char} to move to {char}{char}\nnmap s \u003cPlug\u003e(easymotion-overwin-f2)\n\n\" Move to line\nmap \u003cLeader\u003eL \u003cPlug\u003e(easymotion-bd-jk)\nnmap \u003cLeader\u003eL \u003cPlug\u003e(easymotion-overwin-line)\n\n\" Move to word\nmap  \u003cLeader\u003ew \u003cPlug\u003e(easymotion-bd-w)\nnmap \u003cLeader\u003ew \u003cPlug\u003e(easymotion-overwin-w)\n```\n\n#### Integration with incsearch.vim\n- [haya14busa/incsearch.vim](https://github.com/haya14busa/incsearch.vim)\n- [haya14busa/incsearch-easymotion.vim](https://github.com/haya14busa/incsearch-easymotion.vim)\n\n```vim\n\" You can use other keymappings like \u003cC-l\u003e instead of \u003cCR\u003e if you want to\n\" use these mappings as default search and sometimes want to move cursor with\n\" EasyMotion.\nfunction! s:incsearch_config(...) abort\n  return incsearch#util#deepextend(deepcopy({\n  \\   'modules': [incsearch#config#easymotion#module({'overwin': 1})],\n  \\   'keymap': {\n  \\     \"\\\u003cCR\u003e\": '\u003cOver\u003e(easymotion)'\n  \\   },\n  \\   'is_expr': 0\n  \\ }), get(a:, 1, {}))\nendfunction\n\nnoremap \u003csilent\u003e\u003cexpr\u003e /  incsearch#go(\u003cSID\u003eincsearch_config())\nnoremap \u003csilent\u003e\u003cexpr\u003e ?  incsearch#go(\u003cSID\u003eincsearch_config({'command': '?'}))\nnoremap \u003csilent\u003e\u003cexpr\u003e g/ incsearch#go(\u003cSID\u003eincsearch_config({'is_stay': 1}))\n```\n\n### Bonus fuzzy-search with EasyMotion\n\n![](https://raw.githubusercontent.com/haya14busa/i/eab1d12a8bd322223d551956a4fd8a21d5c4bfe9/easymotion/fuzzy-incsearch-easymotion.gif)\n\n- [haya14busa/incsearch.vim](https://github.com/haya14busa/incsearch.vim)\n- [haya14busa/incsearch-fuzzy.vim](https://github.com/haya14busa/incsearch-fuzzy.vim)\n- [haya14busa/incsearch-easymotion.vim](https://github.com/haya14busa/incsearch-easymotion.vim)\n\n```vim\nfunction! s:config_easyfuzzymotion(...) abort\n  return extend(copy({\n  \\   'converters': [incsearch#config#fuzzyword#converter()],\n  \\   'modules': [incsearch#config#easymotion#module({'overwin': 1})],\n  \\   'keymap': {\"\\\u003cCR\u003e\": '\u003cOver\u003e(easymotion)'},\n  \\   'is_expr': 0,\n  \\   'is_stay': 1\n  \\ }), get(a:, 1, {}))\nendfunction\n\nnoremap \u003csilent\u003e\u003cexpr\u003e \u003cSpace\u003e/ incsearch#go(\u003cSID\u003econfig_easyfuzzymotion())\n```\n\nNew features in version 2.0\n====\n\n### Two key highlighting\n\nWhen EasyMotion runs out of single characters to highlight movement targets, it\nimmediately shows you the keys you have to press.\n\nIn previous versions you could not see the next character you would need to\npress until you entered the first one. This made movement over long distances\nless fluid. Now you can see at a glance exactly which characters to select to\nget to your destination.\n\n### Bidirectional motions\n\nAll motions now come in bidirectional variants (e.g. `\u003cPlug\u003e(easymotion-s)`,\n`\u003cPlug\u003e(easymotion-bd-w)` and so forth).\nBy default, you can already jump forward or backward with `\u003cLeader\u003es`. A useful\ntrick is to map `nmap s \u003cPlug\u003e(easymotion-s)` to use `s` instead and save one\nkeystroke!\n\n### 2-character search motion\n\nYou can now also perform a 2-character search, similar to [vim-seek](https://github.com/goldfeld/vim-seek)/[vim-sneak](https://github.com/justinmk/vim-sneak) with `\u003cPlug\u003e(easymotion-s2)`. For example, you can highlight all words that start with `fu`.\n\n![2-key-find-motion](https://f.cloud.github.com/assets/3797062/2039612/7cafcec8-89a5-11e3-8f2c-5f26a6b83efd.gif)\n\n```vim\n\" Gif config\nnmap s \u003cPlug\u003e(easymotion-s2)\nnmap t \u003cPlug\u003e(easymotion-t2)\n```\n\n### n-character search motion\n\nYou can also search for `n` characters, which can be used to replace the default search of Vim.\nIt supports incremental highlighting and you can use `\u003cTab\u003e` and `\u003cS-Tab\u003e` to scroll down/up a page. If you press\n`\u003cCR\u003e`, you get the usual EasyMotion highlighting and can jump to any matching target destination with a\nsingle keystroke.\n\nWhat sounds complicated should become clear if you look at the following examples.\n\n![n-key-motion-scroll](https://f.cloud.github.com/assets/3797062/2039254/4fbf7276-899e-11e3-9bf3-1e446cabc097.gif)\n\n![replace-search](https://f.cloud.github.com/assets/3797062/2039751/64b72bd8-89a8-11e3-80ea-2a6b578040b2.gif)\n\n```vim\n\" Gif config\nmap  / \u003cPlug\u003e(easymotion-sn)\nomap / \u003cPlug\u003e(easymotion-tn)\n\n\" These `n` \u0026 `N` mappings are options. You do not have to map `n` \u0026 `N` to EasyMotion.\n\" Without these mappings, `n` \u0026 `N` works fine. (These mappings just provide\n\" different highlight method and have some other features )\nmap  n \u003cPlug\u003e(easymotion-next)\nmap  N \u003cPlug\u003e(easymotion-prev)\n```\n\n### Within line motion\n\nEvery motion also has variants that are restricted to just the current line\n(e.g. `\u003cPlug\u003e(easymotion-sl)`, `\u003cPlug\u003e(easymotion-bd-wl)`, etc...). This can be\nhelpful if you find the full search distracting or slows down vim.\n\n### hjkl motions\n\nEasyMotion can be configured to avoid repetitive use of the `h` `j` `k` and\n`l` keys.\n\n![hjkl-motion](https://f.cloud.github.com/assets/3797062/2039413/d8b32ab2-89a0-11e3-894f-3e81db084cfd.gif)\n\n```vim\n\" Gif config\nmap \u003cLeader\u003el \u003cPlug\u003e(easymotion-lineforward)\nmap \u003cLeader\u003ej \u003cPlug\u003e(easymotion-j)\nmap \u003cLeader\u003ek \u003cPlug\u003e(easymotion-k)\nmap \u003cLeader\u003eh \u003cPlug\u003e(easymotion-linebackward)\n\nlet g:EasyMotion_startofline = 0 \" keep cursor column when JK motion\n```\n\n### Smartcase \u0026 Smartsign\n\nThis setting makes EasyMotion work similarly to Vim's `smartcase` option for\nglobal searches.\n\n```vim\nlet g:EasyMotion_smartcase = 1\n```\n\nWith this option set, `v` will match both `v` and `V`, but `V` will match `V`\nonly. Default: 0.\n\n```vim\nlet g:EasyMotion_use_smartsign_us = 1 \" US layout\n\" or\nlet g:EasyMotion_use_smartsign_jp = 1 \" JP layout\n```\n\nThis applies the same concept, but for symbols and numerals. `1` will match `1`\nand `!`; `!` matches `!` only. Default: 0.\n\n\n### Migemo feature (for Japanese user)\n\n```vim\nlet g:EasyMotion_use_migemo = 1\n```\n\n\nEasymotion can match multibyte Japanese characters with alphabetical input.\nFor example, `\u003cLeader\u003e\u003cLeader\u003esa` can search 'あ'.\nThis feature doesn't require cmigemo because Easymotion includes regex\npatterns generated by cmigemo. However, installing `cmigemo` will make\n2-character and n-character search motions to also support the migemo feature.\nDefault:0\n\n\n### Repeat motions\n\n#### Repeat the last motion\n\n`\u003cPlug\u003e(easymotion-repeat)`\n\n#### Repeat the last find motion\n\nIn a find motion (e.g. `\u003cPlug\u003e(easymotion-s)`), type `\u003cCR\u003e` without\ninput characters to find the last motion again.\n\n#### Jump to next/previous match (even on next/previous page)\n\n* `\u003cPlug\u003e(easymotion-next)`\n* `\u003cPlug\u003e(easymotion-prev)`\n\n#### Support for dot repeat\n\nThis requires https://github.com/tpope/vim-repeat.\n\nYou can use EasyMotion with operators and press `.` to repeat!\nIt is well-behaved and consistent with the default behavior of Vim.\n\n![repeat-motion](https://f.cloud.github.com/assets/3797062/2039538/0aef66aa-89a4-11e3-8242-c27a5208cfca.gif)\n\n```vim\n\" Gif config\n\n\" Require tpope/vim-repeat to enable dot repeat support\n\" Jump to anywhere with only `s{char}{target}`\n\" `s\u003cCR\u003e` repeat last find motion.\nnmap s \u003cPlug\u003e(easymotion-s)\n\" Bidirectional \u0026 within line 't' motion\nomap t \u003cPlug\u003e(easymotion-bd-tl)\n\" Use uppercase target labels and type as a lower case\nlet g:EasyMotion_use_upper = 1\n \" type `l` and match `l`\u0026`L`\nlet g:EasyMotion_smartcase = 1\n\" Smartsign (type `3` and match `3`\u0026`#`)\nlet g:EasyMotion_use_smartsign_us = 1\n```\n\n\nInstallation\n------------\n### Pathogen (https://github.com/tpope/vim-pathogen)\n```\ngit clone https://github.com/easymotion/vim-easymotion ~/.vim/bundle/vim-easymotion\n```\n\n### Vundle (https://github.com/gmarik/vundle)\n```\nPlugin 'easymotion/vim-easymotion'\n```\n\n### NeoBundle (https://github.com/Shougo/neobundle.vim)\n```\nNeoBundle 'easymotion/vim-easymotion'\n```\n\n### Vim-Plug (https://github.com/junegunn/vim-plug)\n```\nPlug 'easymotion/vim-easymotion'\n```\n\n### Vim8 Native Plugin Manager (https://vimhelp.org/repeat.txt.html#packages)\n```\ngit clone https://github.com/easymotion/vim-easymotion.git ~/.vim/pack/plugins/start/vim-easymotion\n```\n\nMinimal Configuration Tutorial\n------------------------------\n**I recommend configuring and map keys by yourself if you are true Vimmer.**\n\n**Please do not be satisfied with just installing vim-easymotion, configuring it yourself boost your productivity more and more!**\n\nDefault `\u003cLeader\u003e\u003cLeader\u003e` prefix isn't easy to press, and I leave them just for backwards compatibility.\nYou should at least change the prefix key like this `map \u003cLeader\u003e \u003cPlug\u003e(easymotion-prefix)`\n\nMinimal but useful vimrc example:\n\n```vim\nlet g:EasyMotion_do_mapping = 0 \" Disable default mappings\n\n\" Jump to anywhere you want with minimal keystrokes, with just one key binding.\n\" `s{char}{label}`\nnmap s \u003cPlug\u003e(easymotion-overwin-f)\n\" or\n\" `s{char}{char}{label}`\n\" Need one more keystroke, but on average, it may be more comfortable.\nnmap s \u003cPlug\u003e(easymotion-overwin-f2)\n\n\" Turn on case-insensitive feature\nlet g:EasyMotion_smartcase = 1\n\n\" JK motions: Line motions\nmap \u003cLeader\u003ej \u003cPlug\u003e(easymotion-j)\nmap \u003cLeader\u003ek \u003cPlug\u003e(easymotion-k)\n```\nNow, all you need to remember is `s` and JK motions bindings, and it's good enough to boost your cursor speed!\n\n**`s`** is bidirectional find motion, you can move to anywhere with it.\n\n**`\u003cLeader\u003ej`** \u0026 **`\u003cLeader\u003ek`** make it easy to move to the lines.\n\nOf course, you can use any key you want instead of `s` such as `\u003cSpace\u003e`, `\u003cLeader\u003es`, etc...\n\nIf you want to use more useful mappings, please see [:h easymotion.txt](https://github.com/easymotion/vim-easymotion/blob/master/doc/easymotion.txt) for more detail.\n","funding_links":["https://github.com/sponsors/haya14busa"],"categories":["Vim Script","Vim script","Tools","Plugins"],"sub_categories":["Text Navigation"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feasymotion%2Fvim-easymotion","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Feasymotion%2Fvim-easymotion","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feasymotion%2Fvim-easymotion/lists"}