├── requirements.txt ├── src ├── icon.png └── readme │ ├── dark-demo.gif │ ├── Dark-Cover.png │ ├── Light-Cover.png │ └── light-demo.gif ├── plugin.json ├── .github └── workflows │ └── release.yml ├── README.md ├── main.py ├── LICENSE └── db └── commands.json /requirements.txt: -------------------------------------------------------------------------------- 1 | flowlauncher -------------------------------------------------------------------------------- /src/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoAlSeifi/Flow.Launcher.Plugin.VimCheatSheet/HEAD/src/icon.png -------------------------------------------------------------------------------- /src/readme/dark-demo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoAlSeifi/Flow.Launcher.Plugin.VimCheatSheet/HEAD/src/readme/dark-demo.gif -------------------------------------------------------------------------------- /src/readme/Dark-Cover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoAlSeifi/Flow.Launcher.Plugin.VimCheatSheet/HEAD/src/readme/Dark-Cover.png -------------------------------------------------------------------------------- /src/readme/Light-Cover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoAlSeifi/Flow.Launcher.Plugin.VimCheatSheet/HEAD/src/readme/Light-Cover.png -------------------------------------------------------------------------------- /src/readme/light-demo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/MoAlSeifi/Flow.Launcher.Plugin.VimCheatSheet/HEAD/src/readme/light-demo.gif -------------------------------------------------------------------------------- /plugin.json: -------------------------------------------------------------------------------- 1 | { 2 | "ID": "ddd30a33-c565-4dcf-9558-7bc5bb433e13", 3 | "ActionKeyword": "vm", 4 | "Name": "Vim", 5 | "Description": "Search Vim commands with Flow Launcher.", 6 | "Author": "MoAlSeifi", 7 | "Version": "0.0.2", 8 | "Language": "python", 9 | "Website": "https://github.com/MoAlSeifi", 10 | "IcoPath": "src/icon.png", 11 | "ExecuteFileName": "main.py" 12 | } -------------------------------------------------------------------------------- /.github/workflows/release.yml: -------------------------------------------------------------------------------- 1 | name: Publish Release 2 | 3 | on: 4 | push: 5 | branches: 6 | - main 7 | paths-ignore: | 8 | - '.github/workflows/*' 9 | - 'src/readme/*' 10 | - 'README.md' 11 | 12 | workflow_dispatch: 13 | 14 | jobs: 15 | publish: 16 | runs-on: ubuntu-latest 17 | env: 18 | python_ver: 3.13 19 | 20 | steps: 21 | - uses: actions/checkout@v4 22 | - name: Set up Python ${{ env.python_ver }} 23 | uses: actions/setup-python@v4 24 | with: 25 | python-version: ${{ env.python_ver }} 26 | - name: get version 27 | id: version 28 | uses: notiz-dev/github-action-json-property@release 29 | with: 30 | path: 'plugin.json' 31 | prop_path: 'Version' 32 | - run: echo ${{steps.version.outputs.prop}} 33 | - name: Install dependencies 34 | run: | 35 | python -m pip install --upgrade pip 36 | pip install -r ./requirements.txt -t ./lib 37 | zip -r Flow.Launcher.Plugin.VimCheatSheet.zip . -x '*.git*' 'src/readme/*' 38 | - name: Publish 39 | if: success() 40 | uses: softprops/action-gh-release@v1 41 | with: 42 | files: 'Flow.Launcher.Plugin.VimCheatSheet.zip' 43 | tag_name: "v${{steps.version.outputs.prop}}" 44 | env: 45 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 46 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Vim Cheat Sheat | Flow Plugin 2 | 3 | ![dark-cover](https://github.com/MoAlSeifi/Flow.Launcher.Plugin.VimCheatSheet/blob/main/src/readme/Dark-Cover.png#gh-dark-mode-only) 4 | ![light-cover](https://github.com/MoAlSeifi/Flow.Launcher.Plugin.VimCheatSheet/blob/main/src/readme/Light-Cover.png#gh-light-mode-only) 5 | 6 | This Plugin Grants you Instant access to **Vim commands** and **shortcuts** via an **interactive cheat sheet** 7 | 8 | ![dark-demo](https://github.com/MoAlSeifi/Flow.Launcher.Plugin.VimCheatSheet/blob/main/src/readme/dark-demo.gif#gh-dark-mode-only) 9 | ![light-demo](https://github.com/MoAlSeifi/Flow.Launcher.Plugin.VimCheatSheet/blob/main/src/readme/light-demo.gif#gh-light-mode-only) 10 | 11 | ⚠ this project is in its early stages and under Development (*but it gets the job done*) 12 | 13 | ## Usage 14 | 15 | | Keyword | Description | Example | 16 | | -------------- | ------------------------------------------------------------------------------ | ----------- | 17 | | ``vm {query}`` | Search for vim**commands** and **shortcuts** for a given `query` | `vm exit` | 18 | 19 | ## Features 20 | 21 | * Search for Vim Commands either by their description or their Hotkey. 22 | * By entering on each command you will be redirected to [Vim Cheat Sheet](https://vim.rtorr.com/ "rtorr website") on the same command. 23 | * ⚠ all text fragments aren't tested and aren't fully functional, please report if any of them didn't work. 24 | 25 | ## Installation 26 | 27 | ### Manual Installation 28 | 29 | * Download the [Latest Release](https://github.com/MoAlSeifi/Flow.Launcher.Plugin.VimCheatSheet/releases/latest) 30 | * Extract the zip file in `%appdata%\FlowLauncher\Plugins\` 31 | * Restart Flow Launcher (fully exit and Open) 32 | 33 | ### Flow Plugin Manager 34 | 35 | * In Flow Launcher enter this line : 36 | * `pm install VimCheatSheet` 37 | * Click OK 38 | 39 | ## Disclaimer 40 | 41 | * The database of this repository is the result of heavy A.I Assistance, so it might have mistakes; Report if you encounter any. 42 | * Any Feature requests or PR's are welcomed. 43 | * you might find this plugin as a bit incomplete, since it was designed as a personal project, but I'm working to make it more robust. 44 | 45 | ## References 46 | 47 | - Powered by [Vim Cheat Sheet](https://vim.rtorr.com/ "rtorr website") as source for [commands.json](https://github.com/MoAlSeifi/Flow.Launcher.Plugin.VimCheatSheet/blob/main/db/commands.json "commands json database") 48 | -------------------------------------------------------------------------------- /main.py: -------------------------------------------------------------------------------- 1 | import sys 2 | from pathlib import Path 3 | 4 | plugindir = Path.absolute(Path(__file__).parent) 5 | paths = (".", "lib", "plugin") 6 | sys.path = [str(plugindir / p) for p in paths] + sys.path 7 | 8 | import json 9 | from flowlauncher import FlowLauncher 10 | import webbrowser 11 | 12 | 13 | def load_vim_commands(file_path): 14 | """Load Vim commands from a JSON file.""" 15 | with open(file_path, 'r') as file: 16 | return json.load(file) 17 | 18 | vim_commands = load_vim_commands('db/commands.json') 19 | # vim_commands = load_vim_commands('commands.Not_url_encoded.json') 20 | icon_path = "src/icon.png" 21 | 22 | class VimCheatSheet(FlowLauncher): 23 | 24 | def query(self, query): 25 | # """Search for Vim commands matching the user query.""" 26 | results = [] 27 | query_lower = query.lower() # Convert query to lowercase for case-insensitive matching 28 | for command in vim_commands: 29 | if any(keyword.startswith(query_lower) or query_lower == keyword for keyword in command["keywords"]): 30 | # if any(keyword in query_lower for keyword in command["keywords"]): 31 | results.append({ 32 | "Title": f"{command['command']}", 33 | "SubTitle": f"{command['name']} | {command['description']}", 34 | "IcoPath": icon_path, 35 | # "ContextData": ["foo", "bar"], 36 | "JsonRPCAction": { 37 | "method": "open_url", 38 | "parameters": [f"https://vim.rtorr.com/#:~:text={command['rtorr_description']}"], 39 | "dontHideAfterAction": False 40 | } 41 | }) 42 | # print(results) 43 | 44 | # Fallback if no match is found 45 | if not results: 46 | results.append({ 47 | "Title": "No match found", 48 | "SubTitle": "Try searching for a different Vim command", 49 | "IcoPath": icon_path, 50 | "JsonRPCAction": { 51 | "method": "open_url", 52 | "parameters": ["https://github.com/MoAlSeifi/Flow.Launcher.Plugin.VimCheatSheet"], 53 | "dontHideAfterAction": False 54 | } 55 | }) 56 | 57 | return results 58 | 59 | # def context_menu(self, data): 60 | # return [ 61 | # { 62 | # "Title": {data["name"]}, 63 | # "SubTitle": "Press enter to open Flow the plugin's repo in GitHub", 64 | # "IcoPath": "Images/app.png", 65 | # "JsonRPCAction": { 66 | # "method": "open_url", 67 | # "parameters": ["https://github.com/Flow-Launcher/Flow.Launcher.Plugin.HelloWorldPython"] 68 | # } 69 | # } 70 | # ] 71 | 72 | 73 | def open_url(self, url): 74 | webbrowser.open(url) 75 | 76 | if __name__ == "__main__": 77 | VimCheatSheet() 78 | 79 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | GNU GENERAL PUBLIC LICENSE 2 | Version 3, 29 June 2007 3 | 4 | Copyright (C) 2007 Free Software Foundation, Inc. 5 | Everyone is permitted to copy and distribute verbatim copies 6 | of this license document, but changing it is not allowed. 7 | 8 | Preamble 9 | 10 | The GNU General Public License is a free, copyleft license for 11 | software and other kinds of works. 12 | 13 | The licenses for most software and other practical works are designed 14 | to take away your freedom to share and change the works. By contrast, 15 | the GNU General Public License is intended to guarantee your freedom to 16 | share and change all versions of a program--to make sure it remains free 17 | software for all its users. We, the Free Software Foundation, use the 18 | GNU General Public License for most of our software; it applies also to 19 | any other work released this way by its authors. You can apply it to 20 | your programs, too. 21 | 22 | When we speak of free software, we are referring to freedom, not 23 | price. Our General Public Licenses are designed to make sure that you 24 | have the freedom to distribute copies of free software (and charge for 25 | them if you wish), that you receive source code or can get it if you 26 | want it, that you can change the software or use pieces of it in new 27 | free programs, and that you know you can do these things. 28 | 29 | To protect your rights, we need to prevent others from denying you 30 | these rights or asking you to surrender the rights. Therefore, you have 31 | certain responsibilities if you distribute copies of the software, or if 32 | you modify it: responsibilities to respect the freedom of others. 33 | 34 | For example, if you distribute copies of such a program, whether 35 | gratis or for a fee, you must pass on to the recipients the same 36 | freedoms that you received. You must make sure that they, too, receive 37 | or can get the source code. And you must show them these terms so they 38 | know their rights. 39 | 40 | Developers that use the GNU GPL protect your rights with two steps: 41 | (1) assert copyright on the software, and (2) offer you this License 42 | giving you legal permission to copy, distribute and/or modify it. 43 | 44 | For the developers' and authors' protection, the GPL clearly explains 45 | that there is no warranty for this free software. For both users' and 46 | authors' sake, the GPL requires that modified versions be marked as 47 | changed, so that their problems will not be attributed erroneously to 48 | authors of previous versions. 49 | 50 | Some devices are designed to deny users access to install or run 51 | modified versions of the software inside them, although the manufacturer 52 | can do so. This is fundamentally incompatible with the aim of 53 | protecting users' freedom to change the software. The systematic 54 | pattern of such abuse occurs in the area of products for individuals to 55 | use, which is precisely where it is most unacceptable. Therefore, we 56 | have designed this version of the GPL to prohibit the practice for those 57 | products. If such problems arise substantially in other domains, we 58 | stand ready to extend this provision to those domains in future versions 59 | of the GPL, as needed to protect the freedom of users. 60 | 61 | Finally, every program is threatened constantly by software patents. 62 | States should not allow patents to restrict development and use of 63 | software on general-purpose computers, but in those that do, we wish to 64 | avoid the special danger that patents applied to a free program could 65 | make it effectively proprietary. To prevent this, the GPL assures that 66 | patents cannot be used to render the program non-free. 67 | 68 | The precise terms and conditions for copying, distribution and 69 | modification follow. 70 | 71 | TERMS AND CONDITIONS 72 | 73 | 0. Definitions. 74 | 75 | "This License" refers to version 3 of the GNU General Public License. 76 | 77 | "Copyright" also means copyright-like laws that apply to other kinds of 78 | works, such as semiconductor masks. 79 | 80 | "The Program" refers to any copyrightable work licensed under this 81 | License. Each licensee is addressed as "you". "Licensees" and 82 | "recipients" may be individuals or organizations. 83 | 84 | To "modify" a work means to copy from or adapt all or part of the work 85 | in a fashion requiring copyright permission, other than the making of an 86 | exact copy. The resulting work is called a "modified version" of the 87 | earlier work or a work "based on" the earlier work. 88 | 89 | A "covered work" means either the unmodified Program or a work based 90 | on the Program. 91 | 92 | To "propagate" a work means to do anything with it that, without 93 | permission, would make you directly or secondarily liable for 94 | infringement under applicable copyright law, except executing it on a 95 | computer or modifying a private copy. Propagation includes copying, 96 | distribution (with or without modification), making available to the 97 | public, and in some countries other activities as well. 98 | 99 | To "convey" a work means any kind of propagation that enables other 100 | parties to make or receive copies. Mere interaction with a user through 101 | a computer network, with no transfer of a copy, is not conveying. 102 | 103 | An interactive user interface displays "Appropriate Legal Notices" 104 | to the extent that it includes a convenient and prominently visible 105 | feature that (1) displays an appropriate copyright notice, and (2) 106 | tells the user that there is no warranty for the work (except to the 107 | extent that warranties are provided), that licensees may convey the 108 | work under this License, and how to view a copy of this License. If 109 | the interface presents a list of user commands or options, such as a 110 | menu, a prominent item in the list meets this criterion. 111 | 112 | 1. Source Code. 113 | 114 | The "source code" for a work means the preferred form of the work 115 | for making modifications to it. "Object code" means any non-source 116 | form of a work. 117 | 118 | A "Standard Interface" means an interface that either is an official 119 | standard defined by a recognized standards body, or, in the case of 120 | interfaces specified for a particular programming language, one that 121 | is widely used among developers working in that language. 122 | 123 | The "System Libraries" of an executable work include anything, other 124 | than the work as a whole, that (a) is included in the normal form of 125 | packaging a Major Component, but which is not part of that Major 126 | Component, and (b) serves only to enable use of the work with that 127 | Major Component, or to implement a Standard Interface for which an 128 | implementation is available to the public in source code form. A 129 | "Major Component", in this context, means a major essential component 130 | (kernel, window system, and so on) of the specific operating system 131 | (if any) on which the executable work runs, or a compiler used to 132 | produce the work, or an object code interpreter used to run it. 133 | 134 | The "Corresponding Source" for a work in object code form means all 135 | the source code needed to generate, install, and (for an executable 136 | work) run the object code and to modify the work, including scripts to 137 | control those activities. However, it does not include the work's 138 | System Libraries, or general-purpose tools or generally available free 139 | programs which are used unmodified in performing those activities but 140 | which are not part of the work. For example, Corresponding Source 141 | includes interface definition files associated with source files for 142 | the work, and the source code for shared libraries and dynamically 143 | linked subprograms that the work is specifically designed to require, 144 | such as by intimate data communication or control flow between those 145 | subprograms and other parts of the work. 146 | 147 | The Corresponding Source need not include anything that users 148 | can regenerate automatically from other parts of the Corresponding 149 | Source. 150 | 151 | The Corresponding Source for a work in source code form is that 152 | same work. 153 | 154 | 2. Basic Permissions. 155 | 156 | All rights granted under this License are granted for the term of 157 | copyright on the Program, and are irrevocable provided the stated 158 | conditions are met. This License explicitly affirms your unlimited 159 | permission to run the unmodified Program. The output from running a 160 | covered work is covered by this License only if the output, given its 161 | content, constitutes a covered work. This License acknowledges your 162 | rights of fair use or other equivalent, as provided by copyright law. 163 | 164 | You may make, run and propagate covered works that you do not 165 | convey, without conditions so long as your license otherwise remains 166 | in force. You may convey covered works to others for the sole purpose 167 | of having them make modifications exclusively for you, or provide you 168 | with facilities for running those works, provided that you comply with 169 | the terms of this License in conveying all material for which you do 170 | not control copyright. Those thus making or running the covered works 171 | for you must do so exclusively on your behalf, under your direction 172 | and control, on terms that prohibit them from making any copies of 173 | your copyrighted material outside their relationship with you. 174 | 175 | Conveying under any other circumstances is permitted solely under 176 | the conditions stated below. Sublicensing is not allowed; section 10 177 | makes it unnecessary. 178 | 179 | 3. Protecting Users' Legal Rights From Anti-Circumvention Law. 180 | 181 | No covered work shall be deemed part of an effective technological 182 | measure under any applicable law fulfilling obligations under article 183 | 11 of the WIPO copyright treaty adopted on 20 December 1996, or 184 | similar laws prohibiting or restricting circumvention of such 185 | measures. 186 | 187 | When you convey a covered work, you waive any legal power to forbid 188 | circumvention of technological measures to the extent such circumvention 189 | is effected by exercising rights under this License with respect to 190 | the covered work, and you disclaim any intention to limit operation or 191 | modification of the work as a means of enforcing, against the work's 192 | users, your or third parties' legal rights to forbid circumvention of 193 | technological measures. 194 | 195 | 4. Conveying Verbatim Copies. 196 | 197 | You may convey verbatim copies of the Program's source code as you 198 | receive it, in any medium, provided that you conspicuously and 199 | appropriately publish on each copy an appropriate copyright notice; 200 | keep intact all notices stating that this License and any 201 | non-permissive terms added in accord with section 7 apply to the code; 202 | keep intact all notices of the absence of any warranty; and give all 203 | recipients a copy of this License along with the Program. 204 | 205 | You may charge any price or no price for each copy that you convey, 206 | and you may offer support or warranty protection for a fee. 207 | 208 | 5. Conveying Modified Source Versions. 209 | 210 | You may convey a work based on the Program, or the modifications to 211 | produce it from the Program, in the form of source code under the 212 | terms of section 4, provided that you also meet all of these conditions: 213 | 214 | a) The work must carry prominent notices stating that you modified 215 | it, and giving a relevant date. 216 | 217 | b) The work must carry prominent notices stating that it is 218 | released under this License and any conditions added under section 219 | 7. This requirement modifies the requirement in section 4 to 220 | "keep intact all notices". 221 | 222 | c) You must license the entire work, as a whole, under this 223 | License to anyone who comes into possession of a copy. This 224 | License will therefore apply, along with any applicable section 7 225 | additional terms, to the whole of the work, and all its parts, 226 | regardless of how they are packaged. This License gives no 227 | permission to license the work in any other way, but it does not 228 | invalidate such permission if you have separately received it. 229 | 230 | d) If the work has interactive user interfaces, each must display 231 | Appropriate Legal Notices; however, if the Program has interactive 232 | interfaces that do not display Appropriate Legal Notices, your 233 | work need not make them do so. 234 | 235 | A compilation of a covered work with other separate and independent 236 | works, which are not by their nature extensions of the covered work, 237 | and which are not combined with it such as to form a larger program, 238 | in or on a volume of a storage or distribution medium, is called an 239 | "aggregate" if the compilation and its resulting copyright are not 240 | used to limit the access or legal rights of the compilation's users 241 | beyond what the individual works permit. Inclusion of a covered work 242 | in an aggregate does not cause this License to apply to the other 243 | parts of the aggregate. 244 | 245 | 6. Conveying Non-Source Forms. 246 | 247 | You may convey a covered work in object code form under the terms 248 | of sections 4 and 5, provided that you also convey the 249 | machine-readable Corresponding Source under the terms of this License, 250 | in one of these ways: 251 | 252 | a) Convey the object code in, or embodied in, a physical product 253 | (including a physical distribution medium), accompanied by the 254 | Corresponding Source fixed on a durable physical medium 255 | customarily used for software interchange. 256 | 257 | b) Convey the object code in, or embodied in, a physical product 258 | (including a physical distribution medium), accompanied by a 259 | written offer, valid for at least three years and valid for as 260 | long as you offer spare parts or customer support for that product 261 | model, to give anyone who possesses the object code either (1) a 262 | copy of the Corresponding Source for all the software in the 263 | product that is covered by this License, on a durable physical 264 | medium customarily used for software interchange, for a price no 265 | more than your reasonable cost of physically performing this 266 | conveying of source, or (2) access to copy the 267 | Corresponding Source from a network server at no charge. 268 | 269 | c) Convey individual copies of the object code with a copy of the 270 | written offer to provide the Corresponding Source. This 271 | alternative is allowed only occasionally and noncommercially, and 272 | only if you received the object code with such an offer, in accord 273 | with subsection 6b. 274 | 275 | d) Convey the object code by offering access from a designated 276 | place (gratis or for a charge), and offer equivalent access to the 277 | Corresponding Source in the same way through the same place at no 278 | further charge. You need not require recipients to copy the 279 | Corresponding Source along with the object code. If the place to 280 | copy the object code is a network server, the Corresponding Source 281 | may be on a different server (operated by you or a third party) 282 | that supports equivalent copying facilities, provided you maintain 283 | clear directions next to the object code saying where to find the 284 | Corresponding Source. Regardless of what server hosts the 285 | Corresponding Source, you remain obligated to ensure that it is 286 | available for as long as needed to satisfy these requirements. 287 | 288 | e) Convey the object code using peer-to-peer transmission, provided 289 | you inform other peers where the object code and Corresponding 290 | Source of the work are being offered to the general public at no 291 | charge under subsection 6d. 292 | 293 | A separable portion of the object code, whose source code is excluded 294 | from the Corresponding Source as a System Library, need not be 295 | included in conveying the object code work. 296 | 297 | A "User Product" is either (1) a "consumer product", which means any 298 | tangible personal property which is normally used for personal, family, 299 | or household purposes, or (2) anything designed or sold for incorporation 300 | into a dwelling. In determining whether a product is a consumer product, 301 | doubtful cases shall be resolved in favor of coverage. For a particular 302 | product received by a particular user, "normally used" refers to a 303 | typical or common use of that class of product, regardless of the status 304 | of the particular user or of the way in which the particular user 305 | actually uses, or expects or is expected to use, the product. A product 306 | is a consumer product regardless of whether the product has substantial 307 | commercial, industrial or non-consumer uses, unless such uses represent 308 | the only significant mode of use of the product. 309 | 310 | "Installation Information" for a User Product means any methods, 311 | procedures, authorization keys, or other information required to install 312 | and execute modified versions of a covered work in that User Product from 313 | a modified version of its Corresponding Source. The information must 314 | suffice to ensure that the continued functioning of the modified object 315 | code is in no case prevented or interfered with solely because 316 | modification has been made. 317 | 318 | If you convey an object code work under this section in, or with, or 319 | specifically for use in, a User Product, and the conveying occurs as 320 | part of a transaction in which the right of possession and use of the 321 | User Product is transferred to the recipient in perpetuity or for a 322 | fixed term (regardless of how the transaction is characterized), the 323 | Corresponding Source conveyed under this section must be accompanied 324 | by the Installation Information. But this requirement does not apply 325 | if neither you nor any third party retains the ability to install 326 | modified object code on the User Product (for example, the work has 327 | been installed in ROM). 328 | 329 | The requirement to provide Installation Information does not include a 330 | requirement to continue to provide support service, warranty, or updates 331 | for a work that has been modified or installed by the recipient, or for 332 | the User Product in which it has been modified or installed. Access to a 333 | network may be denied when the modification itself materially and 334 | adversely affects the operation of the network or violates the rules and 335 | protocols for communication across the network. 336 | 337 | Corresponding Source conveyed, and Installation Information provided, 338 | in accord with this section must be in a format that is publicly 339 | documented (and with an implementation available to the public in 340 | source code form), and must require no special password or key for 341 | unpacking, reading or copying. 342 | 343 | 7. Additional Terms. 344 | 345 | "Additional permissions" are terms that supplement the terms of this 346 | License by making exceptions from one or more of its conditions. 347 | Additional permissions that are applicable to the entire Program shall 348 | be treated as though they were included in this License, to the extent 349 | that they are valid under applicable law. If additional permissions 350 | apply only to part of the Program, that part may be used separately 351 | under those permissions, but the entire Program remains governed by 352 | this License without regard to the additional permissions. 353 | 354 | When you convey a copy of a covered work, you may at your option 355 | remove any additional permissions from that copy, or from any part of 356 | it. (Additional permissions may be written to require their own 357 | removal in certain cases when you modify the work.) You may place 358 | additional permissions on material, added by you to a covered work, 359 | for which you have or can give appropriate copyright permission. 360 | 361 | Notwithstanding any other provision of this License, for material you 362 | add to a covered work, you may (if authorized by the copyright holders of 363 | that material) supplement the terms of this License with terms: 364 | 365 | a) Disclaiming warranty or limiting liability differently from the 366 | terms of sections 15 and 16 of this License; or 367 | 368 | b) Requiring preservation of specified reasonable legal notices or 369 | author attributions in that material or in the Appropriate Legal 370 | Notices displayed by works containing it; or 371 | 372 | c) Prohibiting misrepresentation of the origin of that material, or 373 | requiring that modified versions of such material be marked in 374 | reasonable ways as different from the original version; or 375 | 376 | d) Limiting the use for publicity purposes of names of licensors or 377 | authors of the material; or 378 | 379 | e) Declining to grant rights under trademark law for use of some 380 | trade names, trademarks, or service marks; or 381 | 382 | f) Requiring indemnification of licensors and authors of that 383 | material by anyone who conveys the material (or modified versions of 384 | it) with contractual assumptions of liability to the recipient, for 385 | any liability that these contractual assumptions directly impose on 386 | those licensors and authors. 387 | 388 | All other non-permissive additional terms are considered "further 389 | restrictions" within the meaning of section 10. If the Program as you 390 | received it, or any part of it, contains a notice stating that it is 391 | governed by this License along with a term that is a further 392 | restriction, you may remove that term. If a license document contains 393 | a further restriction but permits relicensing or conveying under this 394 | License, you may add to a covered work material governed by the terms 395 | of that license document, provided that the further restriction does 396 | not survive such relicensing or conveying. 397 | 398 | If you add terms to a covered work in accord with this section, you 399 | must place, in the relevant source files, a statement of the 400 | additional terms that apply to those files, or a notice indicating 401 | where to find the applicable terms. 402 | 403 | Additional terms, permissive or non-permissive, may be stated in the 404 | form of a separately written license, or stated as exceptions; 405 | the above requirements apply either way. 406 | 407 | 8. Termination. 408 | 409 | You may not propagate or modify a covered work except as expressly 410 | provided under this License. Any attempt otherwise to propagate or 411 | modify it is void, and will automatically terminate your rights under 412 | this License (including any patent licenses granted under the third 413 | paragraph of section 11). 414 | 415 | However, if you cease all violation of this License, then your 416 | license from a particular copyright holder is reinstated (a) 417 | provisionally, unless and until the copyright holder explicitly and 418 | finally terminates your license, and (b) permanently, if the copyright 419 | holder fails to notify you of the violation by some reasonable means 420 | prior to 60 days after the cessation. 421 | 422 | Moreover, your license from a particular copyright holder is 423 | reinstated permanently if the copyright holder notifies you of the 424 | violation by some reasonable means, this is the first time you have 425 | received notice of violation of this License (for any work) from that 426 | copyright holder, and you cure the violation prior to 30 days after 427 | your receipt of the notice. 428 | 429 | Termination of your rights under this section does not terminate the 430 | licenses of parties who have received copies or rights from you under 431 | this License. If your rights have been terminated and not permanently 432 | reinstated, you do not qualify to receive new licenses for the same 433 | material under section 10. 434 | 435 | 9. Acceptance Not Required for Having Copies. 436 | 437 | You are not required to accept this License in order to receive or 438 | run a copy of the Program. Ancillary propagation of a covered work 439 | occurring solely as a consequence of using peer-to-peer transmission 440 | to receive a copy likewise does not require acceptance. However, 441 | nothing other than this License grants you permission to propagate or 442 | modify any covered work. These actions infringe copyright if you do 443 | not accept this License. Therefore, by modifying or propagating a 444 | covered work, you indicate your acceptance of this License to do so. 445 | 446 | 10. Automatic Licensing of Downstream Recipients. 447 | 448 | Each time you convey a covered work, the recipient automatically 449 | receives a license from the original licensors, to run, modify and 450 | propagate that work, subject to this License. You are not responsible 451 | for enforcing compliance by third parties with this License. 452 | 453 | An "entity transaction" is a transaction transferring control of an 454 | organization, or substantially all assets of one, or subdividing an 455 | organization, or merging organizations. If propagation of a covered 456 | work results from an entity transaction, each party to that 457 | transaction who receives a copy of the work also receives whatever 458 | licenses to the work the party's predecessor in interest had or could 459 | give under the previous paragraph, plus a right to possession of the 460 | Corresponding Source of the work from the predecessor in interest, if 461 | the predecessor has it or can get it with reasonable efforts. 462 | 463 | You may not impose any further restrictions on the exercise of the 464 | rights granted or affirmed under this License. For example, you may 465 | not impose a license fee, royalty, or other charge for exercise of 466 | rights granted under this License, and you may not initiate litigation 467 | (including a cross-claim or counterclaim in a lawsuit) alleging that 468 | any patent claim is infringed by making, using, selling, offering for 469 | sale, or importing the Program or any portion of it. 470 | 471 | 11. Patents. 472 | 473 | A "contributor" is a copyright holder who authorizes use under this 474 | License of the Program or a work on which the Program is based. The 475 | work thus licensed is called the contributor's "contributor version". 476 | 477 | A contributor's "essential patent claims" are all patent claims 478 | owned or controlled by the contributor, whether already acquired or 479 | hereafter acquired, that would be infringed by some manner, permitted 480 | by this License, of making, using, or selling its contributor version, 481 | but do not include claims that would be infringed only as a 482 | consequence of further modification of the contributor version. For 483 | purposes of this definition, "control" includes the right to grant 484 | patent sublicenses in a manner consistent with the requirements of 485 | this License. 486 | 487 | Each contributor grants you a non-exclusive, worldwide, royalty-free 488 | patent license under the contributor's essential patent claims, to 489 | make, use, sell, offer for sale, import and otherwise run, modify and 490 | propagate the contents of its contributor version. 491 | 492 | In the following three paragraphs, a "patent license" is any express 493 | agreement or commitment, however denominated, not to enforce a patent 494 | (such as an express permission to practice a patent or covenant not to 495 | sue for patent infringement). To "grant" such a patent license to a 496 | party means to make such an agreement or commitment not to enforce a 497 | patent against the party. 498 | 499 | If you convey a covered work, knowingly relying on a patent license, 500 | and the Corresponding Source of the work is not available for anyone 501 | to copy, free of charge and under the terms of this License, through a 502 | publicly available network server or other readily accessible means, 503 | then you must either (1) cause the Corresponding Source to be so 504 | available, or (2) arrange to deprive yourself of the benefit of the 505 | patent license for this particular work, or (3) arrange, in a manner 506 | consistent with the requirements of this License, to extend the patent 507 | license to downstream recipients. "Knowingly relying" means you have 508 | actual knowledge that, but for the patent license, your conveying the 509 | covered work in a country, or your recipient's use of the covered work 510 | in a country, would infringe one or more identifiable patents in that 511 | country that you have reason to believe are valid. 512 | 513 | If, pursuant to or in connection with a single transaction or 514 | arrangement, you convey, or propagate by procuring conveyance of, a 515 | covered work, and grant a patent license to some of the parties 516 | receiving the covered work authorizing them to use, propagate, modify 517 | or convey a specific copy of the covered work, then the patent license 518 | you grant is automatically extended to all recipients of the covered 519 | work and works based on it. 520 | 521 | A patent license is "discriminatory" if it does not include within 522 | the scope of its coverage, prohibits the exercise of, or is 523 | conditioned on the non-exercise of one or more of the rights that are 524 | specifically granted under this License. You may not convey a covered 525 | work if you are a party to an arrangement with a third party that is 526 | in the business of distributing software, under which you make payment 527 | to the third party based on the extent of your activity of conveying 528 | the work, and under which the third party grants, to any of the 529 | parties who would receive the covered work from you, a discriminatory 530 | patent license (a) in connection with copies of the covered work 531 | conveyed by you (or copies made from those copies), or (b) primarily 532 | for and in connection with specific products or compilations that 533 | contain the covered work, unless you entered into that arrangement, 534 | or that patent license was granted, prior to 28 March 2007. 535 | 536 | Nothing in this License shall be construed as excluding or limiting 537 | any implied license or other defenses to infringement that may 538 | otherwise be available to you under applicable patent law. 539 | 540 | 12. No Surrender of Others' Freedom. 541 | 542 | If conditions are imposed on you (whether by court order, agreement or 543 | otherwise) that contradict the conditions of this License, they do not 544 | excuse you from the conditions of this License. If you cannot convey a 545 | covered work so as to satisfy simultaneously your obligations under this 546 | License and any other pertinent obligations, then as a consequence you may 547 | not convey it at all. For example, if you agree to terms that obligate you 548 | to collect a royalty for further conveying from those to whom you convey 549 | the Program, the only way you could satisfy both those terms and this 550 | License would be to refrain entirely from conveying the Program. 551 | 552 | 13. Use with the GNU Affero General Public License. 553 | 554 | Notwithstanding any other provision of this License, you have 555 | permission to link or combine any covered work with a work licensed 556 | under version 3 of the GNU Affero General Public License into a single 557 | combined work, and to convey the resulting work. The terms of this 558 | License will continue to apply to the part which is the covered work, 559 | but the special requirements of the GNU Affero General Public License, 560 | section 13, concerning interaction through a network will apply to the 561 | combination as such. 562 | 563 | 14. Revised Versions of this License. 564 | 565 | The Free Software Foundation may publish revised and/or new versions of 566 | the GNU General Public License from time to time. Such new versions will 567 | be similar in spirit to the present version, but may differ in detail to 568 | address new problems or concerns. 569 | 570 | Each version is given a distinguishing version number. If the 571 | Program specifies that a certain numbered version of the GNU General 572 | Public License "or any later version" applies to it, you have the 573 | option of following the terms and conditions either of that numbered 574 | version or of any later version published by the Free Software 575 | Foundation. If the Program does not specify a version number of the 576 | GNU General Public License, you may choose any version ever published 577 | by the Free Software Foundation. 578 | 579 | If the Program specifies that a proxy can decide which future 580 | versions of the GNU General Public License can be used, that proxy's 581 | public statement of acceptance of a version permanently authorizes you 582 | to choose that version for the Program. 583 | 584 | Later license versions may give you additional or different 585 | permissions. However, no additional obligations are imposed on any 586 | author or copyright holder as a result of your choosing to follow a 587 | later version. 588 | 589 | 15. Disclaimer of Warranty. 590 | 591 | THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY 592 | APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT 593 | HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY 594 | OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, 595 | THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 596 | PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM 597 | IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF 598 | ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 599 | 600 | 16. Limitation of Liability. 601 | 602 | IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING 603 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS 604 | THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY 605 | GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE 606 | USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF 607 | DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD 608 | PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), 609 | EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF 610 | SUCH DAMAGES. 611 | 612 | 17. Interpretation of Sections 15 and 16. 613 | 614 | If the disclaimer of warranty and limitation of liability provided 615 | above cannot be given local legal effect according to their terms, 616 | reviewing courts shall apply local law that most closely approximates 617 | an absolute waiver of all civil liability in connection with the 618 | Program, unless a warranty or assumption of liability accompanies a 619 | copy of the Program in return for a fee. 620 | 621 | END OF TERMS AND CONDITIONS 622 | 623 | How to Apply These Terms to Your New Programs 624 | 625 | If you develop a new program, and you want it to be of the greatest 626 | possible use to the public, the best way to achieve this is to make it 627 | free software which everyone can redistribute and change under these terms. 628 | 629 | To do so, attach the following notices to the program. It is safest 630 | to attach them to the start of each source file to most effectively 631 | state the exclusion of warranty; and each file should have at least 632 | the "copyright" line and a pointer to where the full notice is found. 633 | 634 | 635 | Copyright (C) 636 | 637 | This program is free software: you can redistribute it and/or modify 638 | it under the terms of the GNU General Public License as published by 639 | the Free Software Foundation, either version 3 of the License, or 640 | (at your option) any later version. 641 | 642 | This program is distributed in the hope that it will be useful, 643 | but WITHOUT ANY WARRANTY; without even the implied warranty of 644 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 645 | GNU General Public License for more details. 646 | 647 | You should have received a copy of the GNU General Public License 648 | along with this program. If not, see . 649 | 650 | Also add information on how to contact you by electronic and paper mail. 651 | 652 | If the program does terminal interaction, make it output a short 653 | notice like this when it starts in an interactive mode: 654 | 655 | Copyright (C) 656 | This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. 657 | This is free software, and you are welcome to redistribute it 658 | under certain conditions; type `show c' for details. 659 | 660 | The hypothetical commands `show w' and `show c' should show the appropriate 661 | parts of the General Public License. Of course, your program's commands 662 | might be different; for a GUI interface, you would use an "about box". 663 | 664 | You should also get your employer (if you work as a programmer) or school, 665 | if any, to sign a "copyright disclaimer" for the program, if necessary. 666 | For more information on this, and how to apply and follow the GNU GPL, see 667 | . 668 | 669 | The GNU General Public License does not permit incorporating your program 670 | into proprietary programs. If your program is a subroutine library, you 671 | may consider it more useful to permit linking proprietary applications with 672 | the library. If this is what you want to do, use the GNU Lesser General 673 | Public License instead of this License. But first, please read 674 | . 675 | -------------------------------------------------------------------------------- /db/commands.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "name": "Open help for keyword", 4 | "keywords": [ 5 | "help", 6 | "keyword", 7 | "documentation" 8 | ], 9 | "command": ":h[elp] keyword", 10 | "description": "Opens the help page for the specified keyword in Vim.", 11 | "rtorr_description": "%3Ah%5Belp%5D%20keyword%20%2D%20open%20help%20for%20keyword" 12 | }, 13 | { 14 | "name": "Save file as", 15 | "keywords": [ 16 | "save", 17 | "file", 18 | "as" 19 | ], 20 | "command": ":sav[eas] file", 21 | "description": "Saves the current file with the specified file name.", 22 | "rtorr_description": "%3Asav%5Beas%5D%20file%20%2D%20save%20file%20as" 23 | }, 24 | { 25 | "name": "Close current pane", 26 | "keywords": [ 27 | "close", 28 | "pane", 29 | "window" 30 | ], 31 | "command": ":clo[se]", 32 | "description": "Closes the current pane in Vim.", 33 | "rtorr_description": "%3Aclo%5Bse%5D%20%2D%20close%20current%20pane" 34 | }, 35 | { 36 | "name": "Open a terminal window", 37 | "keywords": [ 38 | "terminal", 39 | "open", 40 | "window", 41 | "command line" 42 | ], 43 | "command": ":ter[minal]", 44 | "description": "Opens a terminal window within Vim.", 45 | "rtorr_description": "%3Ater%5Bminal%5D%20%2D%20open%20a%20terminal%20window" 46 | }, 47 | { 48 | "name": "Open man page for word under the cursor", 49 | "keywords": [ 50 | "man page", 51 | "help", 52 | "documentation", 53 | "cursor" 54 | ], 55 | "command": "K", 56 | "description": "Opens the man page for the word currently under the cursor.", 57 | "rtorr_description": "K%20%2D%20open%20man%20page%20for%20word%20under%20the%20cursor" 58 | }, 59 | { 60 | "name": "Move cursor left", 61 | "keywords": [ 62 | "cursor", 63 | "move", 64 | "left", 65 | "navigation" 66 | ], 67 | "command": "h", 68 | "description": "Moves the cursor one character to the left.", 69 | "rtorr_description": "h%20%2D%20move%20cursor%20left" 70 | }, 71 | { 72 | "name": "Move cursor down", 73 | "keywords": [ 74 | "cursor", 75 | "move", 76 | "down", 77 | "navigation" 78 | ], 79 | "command": "j", 80 | "description": "Moves the cursor one line down.", 81 | "rtorr_description": "j%20%2D%20move%20cursor%20down" 82 | }, 83 | { 84 | "name": "Move cursor up", 85 | "keywords": [ 86 | "cursor", 87 | "move", 88 | "up", 89 | "navigation" 90 | ], 91 | "command": "k", 92 | "description": "Moves the cursor one line up.", 93 | "rtorr_description": "k%20%2D%20move%20cursor%20up" 94 | }, 95 | { 96 | "name": "Move cursor right", 97 | "keywords": [ 98 | "cursor", 99 | "move", 100 | "right", 101 | "navigation" 102 | ], 103 | "command": "l", 104 | "description": "Moves the cursor one character to the right.", 105 | "rtorr_description": "l%20%2D%20move%20cursor%20right" 106 | }, 107 | { 108 | "name": "Move cursor down (multi-line text)", 109 | "keywords": [ 110 | "cursor", 111 | "move", 112 | "down", 113 | "navigation", 114 | "multi-line", 115 | "text" 116 | ], 117 | "command": "gj", 118 | "description": "Moves the cursor down one line, considering wrapped lines as a single line.", 119 | "rtorr_description": "gj%20%2D%20move%20cursor%20down%20%28multi-line%20text%29" 120 | }, 121 | { 122 | "name": "Move cursor up (multi-line text)", 123 | "keywords": [ 124 | "cursor", 125 | "move", 126 | "up", 127 | "navigation", 128 | "multi-line", 129 | "text" 130 | ], 131 | "command": "gk", 132 | "description": "Moves the cursor up one line, considering wrapped lines as a single line.", 133 | "rtorr_description": "gk%20%2D%20move%20cursor%20up%20%28multi-line%20text%29" 134 | }, 135 | { 136 | "name": "Move to top of screen", 137 | "keywords": [ 138 | "cursor", 139 | "move", 140 | "top", 141 | "screen", 142 | "navigation" 143 | ], 144 | "command": "H", 145 | "description": "Moves the cursor to the top of the screen.", 146 | "rtorr_description": "H%20%2D%20move%20to%20top%20of%20screen" 147 | }, 148 | { 149 | "name": "Move to middle of screen", 150 | "keywords": [ 151 | "cursor", 152 | "move", 153 | "middle", 154 | "screen", 155 | "navigation" 156 | ], 157 | "command": "M", 158 | "description": "Moves the cursor to the middle of the screen.", 159 | "rtorr_description": "M%20%2D%20move%20to%20middle%20of%20screen" 160 | }, 161 | { 162 | "name": "Move to bottom of screen", 163 | "keywords": [ 164 | "cursor", 165 | "move", 166 | "bottom", 167 | "screen", 168 | "navigation" 169 | ], 170 | "command": "L", 171 | "description": "Moves the cursor to the bottom of the screen.", 172 | "rtorr_description": "L%20%2D%20move%20to%20bottom%20of%20screen" 173 | }, 174 | { 175 | "name": "Jump forwards to the start of a word", 176 | "keywords": [ 177 | "cursor", 178 | "jump", 179 | "forward", 180 | "word", 181 | "navigation" 182 | ], 183 | "command": "w", 184 | "description": "Moves the cursor forward to the beginning of the next word.", 185 | "rtorr_description": "w%20%2D%20jump%20forwards%20to%20the%20start%20of%20a%20word" 186 | }, 187 | { 188 | "name": "Jump forwards to the start of a word (words can contain punctuation)", 189 | "keywords": [ 190 | "cursor", 191 | "jump", 192 | "forward", 193 | "word", 194 | "punctuation", 195 | "navigation" 196 | ], 197 | "command": "W", 198 | "description": "Moves the cursor forward to the beginning of the next word, considering punctuation as part of the word.", 199 | "rtorr_description": "W%20%2D%20jump%20forwards%20to%20the%20start%20of%20a%20word%20%28words%20can%20contain%20punctuation%29" 200 | }, 201 | { 202 | "name": "Jump forwards to the end of a word", 203 | "keywords": [ 204 | "cursor", 205 | "jump", 206 | "forward", 207 | "word", 208 | "navigation" 209 | ], 210 | "command": "e", 211 | "description": "Moves the cursor forward to the end of the current word.", 212 | "rtorr_description": "e%20%2D%20jump%20forwards%20to%20the%20end%20of%20a%20word" 213 | }, 214 | { 215 | "name": "Jump forwards to the end of a word (words can contain punctuation)", 216 | "keywords": [ 217 | "cursor", 218 | "jump", 219 | "forward", 220 | "word", 221 | "punctuation", 222 | "navigation" 223 | ], 224 | "command": "E", 225 | "description": "Moves the cursor forward to the end of the current word, considering punctuation as part of the word.", 226 | "rtorr_description": "E%20%2D%20jump%20forwards%20to%20the%20end%20of%20a%20word%20%28words%20can%20contain%20punctuation%29" 227 | }, 228 | { 229 | "name": "Jump backwards to the start of a word", 230 | "keywords": [ 231 | "cursor", 232 | "jump", 233 | "backwards", 234 | "word", 235 | "navigation" 236 | ], 237 | "command": "b", 238 | "description": "Moves the cursor backward to the beginning of the previous word.", 239 | "rtorr_description": "b%20%2D%20jump%20backwards%20to%20the%20start%20of%20a%20word" 240 | }, 241 | { 242 | "name": "Jump backwards to the start of a word (words can contain punctuation)", 243 | "keywords": [ 244 | "cursor", 245 | "jump", 246 | "backwards", 247 | "word", 248 | "punctuation", 249 | "navigation" 250 | ], 251 | "command": "B", 252 | "description": "Moves the cursor backward to the beginning of the previous word, considering punctuation as part of the word.", 253 | "rtorr_description": "B%20%2D%20jump%20backwards%20to%20the%20start%20of%20a%20word%20%28words%20can%20contain%20punctuation%29" 254 | }, 255 | { 256 | "name": "Jump backwards to the end of a word", 257 | "keywords": [ 258 | "cursor", 259 | "jump", 260 | "backwards", 261 | "word", 262 | "navigation" 263 | ], 264 | "command": "ge", 265 | "description": "Moves the cursor backward to the end of the previous word.", 266 | "rtorr_description": "ge%20%2D%20jump%20backwards%20to%20the%20end%20of%20a%20word" 267 | }, 268 | { 269 | "name": "Jump backwards to the end of a word (words can contain punctuation)", 270 | "keywords": [ 271 | "cursor", 272 | "jump", 273 | "backwards", 274 | "word", 275 | "punctuation", 276 | "navigation" 277 | ], 278 | "command": "gE", 279 | "description": "Moves the cursor backward to the end of the previous word, considering punctuation as part of the word.", 280 | "rtorr_description": "gE%20%2D%20jump%20backwards%20to%20the%20end%20of%20a%20word%20%28words%20can%20contain%20punctuation%29" 281 | }, 282 | { 283 | "name": "Move cursor to matching character", 284 | "keywords": [ 285 | "cursor", 286 | "move", 287 | "matching", 288 | "character", 289 | "parentheses", 290 | "brackets", 291 | "braces", 292 | "navigation" 293 | ], 294 | "command": "%", 295 | "description": "Moves the cursor to the matching character of a pair, such as parentheses, brackets, or braces. Use :h matchpairs in Vim for more information on supported pairs.", 296 | "rtorr_description": "%25%20%2D%20move%20cursor%20to%20matching%20character%20%28default%20supported%20pairs%3A%20%27%28%29%27%2C%20%27%7B%7D%27%2C%20%27%5B%5D%27%2D%20use%20%20%3Ah%20matchpairs%20%20in%20vim%20for%20more%20info%29" 297 | }, 298 | { 299 | "name": "Jump to the start of the line", 300 | "keywords": [ 301 | "cursor", 302 | "jump", 303 | "start", 304 | "line", 305 | "navigation" 306 | ], 307 | "command": "0", 308 | "description": "Moves the cursor to the very beginning of the current line.", 309 | "rtorr_description": "0%20%2D%20jump%20to%20the%20start%20of%20the%20line" 310 | }, 311 | { 312 | "name": "Jump to the first non-blank character of the line", 313 | "keywords": [ 314 | "cursor", 315 | "jump", 316 | "first", 317 | "non-blank", 318 | "character", 319 | "line", 320 | "navigation" 321 | ], 322 | "command": "^", 323 | "description": "Moves the cursor to the first non-blank character on the current line.", 324 | "rtorr_description": "%5E%20%2D%20jump%20to%20the%20first%20non-blank%20character%20of%20the%20line" 325 | }, 326 | { 327 | "name": "Jump to the end of the line", 328 | "keywords": [ 329 | "cursor", 330 | "jump", 331 | "end", 332 | "line", 333 | "navigation" 334 | ], 335 | "command": "$", 336 | "description": "Moves the cursor to the end of the current line.", 337 | "rtorr_description": "%24%20%2D%20jump%20to%20the%20end%20of%20the%20line" 338 | }, 339 | { 340 | "name": "Jump to the last non-blank character of the line", 341 | "keywords": [ 342 | "cursor", 343 | "jump", 344 | "last", 345 | "non-blank", 346 | "character", 347 | "line", 348 | "navigation" 349 | ], 350 | "command": "g_", 351 | "description": "Moves the cursor to the last non-blank character on the current line.", 352 | "rtorr_description": "g_%20%2D%20jump%20to%20the%20last%20non-blank%20character%20of%20the%20line" 353 | }, 354 | { 355 | "name": "Go to the first line of the document", 356 | "keywords": [ 357 | "cursor", 358 | "go", 359 | "first", 360 | "line", 361 | "document", 362 | "navigation" 363 | ], 364 | "command": "gg", 365 | "description": "Moves the cursor to the first line of the document.", 366 | "rtorr_description": "gg%20%2D%20go%20to%20the%20first%20line%20of%20the%20document" 367 | }, 368 | { 369 | "name": "Go to the last line of the document", 370 | "keywords": [ 371 | "cursor", 372 | "go", 373 | "last", 374 | "line", 375 | "document", 376 | "navigation" 377 | ], 378 | "command": "G", 379 | "description": "Moves the cursor to the last line of the document.", 380 | "rtorr_description": "G%20%2D%20go%20to%20the%20last%20line%20of%20the%20document" 381 | }, 382 | { 383 | "name": "Go to line 5", 384 | "keywords": [ 385 | "cursor", 386 | "go", 387 | "line", 388 | "number", 389 | "navigation" 390 | ], 391 | "command": "5gg or 5G", 392 | "description": "Moves the cursor to line number 5 in the document.", 393 | "rtorr_description": "5gg%20%20or%20%205G%20%2D%20go%20to%20line%205" 394 | }, 395 | { 396 | "name": "Move to local declaration", 397 | "keywords": [ 398 | "cursor", 399 | "move", 400 | "local", 401 | "declaration", 402 | "code", 403 | "navigation" 404 | ], 405 | "command": "gd", 406 | "description": "Moves the cursor to the local declaration of the variable under the cursor (useful for code editing).", 407 | "rtorr_description": "gd%20%2D%20move%20to%20local%20declaration" 408 | }, 409 | { 410 | "name": "Move to global declaration", 411 | "keywords": [ 412 | "cursor", 413 | "move", 414 | "global", 415 | "declaration", 416 | "code", 417 | "navigation" 418 | ], 419 | "command": "gD", 420 | "description": "Moves the cursor to the global declaration of the variable under the cursor (useful for code editing).", 421 | "rtorr_description": "gD%20%2D%20move%20to%20global%20declaration" 422 | }, 423 | { 424 | "name": "Jump to next occurrence of character x", 425 | "keywords": [ 426 | "cursor", 427 | "jump", 428 | "next", 429 | "occurrence", 430 | "character", 431 | "navigation" 432 | ], 433 | "command": "fx", 434 | "description": "Moves the cursor to the next occurrence of character 'x' on the current line.", 435 | "rtorr_description": "fx%20%2D%20jump%20to%20next%20occurrence%20of%20character%20x" 436 | }, 437 | { 438 | "name": "Jump to before next occurrence of character x", 439 | "keywords": [ 440 | "cursor", 441 | "jump", 442 | "before", 443 | "next", 444 | "occurrence", 445 | "character", 446 | "navigation" 447 | ], 448 | "command": "tx", 449 | "description": "Moves the cursor to the position before the next occurrence of character 'x' on the current line.", 450 | "rtorr_description": "tx%20%2D%20jump%20to%20before%20next%20occurrence%20of%20character%20x" 451 | }, 452 | { 453 | "name": "Jump to the previous occurrence of character x", 454 | "keywords": [ 455 | "cursor", 456 | "jump", 457 | "previous", 458 | "occurrence", 459 | "character", 460 | "navigation" 461 | ], 462 | "command": "Fx", 463 | "description": "Moves the cursor to the previous occurrence of character 'x' on the current line.", 464 | "rtorr_description": "Fx%20%2D%20jump%20to%20the%20previous%20occurrence%20of%20character%20x" 465 | }, 466 | { 467 | "name": "Jump to after previous occurrence of character x", 468 | "keywords": [ 469 | "cursor", 470 | "jump", 471 | "after", 472 | "previous", 473 | "occurrence", 474 | "character", 475 | "navigation" 476 | ], 477 | "command": "Tx", 478 | "description": "Moves the cursor to the position after the previous occurrence of character 'x' on the current line.", 479 | "rtorr_description": "Tx%20%2D%20jump%20to%20after%20previous%20occurrence%20of%20character%20x" 480 | }, 481 | { 482 | "name": "Repeat previous f, t, F or T movement", 483 | "keywords": [ 484 | "cursor", 485 | "repeat", 486 | "previous", 487 | "movement", 488 | "f", 489 | "t", 490 | "F", 491 | "T", 492 | "navigation" 493 | ], 494 | "command": ";", 495 | "description": "Repeats the previous f, t, F, or T cursor movement command in the same direction.", 496 | "rtorr_description": "%3B%20%2D%20repeat%20previous%20f%2C%20t%2C%20F%20or%20T%20movement" 497 | }, 498 | { 499 | "name": "Repeat previous f, t, F or T movement, backwards", 500 | "keywords": [ 501 | "cursor", 502 | "repeat", 503 | "previous", 504 | "movement", 505 | "backwards", 506 | "f", 507 | "t", 508 | "F", 509 | "T", 510 | "navigation" 511 | ], 512 | "command": ",", 513 | "description": "Repeats the previous f, t, F, or T cursor movement command in the opposite direction.", 514 | "rtorr_description": "%2C%20%2D%20repeat%20previous%20f%2C%20t%2C%20F%20or%20T%20movement%2C%20backwards" 515 | }, 516 | { 517 | "name": "Jump to next paragraph (or function/block, when editing code)", 518 | "keywords": [ 519 | "cursor", 520 | "jump", 521 | "next", 522 | "paragraph", 523 | "function", 524 | "block", 525 | "code", 526 | "navigation" 527 | ], 528 | "command": "}", 529 | "description": "Moves the cursor to the beginning of the next paragraph. When editing code, it moves to the next function or block.", 530 | "rtorr_description": "%7D%20%2D%20jump%20to%20next%20paragraph%20%28or%20function/block%2C%20when%20editing%20code%29" 531 | }, 532 | { 533 | "name": "Jump to previous paragraph (or function/block, when editing code)", 534 | "keywords": [ 535 | "cursor", 536 | "jump", 537 | "previous", 538 | "paragraph", 539 | "function", 540 | "block", 541 | "code", 542 | "navigation" 543 | ], 544 | "command": "{", 545 | "description": "Moves the cursor to the beginning of the previous paragraph. When editing code, it moves to the previous function or block.", 546 | "rtorr_description": "%7B%20%2D%20jump%20to%20previous%20paragraph%20%28or%20function/block%2C%20when%20editing%20code%29" 547 | }, 548 | { 549 | "name": "Center cursor on screen", 550 | "keywords": [ 551 | "cursor", 552 | "center", 553 | "screen", 554 | "navigation" 555 | ], 556 | "command": "zz", 557 | "description": "Centers the cursor vertically on the screen.", 558 | "rtorr_description": "zz%20%2D%20center%20cursor%20on%20screen" 559 | }, 560 | { 561 | "name": "Position cursor on top of the screen", 562 | "keywords": [ 563 | "cursor", 564 | "position", 565 | "top", 566 | "screen", 567 | "navigation" 568 | ], 569 | "command": "zt", 570 | "description": "Positions the cursor at the top of the screen.", 571 | "rtorr_description": "zt%20%2D%20position%20cursor%20on%20top%20of%20the%20screen" 572 | }, 573 | { 574 | "name": "Position cursor on bottom of the screen", 575 | "keywords": [ 576 | "cursor", 577 | "position", 578 | "bottom", 579 | "screen", 580 | "navigation" 581 | ], 582 | "command": "zb", 583 | "description": "Positions the cursor at the bottom of the screen.", 584 | "rtorr_description": "zb%20%2D%20position%20cursor%20on%20bottom%20of%20the%20screen" 585 | }, 586 | { 587 | "name": "Move screen down one line (without moving cursor)", 588 | "keywords": [ 589 | "screen", 590 | "move", 591 | "down", 592 | "line", 593 | "cursor", 594 | "navigation" 595 | ], 596 | "command": "Ctrl + e", 597 | "description": "Scrolls the screen down one line without moving the cursor.", 598 | "rtorr_description": "Ctrl%20%20%2B%20%20e%20%2D%20move%20screen%20down%20one%20line%20%28without%20moving%20cursor%29" 599 | }, 600 | { 601 | "name": "Move screen up one line (without moving cursor)", 602 | "keywords": [ 603 | "screen", 604 | "move", 605 | "up", 606 | "line", 607 | "cursor", 608 | "navigation" 609 | ], 610 | "command": "Ctrl + y", 611 | "description": "Scrolls the screen up one line without moving the cursor.", 612 | "rtorr_description": "Ctrl%20%20%2B%20%20y%20%2D%20move%20screen%20up%20one%20line%20%28without%20moving%20cursor%29" 613 | }, 614 | { 615 | "name": "Move screen up one page (cursor to last line)", 616 | "keywords": [ 617 | "screen", 618 | "move", 619 | "up", 620 | "page", 621 | "cursor", 622 | "last", 623 | "line", 624 | "navigation" 625 | ], 626 | "command": "Ctrl + b", 627 | "description": "Scrolls the screen up one page and moves the cursor to the last line of the new page.", 628 | "rtorr_description": "Ctrl%20%20%2B%20%20b%20%2D%20move%20screen%20up%20one%20page%20%28cursor%20to%20last%20line%29" 629 | }, 630 | { 631 | "name": "Move screen down one page (cursor to first line)", 632 | "keywords": [ 633 | "screen", 634 | "move", 635 | "down", 636 | "page", 637 | "cursor", 638 | "first", 639 | "line", 640 | "navigation" 641 | ], 642 | "command": "Ctrl + f", 643 | "description": "Scrolls the screen down one page and moves the cursor to the first line of the new page.", 644 | "rtorr_description": "Ctrl%20%20%2B%20%20f%20%2D%20move%20screen%20down%20one%20page%20%28cursor%20to%20first%20line%29" 645 | }, 646 | { 647 | "name": "Move cursor and screen down 1/2 page", 648 | "keywords": [ 649 | "cursor", 650 | "screen", 651 | "move", 652 | "down", 653 | "half", 654 | "page", 655 | "navigation" 656 | ], 657 | "command": "Ctrl + d", 658 | "description": "Scrolls the screen down half a page and moves the cursor accordingly.", 659 | "rtorr_description": "Ctrl%20%20%2B%20%20d%20%2D%20move%20cursor%20and%20screen%20down%201/2%20page" 660 | }, 661 | { 662 | "name": "Move cursor and screen up 1/2 page", 663 | "keywords": [ 664 | "cursor", 665 | "screen", 666 | "move", 667 | "up", 668 | "half", 669 | "page", 670 | "navigation" 671 | ], 672 | "command": "Ctrl + u", 673 | "description": "Scrolls the screen up half a page and moves the cursor accordingly.", 674 | "rtorr_description": "Ctrl%20%20%2B%20%20u%20%2D%20move%20cursor%20and%20screen%20up%201/2%20page" 675 | }, 676 | { 677 | "name": "Insert before the cursor", 678 | "keywords": [ 679 | "insert", 680 | "text", 681 | "before", 682 | "cursor", 683 | "editing", 684 | "mode" 685 | ], 686 | "command": "i", 687 | "description": "Enters insert mode and starts inserting text before the cursor position.", 688 | "rtorr_description": "i%20%2D%20insert%20before%20the%20cursor" 689 | }, 690 | { 691 | "name": "Insert at the beginning of the line", 692 | "keywords": [ 693 | "insert", 694 | "text", 695 | "beginning", 696 | "line", 697 | "editing", 698 | "mode" 699 | ], 700 | "command": "I", 701 | "description": "Enters insert mode and starts inserting text at the beginning of the current line.", 702 | "rtorr_description": "I%20%2D%20insert%20at%20the%20beginning%20of%20the%20line" 703 | }, 704 | { 705 | "name": "Insert (append) after the cursor", 706 | "keywords": [ 707 | "insert", 708 | "append", 709 | "text", 710 | "after", 711 | "cursor", 712 | "editing", 713 | "mode" 714 | ], 715 | "command": "a", 716 | "description": "Enters insert mode and starts inserting text after the cursor position.", 717 | "rtorr_description": "a%20%2D%20insert%20%28append%29%20after%20the%20cursor" 718 | }, 719 | { 720 | "name": "Insert (append) at the end of the line", 721 | "keywords": [ 722 | "insert", 723 | "append", 724 | "text", 725 | "end", 726 | "line", 727 | "editing", 728 | "mode" 729 | ], 730 | "command": "A", 731 | "description": "Enters insert mode and starts inserting text at the end of the current line.", 732 | "rtorr_description": "A%20%2D%20insert%20%28append%29%20at%20the%20end%20of%20the%20line" 733 | }, 734 | { 735 | "name": "Append (open) a new line below the current line", 736 | "keywords": [ 737 | "append", 738 | "open", 739 | "new", 740 | "line", 741 | "below", 742 | "current", 743 | "editing", 744 | "mode" 745 | ], 746 | "command": "o", 747 | "description": "Opens a new line below the current line and enters insert mode.", 748 | "rtorr_description": "o%20%2D%20append%20%28open%29%20a%20new%20line%20below%20the%20current%20line" 749 | }, 750 | { 751 | "name": "Append (open) a new line above the current line", 752 | "keywords": [ 753 | "append", 754 | "open", 755 | "new", 756 | "line", 757 | "above", 758 | "current", 759 | "editing", 760 | "mode" 761 | ], 762 | "command": "O", 763 | "description": "Opens a new line above the current line and enters insert mode.", 764 | "rtorr_description": "O%20%2D%20append%20%28open%29%20a%20new%20line%20above%20the%20current%20line" 765 | }, 766 | { 767 | "name": "Insert (append) at the end of the word", 768 | "keywords": [ 769 | "insert", 770 | "append", 771 | "text", 772 | "end", 773 | "word", 774 | "editing", 775 | "mode" 776 | ], 777 | "command": "ea", 778 | "description": "Moves the cursor to the end of the current word and enters insert mode.", 779 | "rtorr_description": "ea%20%2D%20insert%20%28append%29%20at%20the%20end%20of%20the%20word" 780 | }, 781 | { 782 | "name": "Delete the character before the cursor during insert mode", 783 | "keywords": [ 784 | "delete", 785 | "character", 786 | "before", 787 | "cursor", 788 | "insert", 789 | "mode", 790 | "editing" 791 | ], 792 | "command": "Ctrl + h", 793 | "description": "Deletes the character before the cursor while in insert mode.", 794 | "rtorr_description": "Ctrl%20%20%2B%20%20h%20%2D%20delete%20the%20character%20before%20the%20cursor%20during%20insert%20mode" 795 | }, 796 | { 797 | "name": "Delete word before the cursor during insert mode", 798 | "keywords": [ 799 | "delete", 800 | "word", 801 | "before", 802 | "cursor", 803 | "insert", 804 | "mode", 805 | "editing" 806 | ], 807 | "command": "Ctrl + w", 808 | "description": "Deletes the word before the cursor while in insert mode.", 809 | "rtorr_description": "Ctrl%20%20%2B%20%20w%20%2D%20delete%20word%20before%20the%20cursor%20during%20insert%20mode" 810 | }, 811 | { 812 | "name": "Add a line break at the cursor position during insert mode", 813 | "keywords": [ 814 | "line break", 815 | "cursor", 816 | "insert", 817 | "mode", 818 | "editing" 819 | ], 820 | "command": "Ctrl + j", 821 | "description": "Inserts a line break at the current cursor position while in insert mode.", 822 | "rtorr_description": "Ctrl%20%20%2B%20%20j%20%2D%20add%20a%20line%20break%20at%20the%20cursor%20position%20during%20insert%20mode" 823 | }, 824 | { 825 | "name": "Indent (move right) line one shiftwidth during insert mode", 826 | "keywords": [ 827 | "indent", 828 | "move", 829 | "right", 830 | "shiftwidth", 831 | "insert", 832 | "mode", 833 | "editing" 834 | ], 835 | "command": "Ctrl + t", 836 | "description": "Indents the current line one shiftwidth to the right while in insert mode.", 837 | "rtorr_description": "Ctrl%20%20%2B%20%20t%20%2D%20indent%20%28move%20right%29%20line%20one%20shiftwidth%20during%20insert%20mode" 838 | }, 839 | { 840 | "name": "De-indent (move left) line one shiftwidth during insert mode", 841 | "keywords": [ 842 | "de-indent", 843 | "move", 844 | "left", 845 | "shiftwidth", 846 | "insert", 847 | "mode", 848 | "editing" 849 | ], 850 | "command": "Ctrl + d", 851 | "description": "De-indents the current line one shiftwidth to the left while in insert mode.", 852 | "rtorr_description": "Ctrl%20%20%2B%20%20d%20%2D%20de-indent%20%28move%20left%29%20line%20one%20shiftwidth%20during%20insert%20mode" 853 | }, 854 | { 855 | "name": "Insert (auto-complete) next match before the cursor during insert mode", 856 | "keywords": [ 857 | "insert", 858 | "auto-complete", 859 | "next", 860 | "match", 861 | "before", 862 | "cursor", 863 | "insert", 864 | "mode", 865 | "editing" 866 | ], 867 | "command": "Ctrl + n", 868 | "description": "Inserts the next matching completion before the cursor while in insert mode.", 869 | "rtorr_description": "Ctrl%20%20%2B%20%20n%20%2D%20insert%20%28auto-complete%29%20next%20match%20before%20the%20cursor%20during%20insert%20mode" 870 | }, 871 | { 872 | "name": "Insert (auto-complete) previous match before the cursor during insert mode", 873 | "keywords": [ 874 | "insert", 875 | "auto-complete", 876 | "previous", 877 | "match", 878 | "before", 879 | "cursor", 880 | "insert", 881 | "mode", 882 | "editing" 883 | ], 884 | "command": "Ctrl + p", 885 | "description": "Inserts the previous matching completion before the cursor while in insert mode.", 886 | "rtorr_description": "Ctrl%20%20%2B%20%20p%20%2D%20insert%20%28auto-complete%29%20previous%20match%20before%20the%20cursor%20during%20insert%20mode" 887 | }, 888 | { 889 | "name": "Insert the contents of register x", 890 | "keywords": [ 891 | "insert", 892 | "register", 893 | "contents", 894 | "paste", 895 | "editing" 896 | ], 897 | "command": "Ctrl + rx", 898 | "description": "Inserts the contents of register 'x' at the cursor position.", 899 | "rtorr_description": "Ctrl%20%20%2B%20%20rx%20%2D%20insert%20the%20contents%20of%20register%20x" 900 | }, 901 | { 902 | "name": "Temporarily enter normal mode to issue one normal-mode command x.", 903 | "keywords": [ 904 | "normal", 905 | "mode", 906 | "command", 907 | "temporary", 908 | "insert", 909 | "editing" 910 | ], 911 | "command": "Ctrl + ox", 912 | "description": "Temporarily switches to normal mode from insert mode to execute a single normal mode command 'x'. After executing the command, it returns to insert mode.", 913 | "rtorr_description": "Ctrl%20%20%2B%20%20ox%20%2D%20Temporarily%20enter%20normal%20mode%20to%20issue%20one%20normal-mode%20command%20x." 914 | }, 915 | { 916 | "name": "Exit insert mode", 917 | "keywords": [ 918 | "exit", 919 | "insert", 920 | "mode", 921 | "normal", 922 | "mode", 923 | "editing" 924 | ], 925 | "command": "Esc or Ctrl + c", 926 | "description": "Exits insert mode and returns to normal mode.", 927 | "rtorr_description": "Esc%20%20or%20%20Ctrl%20%20%2B%20%20c%20%2D%20exit%20insert%20mode" 928 | }, 929 | { 930 | "name": "Replace a single character", 931 | "keywords": [ 932 | "replace", 933 | "character", 934 | "editing" 935 | ], 936 | "command": "r", 937 | "description": "Replaces the character under the cursor with the next character typed.", 938 | "rtorr_description": "r%20%2D%20replace%20a%20single%20character." 939 | }, 940 | { 941 | "name": "Replace more than one character, until ESC is pressed", 942 | "keywords": [ 943 | "replace", 944 | "multiple", 945 | "characters", 946 | "editing" 947 | ], 948 | "command": "R", 949 | "description": "Enters replace mode, allowing you to replace multiple characters until the ESC key is pressed.", 950 | "rtorr_description": "R%20%2D%20replace%20more%20than%20one%20character%2C%20until%20%20ESC%20%20is%20pressed." 951 | }, 952 | { 953 | "name": "Join line below to the current one with one space in between", 954 | "keywords": [ 955 | "join", 956 | "line", 957 | "below", 958 | "current", 959 | "space", 960 | "editing" 961 | ], 962 | "command": "J", 963 | "description": "Joins the line below the current line to the end of the current line, adding a single space in between.", 964 | "rtorr_description": "J%20%2D%20join%20line%20below%20to%20the%20current%20one%20with%20one%20space%20in%20between" 965 | }, 966 | { 967 | "name": "Join line below to the current one without space in between", 968 | "keywords": [ 969 | "join", 970 | "line", 971 | "below", 972 | "current", 973 | "no space", 974 | "editing" 975 | ], 976 | "command": "gJ", 977 | "description": "Joins the line below the current line to the end of the current line without adding any space.", 978 | "rtorr_description": "gJ%20%2D%20join%20line%20below%20to%20the%20current%20one%20without%20space%20in%20between" 979 | }, 980 | { 981 | "name": "Reflow paragraph", 982 | "keywords": [ 983 | "reflow", 984 | "paragraph", 985 | "formatting", 986 | "text", 987 | "editing" 988 | ], 989 | "command": "gwip", 990 | "description": "Reflows the current paragraph, adjusting line breaks to fit within the current window width.", 991 | "rtorr_description": "gwip%20%2D%20reflow%20paragraph" 992 | }, 993 | { 994 | "name": "Switch case up to motion", 995 | "keywords": [ 996 | "switch", 997 | "case", 998 | "uppercase", 999 | "lowercase", 1000 | "motion", 1001 | "editing" 1002 | ], 1003 | "command": "g~", 1004 | "description": "Switches the case of characters (uppercase to lowercase or vice versa) from the cursor position to the end of the specified motion.", 1005 | "rtorr_description": "g~%20%2D%20switch%20case%20up%20to%20motion" 1006 | }, 1007 | { 1008 | "name": "Change to lowercase up to motion", 1009 | "keywords": [ 1010 | "change", 1011 | "lowercase", 1012 | "motion", 1013 | "editing" 1014 | ], 1015 | "command": "gu", 1016 | "description": "Changes the characters from the cursor position to the end of the specified motion to lowercase.", 1017 | "rtorr_description": "gu%20%2D%20change%20to%20lowercase%20up%20to%20motion" 1018 | }, 1019 | { 1020 | "name": "Change to Uppercase", 1021 | "keywords": [ 1022 | "uppercase", 1023 | "gU", 1024 | "change case" 1025 | ], 1026 | "command": "gU", 1027 | "description": "Changes text to uppercase up to the specified motion.", 1028 | "rtorr_description": "change%20to%20uppercase%20up%20to%20motion" 1029 | }, 1030 | { 1031 | "name": "Change (Replace) Entire Line", 1032 | "keywords": [ 1033 | "replace line", 1034 | "change line", 1035 | "cc" 1036 | ], 1037 | "command": "cc", 1038 | "description": "Replaces the content of the entire current line.", 1039 | "rtorr_description": "change%20%28replace%29%20entire%20line" 1040 | }, 1041 | { 1042 | "name": "Change (Replace) to End of Line", 1043 | "keywords": [ 1044 | "replace to end of line", 1045 | "change to end of line", 1046 | "c$", 1047 | "C" 1048 | ], 1049 | "command": "c$ or C", 1050 | "description": "Replaces text from the cursor position to the end of the current line.", 1051 | "rtorr_description": "change%20%28replace%29%20to%20the%20end%20of%20the%20line" 1052 | }, 1053 | { 1054 | "name": "Change (Replace) Entire Word", 1055 | "keywords": [ 1056 | "replace word", 1057 | "change word", 1058 | "ciw" 1059 | ], 1060 | "command": "ciw", 1061 | "description": "Replaces the entire word under the cursor.", 1062 | "rtorr_description": "change%20%28replace%29%20entire%20word" 1063 | }, 1064 | { 1065 | "name": "Change (Replace) to End of Word", 1066 | "keywords": [ 1067 | "replace to end of word", 1068 | "change to end of word", 1069 | "cw", 1070 | "ce" 1071 | ], 1072 | "command": "cw or ce", 1073 | "description": "Replaces text from the cursor position to the end of the current word.", 1074 | "rtorr_description": "change%20%28replace%29%20to%20the%20end%20of%20the%20word" 1075 | }, 1076 | { 1077 | "name": "Delete Character and Substitute Text", 1078 | "keywords": [ 1079 | "delete and substitute", 1080 | "s", 1081 | "cl" 1082 | ], 1083 | "command": "s", 1084 | "description": "Deletes the character under the cursor and enters insert mode to allow substitution of text (same as cl).", 1085 | "rtorr_description": "delete%20character%20and%20substitute%20text%20%28same%20as%20cl%29" 1086 | }, 1087 | { 1088 | "name": "Delete Line and Substitute Text", 1089 | "keywords": [ 1090 | "delete line and substitute", 1091 | "S", 1092 | "cc" 1093 | ], 1094 | "command": "S", 1095 | "description": "Deletes the entire line and enters insert mode to allow substitution of text (same as cc).", 1096 | "rtorr_description": "delete%20line%20and%20substitute%20text%20%28same%20as%20cc%29" 1097 | }, 1098 | { 1099 | "name": "Transpose Two Letters", 1100 | "keywords": [ 1101 | "transpose", 1102 | "switch letters", 1103 | "xp" 1104 | ], 1105 | "command": "xp", 1106 | "description": "Transposes the character under the cursor with the character to its right (effectively deleting and pasting).", 1107 | "rtorr_description": "transpose%20two%20letters%20%28delete%20and%20paste%29" 1108 | }, 1109 | { 1110 | "name": "Undo", 1111 | "keywords": [ 1112 | "undo change", 1113 | "reverse change", 1114 | "u" 1115 | ], 1116 | "command": "u", 1117 | "description": "Reverses the last editing action.", 1118 | "rtorr_description": "undo" 1119 | }, 1120 | { 1121 | "name": "Restore (Undo) Last Changed Line", 1122 | "keywords": [ 1123 | "restore line", 1124 | "undo line change", 1125 | "U" 1126 | ], 1127 | "command": "U", 1128 | "description": "Restores the last changed line to its state before any modifications were made.", 1129 | "rtorr_description": "restore%20%28undo%29%20last%20changed%20line" 1130 | }, 1131 | { 1132 | "name": "Redo", 1133 | "keywords": [ 1134 | "ctrl+r", 1135 | "redo", 1136 | "repeat" 1137 | ], 1138 | "command": "Ctrl + r", 1139 | "description": "Redoes a previously undone change.", 1140 | "rtorr_description": "redo" 1141 | }, 1142 | { 1143 | "name": "Repeat Last Command", 1144 | "keywords": [ 1145 | "repeat", 1146 | "dot command", 1147 | "." 1148 | ], 1149 | "command": ".", 1150 | "description": "Repeats the last executed command.", 1151 | "rtorr_description": "repeat%20last%20command" 1152 | }, 1153 | { 1154 | "name": "Start Visual Mode", 1155 | "keywords": [ 1156 | "visual mode", 1157 | "select text", 1158 | "mark lines", 1159 | "v" 1160 | ], 1161 | "command": "v", 1162 | "description": "Starts visual mode, allowing you to select text by moving the cursor. Once text is selected, you can perform various commands on it (like yanking/copying).", 1163 | "rtorr_description": "start%20visual%20mode%2C%20mark%20lines%2C%20then%20do%20a%20command%20%28like%20y-yank%29" 1164 | }, 1165 | { 1166 | "name": "Start Linewise Visual Mode", 1167 | "keywords": [ 1168 | "linewise visual mode", 1169 | "select lines", 1170 | "V" 1171 | ], 1172 | "command": "V", 1173 | "description": "Starts linewise visual mode, which allows you to select entire lines by moving the cursor.", 1174 | "rtorr_description": "start%20linewise%20visual%20mode" 1175 | }, 1176 | { 1177 | "name": "Move to Other End of Marked Area", 1178 | "keywords": [ 1179 | "visual mode", 1180 | "switch selection ends", 1181 | "o" 1182 | ], 1183 | "command": "o", 1184 | "description": "While in visual mode, this command moves the cursor to the opposite end of the currently selected area.", 1185 | "rtorr_description": "move%20to%20other%20end%20of%20marked%20area" 1186 | }, 1187 | { 1188 | "name": "Start Visual Block Mode", 1189 | "keywords": [ 1190 | "visual block mode", 1191 | "select block", 1192 | "Ctrl+v" 1193 | ], 1194 | "command": "Ctrl + v", 1195 | "description": "Starts visual block mode, allowing you to select a rectangular block of text.", 1196 | "rtorr_description": "start%20visual%20block%20mode" 1197 | }, 1198 | { 1199 | "name": "Move to Other Corner of Block", 1200 | "keywords": [ 1201 | "visual block mode", 1202 | "move block corner", 1203 | "O" 1204 | ], 1205 | "command": "O", 1206 | "description": "While in visual block mode, this command moves the cursor to the opposite corner of the selected block.", 1207 | "rtorr_description": "move%20to%20other%20corner%20of%20block" 1208 | }, 1209 | { 1210 | "name": "Mark a Word", 1211 | "keywords": [ 1212 | "visual mode", 1213 | "select word", 1214 | "aw" 1215 | ], 1216 | "command": "aw", 1217 | "description": "In visual mode, selects the current word.", 1218 | "rtorr_description": "mark%20a%20word" 1219 | }, 1220 | { 1221 | "name": "Mark a Block with Parentheses", 1222 | "keywords": [ 1223 | "visual mode", 1224 | "select block", 1225 | "parentheses", 1226 | "ab" 1227 | ], 1228 | "command": "ab", 1229 | "description": "In visual mode, selects a block of text enclosed by parentheses ().", 1230 | "rtorr_description": "a%20block%20with%20%28%29" 1231 | }, 1232 | { 1233 | "name": "Mark a Block with Curly Braces", 1234 | "keywords": [ 1235 | "visual mode", 1236 | "select block", 1237 | "curly braces", 1238 | "aB" 1239 | ], 1240 | "command": "aB", 1241 | "description": "In visual mode, selects a block of text enclosed by curly braces {}.", 1242 | "rtorr_description": "a%20block%20with%20%7B%7D" 1243 | }, 1244 | { 1245 | "name": "Mark a Block with Angle Brackets", 1246 | "keywords": [ 1247 | "visual mode", 1248 | "select block", 1249 | "angle brackets", 1250 | "tags", 1251 | "at" 1252 | ], 1253 | "command": "at", 1254 | "description": "In visual mode, selects a block of text enclosed by angle brackets <> (often used for tags).", 1255 | "rtorr_description": "a%20block%20with%20%3C%3E%20tags" 1256 | }, 1257 | { 1258 | "name": "Select Inner Block with Parentheses", 1259 | "keywords": [ 1260 | "visual mode", 1261 | "select inner block", 1262 | "parentheses", 1263 | "ib" 1264 | ], 1265 | "command": "ib", 1266 | "description": "In visual mode, selects the text within the nearest enclosing parentheses ().", 1267 | "rtorr_description": "inner%20block%20with%20%28%29" 1268 | }, 1269 | { 1270 | "name": "Select Inner Block with Curly Braces", 1271 | "keywords": [ 1272 | "visual mode", 1273 | "select inner block", 1274 | "curly braces", 1275 | "iB" 1276 | ], 1277 | "command": "iB", 1278 | "description": "In visual mode, selects the text within the nearest enclosing curly braces {}.", 1279 | "rtorr_description": "inner%20block%20with%20%7B%7D" 1280 | }, 1281 | { 1282 | "name": "Select Inner Block with Angle Brackets", 1283 | "keywords": [ 1284 | "visual mode", 1285 | "select inner block", 1286 | "angle brackets", 1287 | "tags", 1288 | "it" 1289 | ], 1290 | "command": "it", 1291 | "description": "In visual mode, selects the text within the nearest enclosing angle brackets <> (often used for tags).", 1292 | "rtorr_description": "inner%20block%20with%20%3C%3E%20tags" 1293 | }, 1294 | { 1295 | "name": "Exit Visual Mode", 1296 | "keywords": [ 1297 | "visual mode", 1298 | "exit", 1299 | "Esc", 1300 | "Ctrl+c" 1301 | ], 1302 | "command": "Esc or Ctrl + c", 1303 | "description": "Exits visual mode.", 1304 | "rtorr_description": "exit%20visual%20mode" 1305 | }, 1306 | { 1307 | "name": "Shift Text Right", 1308 | "keywords": [ 1309 | "visual mode", 1310 | "indent", 1311 | ">" 1312 | ], 1313 | "command": ">", 1314 | "description": "In visual mode, shifts the selected text one indentation level to the right.", 1315 | "rtorr_description": "shift%20text%20right" 1316 | }, 1317 | { 1318 | "name": "Shift Text Left", 1319 | "keywords": [ 1320 | "visual mode", 1321 | "unindent", 1322 | "<" 1323 | ], 1324 | "command": "<", 1325 | "description": "In visual mode, shifts the selected text one indentation level to the left.", 1326 | "rtorr_description": "shift%20text%20left" 1327 | }, 1328 | { 1329 | "name": "Yank (Copy) Marked Text", 1330 | "keywords": [ 1331 | "visual mode", 1332 | "copy", 1333 | "yank", 1334 | "y" 1335 | ], 1336 | "command": "y", 1337 | "description": "In visual mode, copies (yanks) the selected text into the clipboard.", 1338 | "rtorr_description": "yank%20%28copy%29%20marked%20text" 1339 | }, 1340 | { 1341 | "name": "Delete Marked Text", 1342 | "keywords": [ 1343 | "visual mode", 1344 | "delete", 1345 | "d" 1346 | ], 1347 | "command": "d", 1348 | "description": "In visual mode, deletes the selected text.", 1349 | "rtorr_description": "delete%20marked%20text" 1350 | }, 1351 | { 1352 | "name": "Switch Case", 1353 | "keywords": [ 1354 | "visual mode", 1355 | "toggle case", 1356 | "~" 1357 | ], 1358 | "command": "~", 1359 | "description": "In visual mode, switches the case (uppercase/lowercase) of the selected text.", 1360 | "rtorr_description": "switch%20case" 1361 | }, 1362 | { 1363 | "name": "Change Marked Text to Lowercase", 1364 | "keywords": [ 1365 | "visual mode", 1366 | "lowercase", 1367 | "u" 1368 | ], 1369 | "command": "u", 1370 | "description": "In visual mode, changes the selected text to lowercase.", 1371 | "rtorr_description": "change%20marked%20text%20to%20lowercase" 1372 | }, 1373 | { 1374 | "name": "Change Marked Text to Uppercase", 1375 | "keywords": [ 1376 | "visual mode", 1377 | "uppercase", 1378 | "U" 1379 | ], 1380 | "command": "U", 1381 | "description": "In visual mode, changes the selected text to uppercase.", 1382 | "rtorr_description": "change%20marked%20text%20to%20uppercase" 1383 | }, 1384 | { 1385 | "name": "Show Registers Content", 1386 | "keywords": [ 1387 | "registers", 1388 | "view registers", 1389 | ":reg", 1390 | ":registers" 1391 | ], 1392 | "command": ":reg[isters]", 1393 | "description": "Displays the contents of all registers.", 1394 | "rtorr_description": "%3Areg%5Bisters%5D%20%2D%20show%20registers%20content" 1395 | }, 1396 | { 1397 | "name": "Yank into Register x", 1398 | "keywords": [ 1399 | "registers", 1400 | "yank", 1401 | "copy to register", 1402 | "\"xy" 1403 | ], 1404 | "command": "\"xy", 1405 | "description": "Copies (yanks) the selected text into the specified register x.", 1406 | "rtorr_description": "%22xy%20%2D%20yank%20into%20register%20x" 1407 | }, 1408 | { 1409 | "name": "Paste Contents of Register x", 1410 | "keywords": [ 1411 | "registers", 1412 | "paste", 1413 | "paste from register", 1414 | "\"xp" 1415 | ], 1416 | "command": "\"xp", 1417 | "description": "Pastes the contents of the specified register x.", 1418 | "rtorr_description": "%22xp%20%2D%20paste%20contents%20of%20register%20x" 1419 | }, 1420 | { 1421 | "name": "Yank into System Clipboard Register", 1422 | "keywords": [ 1423 | "clipboard", 1424 | "copy", 1425 | "yank", 1426 | "system clipboard", 1427 | "\"+y" 1428 | ], 1429 | "command": "\"+y", 1430 | "description": "Copies (yanks) the selected text into the system clipboard.", 1431 | "rtorr_description": "%22%2By%20%2D%20yank%20into%20the%20system%20clipboard%20register" 1432 | }, 1433 | { 1434 | "name": "Paste from System Clipboard Register", 1435 | "keywords": [ 1436 | "clipboard", 1437 | "paste", 1438 | "system clipboard", 1439 | "\"+p" 1440 | ], 1441 | "command": "\"+p", 1442 | "description": "Pastes the contents of the system clipboard.", 1443 | "rtorr_description": "%22%2Bp%20%2D%20paste%20from%20the%20system%20clipboard%20register" 1444 | }, 1445 | { 1446 | "name": "List of Marks", 1447 | "keywords": [ 1448 | "marks", 1449 | "view marks", 1450 | ":marks" 1451 | ], 1452 | "command": ":marks", 1453 | "description": "Displays a list of all saved marks.", 1454 | "rtorr_description": "%3Amarks%20%2D%20list%20of%20marks" 1455 | }, 1456 | { 1457 | "name": "Set Current Position for Mark A", 1458 | "keywords": [ 1459 | "marks", 1460 | "set mark", 1461 | "ma" 1462 | ], 1463 | "command": "ma", 1464 | "description": "Sets the current cursor position as mark A. You can use any letter for the mark name.", 1465 | "rtorr_description": "ma%20%2D%20set%20current%20position%20for%20mark%20A" 1466 | }, 1467 | { 1468 | "name": "Jump to Position of Mark A", 1469 | "keywords": [ 1470 | "marks", 1471 | "jump to mark", 1472 | "`a" 1473 | ], 1474 | "command": "`a", 1475 | "description": "Moves the cursor to the position marked as A.", 1476 | "rtorr_description": "%60a%20%2D%20jump%20to%20position%20of%20mark%20A" 1477 | }, 1478 | { 1479 | "name": "Yank Text to Position of Mark A", 1480 | "keywords": [ 1481 | "marks", 1482 | "yank", 1483 | "copy to mark", 1484 | "y`a" 1485 | ], 1486 | "command": "y`a", 1487 | "description": "Copies (yanks) the selected text and places it at the position marked as A.", 1488 | "rtorr_description": "y%60a%20%2D%20yank%20text%20to%20position%20of%20mark%20A" 1489 | }, 1490 | { 1491 | "name": "Go to Previous Exit Position", 1492 | "keywords": [ 1493 | "position", 1494 | "previous exit", 1495 | "`0" 1496 | ], 1497 | "command": "`0", 1498 | "description": "Moves the cursor to the position where Vim was last exited.", 1499 | "rtorr_description": "%600%20%2D%20go%20to%20the%20position%20where%20Vim%20was%20previously%20exited" 1500 | }, 1501 | { 1502 | "name": "Go to Last Edit Position", 1503 | "keywords": [ 1504 | "position", 1505 | "last edit", 1506 | "'\"" 1507 | ], 1508 | "command": "'\"", 1509 | "description": "Moves the cursor to the position when you last edited this file.", 1510 | "rtorr_description": "%27%22%20%2D%20go%20to%20the%20position%20when%20last%20editing%20this%20file" 1511 | }, 1512 | { 1513 | "name": "Go to Last Change Position", 1514 | "keywords": [ 1515 | "position", 1516 | "last change", 1517 | "`.`" 1518 | ], 1519 | "command": "`.`", 1520 | "description": "Moves the cursor to the position of the last change in this file.", 1521 | "rtorr_description": "%60.%20%2D%20go%20to%20the%20position%20of%20the%20last%20change%20in%20this%20file" 1522 | }, 1523 | { 1524 | "name": "Go to Position Before Last Jump", 1525 | "keywords": [ 1526 | "position", 1527 | "last jump", 1528 | "``" 1529 | ], 1530 | "command": "``", 1531 | "description": "Moves the cursor to the position before the last jump.", 1532 | "rtorr_description": "%60%60%20%2D%20go%20to%20the%20position%20before%20the%20last%20jump" 1533 | }, 1534 | { 1535 | "name": "List of Jumps", 1536 | "keywords": [ 1537 | "jumps", 1538 | "view jumps", 1539 | ":ju", 1540 | ":jumps" 1541 | ], 1542 | "command": ":ju[mps]", 1543 | "description": "Displays a list of all recent jumps.", 1544 | "rtorr_description": "%3Aju%5Bmps%5D%20%2D%20list%20of%20jumps" 1545 | }, 1546 | { 1547 | "name": "Go to Newer Position in Jump List", 1548 | "keywords": [ 1549 | "jumps", 1550 | "next jump", 1551 | "Ctrl+i" 1552 | ], 1553 | "command": "Ctrl + i", 1554 | "description": "Moves the cursor to the next newer position in the jump list.", 1555 | "rtorr_description": "Ctrl%20%20%2B%20%20i%20%2D%20go%20to%20newer%20position%20in%20jump%20list" 1556 | }, 1557 | { 1558 | "name": "Go to Older Position in Jump List", 1559 | "keywords": [ 1560 | "jumps", 1561 | "previous jump", 1562 | "Ctrl+o" 1563 | ], 1564 | "command": "Ctrl + o", 1565 | "description": "Moves the cursor to the next older position in the jump list.", 1566 | "rtorr_description": "Ctrl%20%20%2B%20%20o%20%2D%20go%20to%20older%20position%20in%20jump%20list" 1567 | }, 1568 | { 1569 | "name": "List of Changes", 1570 | "keywords": [ 1571 | "changes", 1572 | "view changes", 1573 | ":changes" 1574 | ], 1575 | "command": ":changes", 1576 | "description": "Displays a list of all recent changes made in the buffer.", 1577 | "rtorr_description": "%3Achanges%20%2D%20list%20of%20changes" 1578 | }, 1579 | { 1580 | "name": "Go to Newer Position in Change List", 1581 | "keywords": [ 1582 | "changes", 1583 | "next change", 1584 | "g," 1585 | ], 1586 | "command": "g,", 1587 | "description": "Moves the cursor to the next newer position in the change list.", 1588 | "rtorr_description": "g%2C%20%2D%20go%20to%20newer%20position%20in%20change%20list" 1589 | }, 1590 | { 1591 | "name": "Go to Older Position in Change List", 1592 | "keywords": [ 1593 | "changes", 1594 | "previous change", 1595 | "g;" 1596 | ], 1597 | "command": "g;", 1598 | "description": "Moves the cursor to the next older position in the change list.", 1599 | "rtorr_description": "g%3B%20%2D%20go%20to%20older%20position%20in%20change%20list" 1600 | }, 1601 | { 1602 | "name": "Jump to Tag Under Cursor", 1603 | "keywords": [ 1604 | "tags", 1605 | "jump to tag", 1606 | "Ctrl+]" 1607 | ], 1608 | "command": "Ctrl + ]", 1609 | "description": "Jumps to the definition of the tag under the cursor.", 1610 | "rtorr_description": "Ctrl%20%20%2B%20%20%5D%20%2D%20jump%20to%20the%20tag%20under%20cursor" 1611 | }, 1612 | { 1613 | "name": "Record Macro a", 1614 | "keywords": [ 1615 | "macros", 1616 | "record macro", 1617 | "qa" 1618 | ], 1619 | "command": "qa", 1620 | "description": "Starts recording a macro and saves it in register 'a'.", 1621 | "rtorr_description": "qa%20%2D%20record%20macro%20a" 1622 | }, 1623 | { 1624 | "name": "Stop Recording Macro", 1625 | "keywords": [ 1626 | "macros", 1627 | "stop recording", 1628 | "q" 1629 | ], 1630 | "command": "q", 1631 | "description": "Stops recording the current macro.", 1632 | "rtorr_description": "q%20%2D%20stop%20recording%20macro" 1633 | }, 1634 | { 1635 | "name": "Run Macro a", 1636 | "keywords": [ 1637 | "macros", 1638 | "run macro", 1639 | "@a" 1640 | ], 1641 | "command": "@a", 1642 | "description": "Executes the macro stored in register 'a'.", 1643 | "rtorr_description": "%40a%20%2D%20run%20macro%20a" 1644 | }, 1645 | { 1646 | "name": "Rerun Last Macro", 1647 | "keywords": [ 1648 | "macros", 1649 | "rerun", 1650 | "repeat macro", 1651 | "@@" 1652 | ], 1653 | "command": "@@", 1654 | "description": "Repeats the last executed macro.", 1655 | "rtorr_description": "%40%40%20%2D%20rerun%20last%20run%20macro" 1656 | }, 1657 | { 1658 | "name": "Yank (Copy) a Line", 1659 | "keywords": [ 1660 | "copy", 1661 | "yank", 1662 | "yy" 1663 | ], 1664 | "command": "yy", 1665 | "description": "Copies the current line into the default register (\").", 1666 | "rtorr_description": "yy%20%2D%20yank%20%28copy%29%20a%20line" 1667 | }, 1668 | { 1669 | "name": "Yank (Copy) 2 Lines", 1670 | "keywords": [ 1671 | "copy", 1672 | "yank", 1673 | "multiple lines", 1674 | "2yy" 1675 | ], 1676 | "command": "2yy", 1677 | "description": "Copies the current line and the next line into the default register (\").", 1678 | "rtorr_description": "2yy%20%2D%20yank%20%28copy%29%202%20lines" 1679 | }, 1680 | { 1681 | "name": "Yank (Copy) Word", 1682 | "keywords": [ 1683 | "copy", 1684 | "yank", 1685 | "word", 1686 | "yw" 1687 | ], 1688 | "command": "yw", 1689 | "description": "Copies the characters of the word from the cursor position to the start of the next word into the default register (\").", 1690 | "rtorr_description": "yw%20%2D%20yank%20%28copy%29%20the%20characters%20of%20the%20word%20from%20the%20cursor%20position%20to%20the%20start%20of%20the%20next%20word" 1691 | }, 1692 | { 1693 | "name": "Yank (Copy) Word Under Cursor", 1694 | "keywords": [ 1695 | "copy", 1696 | "yank", 1697 | "word under cursor", 1698 | "yiw" 1699 | ], 1700 | "command": "yiw", 1701 | "description": "Copies the word under the cursor into the default register (\").", 1702 | "rtorr_description": "yiw%20%2D%20yank%20%28copy%29%20word%20under%20the%20cursor" 1703 | }, 1704 | { 1705 | "name": "Yank (Copy) Word with Space", 1706 | "keywords": [ 1707 | "copy", 1708 | "yank", 1709 | "word with space", 1710 | "yaw" 1711 | ], 1712 | "command": "yaw", 1713 | "description": "Copies the word under the cursor and the space after or before it into the default register (\").", 1714 | "rtorr_description": "yaw%20%2D%20yank%20%28copy%29%20word%20under%20the%20cursor%20and%20the%20space%20after%20or%20before%20it" 1715 | }, 1716 | { 1717 | "name": "Yank (Copy) to End of Line", 1718 | "keywords": [ 1719 | "copy", 1720 | "yank", 1721 | "end of line", 1722 | "y$", 1723 | "Y" 1724 | ], 1725 | "command": "y$ or Y", 1726 | "description": "Copies the characters from the cursor position to the end of the line into the default register (\").", 1727 | "rtorr_description": "y%24%20%20or%20%20Y%20%2D%20yank%20%28copy%29%20to%20end%20of%20line" 1728 | }, 1729 | { 1730 | "name": "Put (Paste) After Cursor", 1731 | "keywords": [ 1732 | "paste", 1733 | "put", 1734 | "p" 1735 | ], 1736 | "command": "p", 1737 | "description": "Pastes the contents of the default register (\") after the cursor.", 1738 | "rtorr_description": "p%20%2D%20put%20%28paste%29%20the%20clipboard%20after%20cursor" 1739 | }, 1740 | { 1741 | "name": "Put (Paste) Before Cursor", 1742 | "keywords": [ 1743 | "paste", 1744 | "put", 1745 | "P" 1746 | ], 1747 | "command": "P", 1748 | "description": "Pastes the contents of the default register (\") before the cursor.", 1749 | "rtorr_description": "P%20%2D%20put%20%28paste%29%20before%20cursor" 1750 | }, 1751 | { 1752 | "name": "Put (Paste) After Cursor and Move", 1753 | "keywords": [ 1754 | "paste", 1755 | "put", 1756 | "move cursor", 1757 | "gp" 1758 | ], 1759 | "command": "gp", 1760 | "description": "Pastes the contents of the default register (\") after the cursor and leaves the cursor after the new text.", 1761 | "rtorr_description": "gp%20%2D%20put%20%28paste%29%20the%20clipboard%20after%20cursor%20and%20leave%20cursor%20after%20the%20new%20text" 1762 | }, 1763 | { 1764 | "name": "Put (Paste) Before Cursor and Move", 1765 | "keywords": [ 1766 | "paste", 1767 | "put", 1768 | "move cursor", 1769 | "gP" 1770 | ], 1771 | "command": "gP", 1772 | "description": "Pastes the contents of the default register (\") before the cursor and leaves the cursor after the new text.", 1773 | "rtorr_description": "gP%20%2D%20put%20%28paste%29%20before%20cursor%20and%20leave%20cursor%20after%20the%20new%20text" 1774 | }, 1775 | { 1776 | "name": "Delete (Cut) a Line", 1777 | "keywords": [ 1778 | "cut", 1779 | "delete", 1780 | "dd" 1781 | ], 1782 | "command": "dd", 1783 | "description": "Deletes the current line and places it in the default register (\").", 1784 | "rtorr_description": "dd%20%2D%20delete%20%28cut%29%20a%20line" 1785 | }, 1786 | { 1787 | "name": "Delete (Cut) 2 Lines", 1788 | "keywords": [ 1789 | "cut", 1790 | "delete", 1791 | "multiple lines", 1792 | "2dd" 1793 | ], 1794 | "command": "2dd", 1795 | "description": "Deletes the current line and the next line and places them in the default register (\").", 1796 | "rtorr_description": "2dd%20%2D%20delete%20%28cut%29%202%20lines" 1797 | }, 1798 | { 1799 | "name": "Delete (Cut) Word", 1800 | "keywords": [ 1801 | "cut", 1802 | "delete", 1803 | "word", 1804 | "dw" 1805 | ], 1806 | "command": "dw", 1807 | "description": "Deletes the characters of the word from the cursor position to the start of the next word and places them in the default register (\").", 1808 | "rtorr_description": "dw%20%2D%20delete%20%28cut%29%20the%20characters%20of%20the%20word%20from%20the%20cursor%20position%20to%20the%20start%20of%20the%20next%20word" 1809 | }, 1810 | { 1811 | "name": "Delete (Cut) Word Under Cursor", 1812 | "keywords": [ 1813 | "cut", 1814 | "delete", 1815 | "word under cursor", 1816 | "diw" 1817 | ], 1818 | "command": "diw", 1819 | "description": "Deletes the word under the cursor and places it in the default register (\").", 1820 | "rtorr_description": "diw%20%2D%20delete%20%28cut%29%20word%20under%20the%20cursor" 1821 | }, 1822 | { 1823 | "name": "Delete (Cut) Word with Space", 1824 | "keywords": [ 1825 | "cut", 1826 | "delete", 1827 | "word with space", 1828 | "daw" 1829 | ], 1830 | "command": "daw", 1831 | "description": "Deletes the word under the cursor and the space after or before it and places it in the default register (\").", 1832 | "rtorr_description": "daw%20%2D%20delete%20%28cut%29%20word%20under%20the%20cursor%20and%20the%20space%20after%20or%20before%20it" 1833 | }, 1834 | { 1835 | "name": "Delete Lines From 3 to 5", 1836 | "keywords": [ 1837 | "delete", 1838 | "multiple lines", 1839 | ":3,5d" 1840 | ], 1841 | "command": ":3,5d", 1842 | "description": "Deletes lines 3 through 5.", 1843 | "rtorr_description": "%3A3%2C5d%20%2D%20delete%20lines%20starting%20from%203%20to%205" 1844 | }, 1845 | { 1846 | "name": "Delete to End of Line", 1847 | "keywords": [ 1848 | "cut", 1849 | "delete", 1850 | "end of line", 1851 | "d$", 1852 | "D" 1853 | ], 1854 | "command": "d$ or D", 1855 | "description": "Deletes the characters from the cursor position to the end of the line and places them in the default register (\").", 1856 | "rtorr_description": "d%24%20%20or%20%20D%20%2D%20delete%20%28cut%29%20to%20the%20end%20of%20the%20line" 1857 | }, 1858 | { 1859 | "name": "Delete Character", 1860 | "keywords": [ 1861 | "cut", 1862 | "delete", 1863 | "character", 1864 | "x" 1865 | ], 1866 | "command": "x", 1867 | "description": "Deletes the character under the cursor and places it in the default register (\").", 1868 | "rtorr_description": "x%20%2D%20delete%20%28cut%29%20character" 1869 | }, 1870 | { 1871 | "name": "Indent Line", 1872 | "keywords": [ 1873 | "indent", 1874 | ">>" 1875 | ], 1876 | "command": ">>", 1877 | "description": "Indents the current line one shiftwidth to the right.", 1878 | "rtorr_description": "%3E%3E%20%2D%20indent%20%28move%20right%29%20line%20one%20shiftwidth" 1879 | }, 1880 | { 1881 | "name": "De-indent Line", 1882 | "keywords": [ 1883 | "de-indent", 1884 | "<<" 1885 | ], 1886 | "command": "<<", 1887 | "description": "De-indents the current line one shiftwidth to the left.", 1888 | "rtorr_description": "%3C%3C%20%2D%20de-indent%20%28move%20left%29%20line%20one%20shiftwidth" 1889 | }, 1890 | { 1891 | "name": "Indent Block", 1892 | "keywords": [ 1893 | "indent", 1894 | "block", 1895 | "() {}", 1896 | ">%" 1897 | ], 1898 | "command": ">%", 1899 | "description": "Indents a block enclosed by parentheses () or curly brackets {}, with the cursor positioned on the opening or closing brace.", 1900 | "rtorr_description": "%3E%25%20%2D%20indent%20a%20block%20with%20%28%29%20or%20%7B%7D%20%28cursor%20on%20brace%29" 1901 | }, 1902 | { 1903 | "name": "De-indent Block", 1904 | "keywords": [ 1905 | "de-indent", 1906 | "block", 1907 | "() {}", 1908 | "<%" 1909 | ], 1910 | "command": "<%", 1911 | "description": "De-indents a block enclosed by parentheses () or curly brackets {}, with the cursor positioned on the opening or closing brace.", 1912 | "rtorr_description": "%3C%25%20%2D%20de-indent%20a%20block%20with%20%28%29%20or%20%7B%7D%20%28cursor%20on%20brace%29" 1913 | }, 1914 | { 1915 | "name": "Indent Inner Block with ()", 1916 | "keywords": [ 1917 | "indent", 1918 | "inner block", 1919 | "()", 1920 | ">ib" 1921 | ], 1922 | "command": ">ib", 1923 | "description": "Indents the inner block enclosed by parentheses ().", 1924 | "rtorr_description": "%3Eib%20%2D%20indent%20inner%20block%20with%20%28%29" 1925 | }, 1926 | { 1927 | "name": "Indent Block with <> Tags", 1928 | "keywords": [ 1929 | "indent", 1930 | "block", 1931 | "tags", 1932 | "<>", 1933 | ">at" 1934 | ], 1935 | "command": ">at", 1936 | "description": "Indents a block enclosed by angle brackets <> (tags).", 1937 | "rtorr_description": "%3Eat%20%2D%20indent%20a%20block%20with%20%3C%3E%20tags" 1938 | }, 1939 | { 1940 | "name": "Re-indent 3 Lines", 1941 | "keywords": [ 1942 | "re-indent", 1943 | "multiple lines", 1944 | "3==" 1945 | ], 1946 | "command": "3==", 1947 | "description": "Re-indents the current line and the two lines below it.", 1948 | "rtorr_description": "3%3D%3D%20%2D%20re-indent%203%20lines" 1949 | }, 1950 | { 1951 | "name": "Re-indent Block", 1952 | "keywords": [ 1953 | "re-indent", 1954 | "block", 1955 | "() {}", 1956 | "=%" 1957 | ], 1958 | "command": "=%", 1959 | "description": "Re-indents a block enclosed by parentheses () or curly brackets {}, with the cursor positioned on the opening or closing brace.", 1960 | "rtorr_description": "%3D%25%20%2D%20re-indent%20a%20block%20with%20%28%29%20or%20%7B%7D%20%28cursor%20on%20brace%29" 1961 | }, 1962 | { 1963 | "name": "Re-indent Inner Block with {}", 1964 | "keywords": [ 1965 | "re-indent", 1966 | "inner block", 1967 | "{}", 1968 | "=iB" 1969 | ], 1970 | "command": "=iB", 1971 | "description": "Re-indents the inner block enclosed by curly brackets {}.", 1972 | "rtorr_description": "%3DiB%20%2D%20re-indent%20inner%20block%20with%20%7B%7D" 1973 | }, 1974 | { 1975 | "name": "Re-indent Entire Buffer", 1976 | "keywords": [ 1977 | "re-indent", 1978 | "entire file", 1979 | "gg=G" 1980 | ], 1981 | "command": "gg=G", 1982 | "description": "Re-indents the entire buffer (all lines in the current file).", 1983 | "rtorr_description": "gg%3DG%20%2D%20re-indent%20entire%20buffer" 1984 | }, 1985 | { 1986 | "name": "Paste and Adjust Indent", 1987 | "keywords": [ 1988 | "paste", 1989 | "adjust indent", 1990 | "]p" 1991 | ], 1992 | "command": "]p", 1993 | "description": "Pastes the contents of the default register (\") and adjusts the indentation to match the current line.", 1994 | "rtorr_description": "%5Dp%20%2D%20paste%20and%20adjust%20indent%20to%20current%20line" 1995 | }, 1996 | { 1997 | "name": "Write File", 1998 | "keywords": [ 1999 | "save", 2000 | "write", 2001 | ":w" 2002 | ], 2003 | "command": ":w", 2004 | "description": "Saves the current file without exiting Vim.", 2005 | "rtorr_description": "%3Aw%20%2D%20write%20%28save%29%20the%20file%2C%20but%20don%27t%20exit" 2006 | }, 2007 | { 2008 | "name": "Write File with Sudo", 2009 | "keywords": [ 2010 | "save", 2011 | "write", 2012 | "sudo", 2013 | ":w !sudo tee %" 2014 | ], 2015 | "command": ":w !sudo tee %", 2016 | "description": "Saves the current file using sudo (superuser privileges). This is useful when you don't have write permissions to the file.", 2017 | "rtorr_description": "%3Aw%20%21sudo%20tee%20%25%20%2D%20write%20out%20the%20current%20file%20using%20sudo" 2018 | }, 2019 | { 2020 | "name": "Write and Quit", 2021 | "keywords": [ 2022 | "save", 2023 | "write", 2024 | "quit", 2025 | "exit", 2026 | ":wq", 2027 | ":x", 2028 | "ZZ" 2029 | ], 2030 | "command": ":wq or :x or ZZ", 2031 | "description": "Saves the current file and exits Vim.", 2032 | "rtorr_description": "%3Awq%20%20or%20%20%3Ax%20%20or%20%20ZZ%20%2D%20write%20%28save%29%20and%20quit" 2033 | }, 2034 | { 2035 | "name": "Quit", 2036 | "keywords": [ 2037 | "quit", 2038 | "exit", 2039 | ":q" 2040 | ], 2041 | "command": ":q", 2042 | "description": "Exits Vim. Fails if there are unsaved changes.", 2043 | "rtorr_description": "%3Aq%20%2D%20quit%20%28fails%20if%20there%20are%20unsaved%20changes%29" 2044 | }, 2045 | { 2046 | "name": "Force Quit", 2047 | "keywords": [ 2048 | "quit", 2049 | "exit", 2050 | "force", 2051 | "discard changes", 2052 | ":q!", 2053 | "ZQ" 2054 | ], 2055 | "command": ":q! or ZQ", 2056 | "description": "Exits Vim and discards any unsaved changes.", 2057 | "rtorr_description": "%3Aq%21%20%20or%20%20ZQ%20%2D%20quit%20and%20throw%20away%20unsaved%20changes" 2058 | }, 2059 | { 2060 | "name": "Write and Quit All Tabs", 2061 | "keywords": [ 2062 | "save", 2063 | "write", 2064 | "quit", 2065 | "exit", 2066 | "all tabs", 2067 | ":wqa" 2068 | ], 2069 | "command": ":wqa", 2070 | "description": "Saves all open files and exits Vim.", 2071 | "rtorr_description": "%3Awqa%20%2D%20write%20%28save%29%20and%20quit%20on%20all%20tabs" 2072 | }, 2073 | { 2074 | "name": "Search for Pattern", 2075 | "keywords": [ 2076 | "search", 2077 | "pattern", 2078 | "/" 2079 | ], 2080 | "command": "/pattern", 2081 | "description": "Searches forward for the specified pattern.", 2082 | "rtorr_description": "/pattern%20%2D%20search%20for%20pattern" 2083 | }, 2084 | { 2085 | "name": "Search Backward for Pattern", 2086 | "keywords": [ 2087 | "search", 2088 | "backward", 2089 | "pattern", 2090 | "?" 2091 | ], 2092 | "command": "?pattern", 2093 | "description": "Searches backward for the specified pattern.", 2094 | "rtorr_description": "%3Fpattern%20%2D%20search%20backward%20for%20pattern" 2095 | }, 2096 | { 2097 | "name": "Very Magic Search", 2098 | "keywords": [ 2099 | "search", 2100 | "very magic", 2101 | "regex", 2102 | "\\v" 2103 | ], 2104 | "command": "\\vpattern", 2105 | "description": "Searches for the specified pattern using 'very magic' mode, where non-alphanumeric characters are interpreted as special regex symbols without escaping.", 2106 | "rtorr_description": "%5Cvpattern%20%2D%20%27very%20magic%27%20pattern%3A%20non-alphanumeric%20characters%20are%20interpreted%20as%20special%20regex%20symbols%20%28no%20escaping%20needed%29" 2107 | }, 2108 | { 2109 | "name": "Repeat Search Forward", 2110 | "keywords": [ 2111 | "search", 2112 | "repeat", 2113 | "forward", 2114 | "n" 2115 | ], 2116 | "command": "n", 2117 | "description": "Repeats the last search in the same direction (forward).", 2118 | "rtorr_description": "n%20%2D%20repeat%20search%20in%20same%20direction" 2119 | }, 2120 | { 2121 | "name": "Repeat Search Backward", 2122 | "keywords": [ 2123 | "search", 2124 | "repeat", 2125 | "backward", 2126 | "N" 2127 | ], 2128 | "command": "N", 2129 | "description": "Repeats the last search in the opposite direction (backward).", 2130 | "rtorr_description": "N%20%2D%20repeat%20search%20in%20opposite%20direction" 2131 | }, 2132 | { 2133 | "name": "Global Replace", 2134 | "keywords": [ 2135 | "replace", 2136 | "global", 2137 | "all", 2138 | ":%s/old/new/g" 2139 | ], 2140 | "command": ":%s/old/new/g", 2141 | "description": "Replaces all occurrences of 'old' with 'new' throughout the entire file.", 2142 | "rtorr_description": "%3A%25s/old/new/g%20%2D%20replace%20all%20old%20with%20new%20throughout%20file" 2143 | }, 2144 | { 2145 | "name": "Global Replace with Confirmation", 2146 | "keywords": [ 2147 | "replace", 2148 | "global", 2149 | "all", 2150 | "confirmation", 2151 | ":%s/old/new/gc" 2152 | ], 2153 | "command": ":%s/old/new/gc", 2154 | "description": "Replaces all occurrences of 'old' with 'new' throughout the entire file, prompting for confirmation before each replacement.", 2155 | "rtorr_description": "%3A%25s/old/new/gc%20%2D%20replace%20all%20old%20with%20new%20throughout%20file%20with%20confirmations" 2156 | }, 2157 | { 2158 | "name": "Remove Search Highlighting", 2159 | "keywords": [ 2160 | "search", 2161 | "highlighting", 2162 | "remove", 2163 | ":noh", 2164 | ":nohlsearch" 2165 | ], 2166 | "command": ":noh[lsearch]", 2167 | "description": "Removes the highlighting of search matches.", 2168 | "rtorr_description": "%3Anoh%5Blsearch%5D%20%2D%20remove%20highlighting%20of%20search%20matches" 2169 | }, 2170 | { 2171 | "name": "vim[grep]", 2172 | "keywords": [ 2173 | "search multiple files", 2174 | "grep", 2175 | "find in files", 2176 | "vimgrep" 2177 | ], 2178 | "command": ":vim[grep] /pattern/ {`{file}`}", 2179 | "description": "Searches for a given pattern in multiple files.", 2180 | "rtorr_description": "%3Avim%5Bgrep%5D%20/pattern/%20%7B%60%7Bfile%7D%60%7D%20%2D%20search%20for%20pattern%20in%20multiple%20files%20%0Ae.g.%20%20%3Avim%5Bgrep%5D%20/foo/%20%2A%2A/%2A" 2181 | }, 2182 | { 2183 | "name": "cn[ext]", 2184 | "keywords": [ 2185 | "next match", 2186 | "search navigation", 2187 | "cn", 2188 | "cnext" 2189 | ], 2190 | "command": ":cn[ext]", 2191 | "description": "Jumps to the next match from a previous search.", 2192 | "rtorr_description": "%3Acn%5Bext%5D%20%2D%20jump%20to%20the%20next%20match" 2193 | }, 2194 | { 2195 | "name": "cp[revious]", 2196 | "keywords": [ 2197 | "previous match", 2198 | "search navigation", 2199 | "cp", 2200 | "cprevious" 2201 | ], 2202 | "command": ":cp[revious]", 2203 | "description": "Jumps to the previous match from a previous search.", 2204 | "rtorr_description": "%3Acp%5Brevious%5D%20%2D%20jump%20to%20the%20previous%20match" 2205 | }, 2206 | { 2207 | "name": "cope[n]", 2208 | "keywords": [ 2209 | "open matches list", 2210 | "quickfix", 2211 | "search results", 2212 | "cope", 2213 | "copen" 2214 | ], 2215 | "command": ":cope[n]", 2216 | "description": "Opens a window that displays a list of matches from the previous search.", 2217 | "rtorr_description": "%3Acope%5Bn%5D%20%2D%20open%20a%20window%20containing%20the%20list%20of%20matches" 2218 | }, 2219 | { 2220 | "name": "ccl[ose]", 2221 | "keywords": [ 2222 | "close quickfix", 2223 | "close matches list", 2224 | "ccl", 2225 | "cclose" 2226 | ], 2227 | "command": ":ccl[ose]", 2228 | "description": "Closes the quickfix window, which contains the list of search results.", 2229 | "rtorr_description": "%3Accl%5Bose%5D%20%2D%20close%20the%20quickfix%20window" 2230 | }, 2231 | { 2232 | "name": "tabnew", 2233 | "keywords": [ 2234 | "new tab", 2235 | "open file in tab", 2236 | "tabnew" 2237 | ], 2238 | "command": ":tabnew or :tabnew {page.words.file}", 2239 | "description": "Opens a new tab, optionally with a specified file.", 2240 | "rtorr_description": "%3Atabnew%20%20or%20%20%3Atabnew%20%7Bpage.words.file%7D%20%2D%20open%20a%20file%20in%20a%20new%20tab" 2241 | }, 2242 | { 2243 | "name": "Move Split to Tab", 2244 | "keywords": [ 2245 | "move split to tab", 2246 | "split window", 2247 | "new tab from split", 2248 | "ctrl+wt" 2249 | ], 2250 | "command": "Ctrl + wT", 2251 | "description": "Moves the currently active split window into its own new tab.", 2252 | "rtorr_description": "Ctrl%20%20%2B%20%20wT%20%2D%20move%20the%20current%20split%20window%20into%20its%20own%20tab" 2253 | }, 2254 | { 2255 | "name": "gt / :tabn[ext]", 2256 | "keywords": [ 2257 | "next tab", 2258 | "tab navigation", 2259 | "gt", 2260 | "tabnext" 2261 | ], 2262 | "command": "gt or :tabn[ext]", 2263 | "description": "Navigates to the next tab.", 2264 | "rtorr_description": "gt%20%20or%20%20%3Atabn%5Bext%5D%20%2D%20move%20to%20the%20next%20tab" 2265 | }, 2266 | { 2267 | "name": "gT / :tabp[revious]", 2268 | "keywords": [ 2269 | "previous tab", 2270 | "tab navigation", 2271 | "gt", 2272 | "tabprevious" 2273 | ], 2274 | "command": "gT or :tabp[revious]", 2275 | "description": "Navigates to the previous tab.", 2276 | "rtorr_description": "gT%20%20or%20%20%3Atabp%5Brevious%5D%20%2D%20move%20to%20the%20previous%20tab" 2277 | }, 2278 | { 2279 | "name": "Go to Tab Number", 2280 | "keywords": [ 2281 | "go to tab number", 2282 | "tab navigation", 2283 | "specific tab" 2284 | ], 2285 | "command": "#gt", 2286 | "description": "Moves to the tab specified by the number #.", 2287 | "rtorr_description": "%23gt%20%2D%20move%20to%20tab%20number%20%23" 2288 | }, 2289 | { 2290 | "name": ":tabm[ove]", 2291 | "keywords": [ 2292 | "move tab", 2293 | "reorder tabs", 2294 | "tabm", 2295 | "tabmove" 2296 | ], 2297 | "command": ":tabm[ove] #", 2298 | "description": "Moves the current tab to the position specified by the number # (indexed from 0).", 2299 | "rtorr_description": "%3Atabm%5Bove%5D%20%23%20%2D%20move%20current%20tab%20to%20the%20%23th%20position%20%28indexed%20from%200%29" 2300 | }, 2301 | { 2302 | "name": ":tabc[lose]", 2303 | "keywords": [ 2304 | "close tab", 2305 | "close current tab", 2306 | "tabc", 2307 | "tabclose" 2308 | ], 2309 | "command": ":tabc[lose]", 2310 | "description": "Closes the current tab and all its associated windows.", 2311 | "rtorr_description": "%3Atabc%5Blose%5D%20%2D%20close%20the%20current%20tab%20and%20all%20its%20windows" 2312 | }, 2313 | { 2314 | "name": ":tabo[nly]", 2315 | "keywords": [ 2316 | "close other tabs", 2317 | "keep current tab", 2318 | "tabo", 2319 | "tabonly" 2320 | ], 2321 | "command": ":tabo[nly]", 2322 | "description": "Closes all tabs except the currently active tab.", 2323 | "rtorr_description": "%3Atabo%5Bnly%5D%20%2D%20close%20all%20tabs%20except%20for%20the%20current%20one" 2324 | }, 2325 | { 2326 | "name": ":tabdo", 2327 | "keywords": [ 2328 | "execute command on all tabs", 2329 | "tabdo", 2330 | "multiple tabs" 2331 | ], 2332 | "command": ":tabdo command", 2333 | "description": "Runs the specified command on all open tabs.", 2334 | "rtorr_description": "%3Atabdo%20%20command%2D%20run%20the%20%20command%20%20on%20all%20tabs%20%28e.g.%20%20%3Atabdo%20q%20%2D%20closes%20all%20opened%20tabs%29" 2335 | }, 2336 | { 2337 | "name": ":e[dit]", 2338 | "keywords": [ 2339 | "edit file", 2340 | "open file in buffer", 2341 | "e", 2342 | "edit" 2343 | ], 2344 | "command": ":e[dit] file", 2345 | "description": "Opens a specified file for editing in a new buffer.", 2346 | "rtorr_description": "%3Ae%5Bdit%5D%20file%20%2D%20edit%20a%20file%20in%20a%20new%20buffer" 2347 | }, 2348 | { 2349 | "name": ":bn[ext]", 2350 | "keywords": [ 2351 | "next buffer", 2352 | "buffer navigation", 2353 | "bn", 2354 | "bnext" 2355 | ], 2356 | "command": ":bn[ext]", 2357 | "description": "Switches to the next buffer.", 2358 | "rtorr_description": "%3Abn%5Bext%5D%20%2D%20go%20to%20the%20next%20buffer" 2359 | }, 2360 | { 2361 | "name": ":bp[revious]", 2362 | "keywords": [ 2363 | "previous buffer", 2364 | "buffer navigation", 2365 | "bp", 2366 | "bprevious" 2367 | ], 2368 | "command": ":bp[revious]", 2369 | "description": "Switches to the previous buffer.", 2370 | "rtorr_description": "%3Abp%5Brevious%5D%20%2D%20go%20to%20the%20previous%20buffer" 2371 | }, 2372 | { 2373 | "name": ":bd[elete]", 2374 | "keywords": [ 2375 | "delete buffer", 2376 | "close file", 2377 | "bd", 2378 | "bdelete" 2379 | ], 2380 | "command": ":bd[elete]", 2381 | "description": "Deletes a specified buffer, which effectively closes the associated file.", 2382 | "rtorr_description": "%3Abd%5Belete%5D%20%2D%20delete%20a%20buffer%20%28close%20a%20file%29" 2383 | }, 2384 | { 2385 | "name": ":b[uffer] #", 2386 | "keywords": [ 2387 | "go to buffer by index", 2388 | "buffer number", 2389 | "buffer navigation" 2390 | ], 2391 | "command": ":b[uffer]#", 2392 | "description": "Switches to the buffer identified by its index number.", 2393 | "rtorr_description": "%3Ab%5Buffer%5D%23%20%2D%20go%20to%20a%20buffer%20by%20index%20%23" 2394 | }, 2395 | { 2396 | "name": ":b[uffer] file", 2397 | "keywords": [ 2398 | "go to buffer by file", 2399 | "buffer name", 2400 | "buffer navigation" 2401 | ], 2402 | "command": ":b[uffer] file", 2403 | "description": "Switches to the buffer associated with the specified file name.", 2404 | "rtorr_description": "%3Ab%5Buffer%5D%20file%20%2D%20go%20to%20a%20buffer%20by%20file" 2405 | }, 2406 | { 2407 | "name": ":ls / :buffers", 2408 | "keywords": [ 2409 | "list buffers", 2410 | "open buffers", 2411 | "ls", 2412 | "buffers" 2413 | ], 2414 | "command": ":ls or :buffers", 2415 | "description": "Displays a list of all currently open buffers.", 2416 | "rtorr_description": "%3Als%20%20or%20%20%3Abuffers%20%2D%20list%20all%20open%20buffers" 2417 | }, 2418 | { 2419 | "name": ":sp[lit]", 2420 | "keywords": [ 2421 | "split window", 2422 | "open file in split", 2423 | "sp", 2424 | "split" 2425 | ], 2426 | "command": ":sp[lit] file", 2427 | "description": "Opens a specified file in a new buffer and splits the window horizontally to display it.", 2428 | "rtorr_description": "%3Asp%5Blit%5D%20file%20%2D%20open%20a%20file%20in%20a%20new%20buffer%20and%20split%20window" 2429 | }, 2430 | { 2431 | "name": ":vs[plit]", 2432 | "keywords": [ 2433 | "vertical split", 2434 | "open file in vertical split", 2435 | "vs", 2436 | "vsplit" 2437 | ], 2438 | "command": ":vs[plit] file", 2439 | "description": "Opens a specified file in a new buffer and splits the window vertically to display it.", 2440 | "rtorr_description": "%3Avs%5Bplit%5D%20file%20%2D%20open%20a%20file%20in%20a%20new%20buffer%20and%20vertically%20split%20window" 2441 | }, 2442 | { 2443 | "name": ":vert[ical] ba[ll]", 2444 | "keywords": [ 2445 | "vertical windows", 2446 | "all buffers vertical", 2447 | "vert ball", 2448 | "vertical ball" 2449 | ], 2450 | "command": ":vert[ical] ba[ll]", 2451 | "description": "Arranges all open buffers as vertical windows.", 2452 | "rtorr_description": "%3Avert%5Bical%5D%20ba%5Bll%5D%20%2D%20edit%20all%20buffers%20as%20vertical%20windows" 2453 | }, 2454 | { 2455 | "name": ":tab ba[ll]", 2456 | "keywords": [ 2457 | "all buffers as tabs", 2458 | "tab ball" 2459 | ], 2460 | "command": ":tab ba[ll]", 2461 | "description": "Opens all open buffers in separate tabs.", 2462 | "rtorr_description": "%3Atab%20ba%5Bll%5D%20%2D%20edit%20all%20buffers%20as%20tabs" 2463 | }, 2464 | { 2465 | "name": "Split Window", 2466 | "keywords": [ 2467 | "split window", 2468 | "horizontal split", 2469 | "ctrl+ws" 2470 | ], 2471 | "command": "Ctrl + ws", 2472 | "description": "Splits the current window horizontally, creating a new split.", 2473 | "rtorr_description": "Ctrl%20%20%2B%20%20ws%20%2D%20split%20window" 2474 | }, 2475 | { 2476 | "name": "Split Window Vertically", 2477 | "keywords": [ 2478 | "vertical split", 2479 | "split window vertically", 2480 | "ctrl+wv" 2481 | ], 2482 | "command": "Ctrl + wv", 2483 | "description": "Splits the current window vertically, creating a new split.", 2484 | "rtorr_description": "Ctrl%20%20%2B%20%20wv%20%2D%20split%20window%20vertically" 2485 | }, 2486 | { 2487 | "name": "Switch Windows", 2488 | "keywords": [ 2489 | "switch windows", 2490 | "navigate splits", 2491 | "ctrl+ww" 2492 | ], 2493 | "command": "Ctrl + ww", 2494 | "description": "Switches the focus to the next window within the current split arrangement.", 2495 | "rtorr_description": "Ctrl%20%20%2B%20%20ww%20%2D%20switch%20windows" 2496 | }, 2497 | { 2498 | "name": "Quit Window", 2499 | "keywords": [ 2500 | "close window", 2501 | "quit split", 2502 | "ctrl+wq" 2503 | ], 2504 | "command": "Ctrl + wq", 2505 | "description": "Closes the currently active window within a split arrangement.", 2506 | "rtorr_description": "Ctrl%20%20%2B%20%20wq%20%2D%20quit%20a%20window" 2507 | }, 2508 | { 2509 | "name": "Exchange Windows", 2510 | "keywords": [ 2511 | "exchange windows", 2512 | "swap splits", 2513 | "ctrl+wx" 2514 | ], 2515 | "command": "Ctrl + wx", 2516 | "description": "Exchanges the position of the current window with the next one in the split arrangement.", 2517 | "rtorr_description": "Ctrl%20%20%2B%20%20wx%20%2D%20exchange%20current%20window%20with%20next%20one" 2518 | }, 2519 | { 2520 | "name": "Equalize Window Sizes", 2521 | "keywords": [ 2522 | "equalize window sizes", 2523 | "resize windows", 2524 | "ctrl+w=" 2525 | ], 2526 | "command": "Ctrl + w=", 2527 | "description": "Resizes all windows in the current split arrangement to have equal height and width.", 2528 | "rtorr_description": "Ctrl%20%20%2B%20%20w%3D%20%2D%20make%20all%20windows%20equal%20height%20%26%20width" 2529 | }, 2530 | { 2531 | "name": "Move to Left Window", 2532 | "keywords": [ 2533 | "move to left window", 2534 | "vertical split navigation", 2535 | "ctrl+wh" 2536 | ], 2537 | "command": "Ctrl + wh", 2538 | "description": "Moves the cursor to the window located to the left in a vertical split arrangement.", 2539 | "rtorr_description": "Ctrl%20%20%2B%20%20wh%20%2D%20move%20cursor%20to%20the%20left%20window%20%28vertical%20split%29" 2540 | }, 2541 | { 2542 | "name": "Move to Right Window", 2543 | "keywords": [ 2544 | "move to right window", 2545 | "vertical split navigation", 2546 | "ctrl+wl" 2547 | ], 2548 | "command": "Ctrl + wl", 2549 | "description": "Moves the cursor to the window located to the right in a vertical split arrangement.", 2550 | "rtorr_description": "Ctrl%20%20%2B%20%20wl%20%2D%20move%20cursor%20to%20the%20right%20window%20%28vertical%20split%29" 2551 | }, 2552 | { 2553 | "name": "Move to Window Below", 2554 | "keywords": [ 2555 | "move to window below", 2556 | "horizontal split navigation", 2557 | "ctrl+wj" 2558 | ], 2559 | "command": "Ctrl + wj", 2560 | "description": "Moves the cursor to the window located below in a horizontal split arrangement.", 2561 | "rtorr_description": "Ctrl%20%20%2B%20%20wj%20%2D%20move%20cursor%20to%20the%20window%20below%20%28horizontal%20split%29" 2562 | }, 2563 | { 2564 | "name": "Move to Window Above", 2565 | "keywords": [ 2566 | "move to window above", 2567 | "horizontal split navigation", 2568 | "ctrl+wk" 2569 | ], 2570 | "command": "Ctrl + wk", 2571 | "description": "Moves the cursor to the window located above in a horizontal split arrangement.", 2572 | "rtorr_description": "Ctrl%20%20%2B%20%20wk%20%2D%20move%20cursor%20to%20the%20window%20above%20%28horizontal%20split%29" 2573 | }, 2574 | { 2575 | "name": "Maximize Window Height (Left)", 2576 | "keywords": [ 2577 | "maximize window height", 2578 | "full height window", 2579 | "leftmost window", 2580 | "ctrl+wh" 2581 | ], 2582 | "command": "Ctrl + wH", 2583 | "description": "Makes the current window occupy the full height of the screen and positions it as the leftmost window in a vertical split arrangement.", 2584 | "rtorr_description": "Ctrl%20%20%2B%20%20wH%20%2D%20make%20current%20window%20full%20height%20at%20far%20left%20%28leftmost%20vertical%20window%29" 2585 | }, 2586 | { 2587 | "name": "Maximize Window Height (Right)", 2588 | "keywords": [ 2589 | "maximize window height", 2590 | "full height window", 2591 | "rightmost window", 2592 | "ctrl+wl" 2593 | ], 2594 | "command": "Ctrl + wL", 2595 | "description": "Makes the current window occupy the full height of the screen and positions it as the rightmost window in a vertical split arrangement.", 2596 | "rtorr_description": "Ctrl%20%20%2B%20%20wL%20%2D%20make%20current%20window%20full%20height%20at%20far%20right%20%28rightmost%20vertical%20window%29" 2597 | }, 2598 | { 2599 | "name": "Maximize Window Width (Bottom)", 2600 | "keywords": [ 2601 | "maximize window width", 2602 | "full width window", 2603 | "bottommost window", 2604 | "ctrl+wj" 2605 | ], 2606 | "command": "Ctrl + wJ", 2607 | "description": "Makes the current window occupy the full width of the screen and positions it as the bottommost window in a horizontal split arrangement.", 2608 | "rtorr_description": "Ctrl%20%20%2B%20%20wJ%20%2D%20make%20current%20window%20full%20width%20at%20the%20very%20bottom%20%28bottommost%20horizontal%20window%29" 2609 | }, 2610 | { 2611 | "name": "Maximize Window Width (Top)", 2612 | "keywords": [ 2613 | "maximize window width", 2614 | "full width window", 2615 | "topmost window", 2616 | "ctrl+wk" 2617 | ], 2618 | "command": "Ctrl + wK", 2619 | "description": "Makes the current window occupy the full width of the screen and positions it as the topmost window in a horizontal split arrangement.", 2620 | "rtorr_description": "Ctrl%20%20%2B%20%20wK%20%2D%20make%20current%20window%20full%20width%20at%20the%20very%20top%20%28topmost%20horizontal%20window%29" 2621 | }, 2622 | { 2623 | "name": "zf", 2624 | "keywords": [ 2625 | "create fold", 2626 | "manual fold", 2627 | "fold to motion" 2628 | ], 2629 | "command": "zf", 2630 | "description": "Manually defines a code fold from the current cursor position up to the specified motion.", 2631 | "rtorr_description": "zf%20%2D%20manually%20define%20a%20fold%20up%20to%20motion" 2632 | }, 2633 | { 2634 | "name": "zd", 2635 | "keywords": [ 2636 | "delete fold", 2637 | "remove fold" 2638 | ], 2639 | "command": "zd", 2640 | "description": "Deletes the code fold located under the cursor.", 2641 | "rtorr_description": "zd%20%2D%20delete%20fold%20under%20the%20cursor" 2642 | }, 2643 | { 2644 | "name": "za", 2645 | "keywords": [ 2646 | "toggle fold", 2647 | "open/close fold" 2648 | ], 2649 | "command": "za", 2650 | "description": "Toggles the open/closed state of the code fold located under the cursor.", 2651 | "rtorr_description": "za%20%2D%20toggle%20fold%20under%20the%20cursor" 2652 | }, 2653 | { 2654 | "name": "zo", 2655 | "keywords": [ 2656 | "open fold", 2657 | "expand fold" 2658 | ], 2659 | "command": "zo", 2660 | "description": "Opens (expands) the code fold located under the cursor.", 2661 | "rtorr_description": "zo%20%2D%20open%20fold%20under%20the%20cursor" 2662 | }, 2663 | { 2664 | "name": "zc", 2665 | "keywords": [ 2666 | "close fold", 2667 | "collapse fold" 2668 | ], 2669 | "command": "zc", 2670 | "description": "Closes (collapses) the code fold located under the cursor.", 2671 | "rtorr_description": "zc%20%2D%20close%20fold%20under%20the%20cursor" 2672 | }, 2673 | { 2674 | "name": "zr", 2675 | "keywords": [ 2676 | "reduce folds", 2677 | "open folds one level" 2678 | ], 2679 | "command": "zr", 2680 | "description": "Reduces the folding level by one, effectively opening folds at the outermost level.", 2681 | "rtorr_description": "zr%20%2D%20reduce%20%28open%29%20all%20folds%20by%20one%20level" 2682 | }, 2683 | { 2684 | "name": "zm", 2685 | "keywords": [ 2686 | "fold more", 2687 | "close folds one level" 2688 | ], 2689 | "command": "zm", 2690 | "description": "Increases the folding level by one, effectively closing folds at the current level.", 2691 | "rtorr_description": "zm%20%2D%20fold%20more%20%28close%29%20all%20folds%20by%20one%20level" 2692 | }, 2693 | { 2694 | "name": "zi", 2695 | "keywords": [ 2696 | "toggle folding", 2697 | "enable/disable folding" 2698 | ], 2699 | "command": "zi", 2700 | "description": "Toggles the folding functionality on or off.", 2701 | "rtorr_description": "zi%20%2D%20toggle%20folding%20functionality" 2702 | }, 2703 | { 2704 | "name": "]c", 2705 | "keywords": [ 2706 | "next change", 2707 | "jump to change", 2708 | "change navigation" 2709 | ], 2710 | "command": "]c", 2711 | "description": "Jumps to the start of the next change in the document.", 2712 | "rtorr_description": "%5Dc%20%2D%20jump%20to%20start%20of%20next%20change" 2713 | }, 2714 | { 2715 | "name": "[c", 2716 | "keywords": [ 2717 | "previous change", 2718 | "jump to change", 2719 | "change navigation" 2720 | ], 2721 | "command": "[c", 2722 | "description": "Jumps to the start of the previous change in the document.", 2723 | "rtorr_description": "%5Bc%20%2D%20jump%20to%20start%20of%20previous%20change" 2724 | }, 2725 | { 2726 | "name": "do / :diffg[et]", 2727 | "keywords": [ 2728 | "get diff", 2729 | "obtain difference", 2730 | "do", 2731 | "diffget" 2732 | ], 2733 | "command": "do or :diffg[et]", 2734 | "description": "Obtains (gets) the difference from another buffer and applies it to the current buffer.", 2735 | "rtorr_description": "do%20%20or%20%20%3Adiffg%5Bet%5D%20%2D%20obtain%20%28get%29%20difference%20%28from%20other%20buffer%29" 2736 | }, 2737 | { 2738 | "name": "dp / :diffpu[t]", 2739 | "keywords": [ 2740 | "put diff", 2741 | "apply difference", 2742 | "dp", 2743 | "diffput" 2744 | ], 2745 | "command": "dp or :diffpu[t]", 2746 | "description": "Puts (applies) the difference from the current buffer to another buffer.", 2747 | "rtorr_description": "dp%20%20or%20%20%3Adiffpu%5Bt%5D%20%2D%20put%20difference%20%28to%20other%20buffer%29" 2748 | }, 2749 | { 2750 | "name": ":diffthis", 2751 | "keywords": [ 2752 | "include in diff", 2753 | "diff current window", 2754 | "diffthis" 2755 | ], 2756 | "command": ":diffthis", 2757 | "description": "Marks the current window as part of the diff comparison.", 2758 | "rtorr_description": "%3Adiffthis%20%2D%20make%20current%20window%20part%20of%20diff" 2759 | }, 2760 | { 2761 | "name": ":dif[fupdate]", 2762 | "keywords": [ 2763 | "update diff", 2764 | "refresh differences", 2765 | "dif", 2766 | "diffupdate" 2767 | ], 2768 | "command": ":dif[fupdate]", 2769 | "description": "Updates the displayed differences between buffers in diff mode.", 2770 | "rtorr_description": "%3Adif%5Bfupdate%5D%20%2D%20update%20differences" 2771 | }, 2772 | { 2773 | "name": ":diffo[ff]", 2774 | "keywords": [ 2775 | "disable diff", 2776 | "turn off diff mode", 2777 | "diffo", 2778 | "diffoff" 2779 | ], 2780 | "command": ":diffo[ff]", 2781 | "description": "Disables diff mode for the current window.", 2782 | "rtorr_description": "%3Adiffo%5Bff%5D%20%2D%20switch%20off%20diff%20mode%20for%20current%20window" 2783 | } 2784 | ] --------------------------------------------------------------------------------