{"id":13898951,"url":"https://github.com/vim-ctrlspace/vim-ctrlspace","last_synced_at":"2026-03-11T16:03:36.331Z","repository":{"id":10014064,"uuid":"12051766","full_name":"vim-ctrlspace/vim-ctrlspace","owner":"vim-ctrlspace","description":"Vim Space Controller","archived":false,"fork":false,"pushed_at":"2025-02-19T19:07:26.000Z","size":108972,"stargazers_count":1752,"open_issues_count":43,"forks_count":71,"subscribers_count":33,"default_branch":"master","last_synced_at":"2025-04-02T21:01:49.337Z","etag":null,"topics":["bookmark","buffer","fuzzy-search","neovim","tabline","vim","vim-ctrlspace","vim-script","workspace"],"latest_commit_sha":null,"homepage":"","language":"Vim Script","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/vim-ctrlspace.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2013-08-12T08:54:26.000Z","updated_at":"2025-03-22T20:37:08.000Z","dependencies_parsed_at":"2023-01-13T15:45:08.474Z","dependency_job_id":"eef3e66c-fdd7-4165-90a2-5a49b3c69653","html_url":"https://github.com/vim-ctrlspace/vim-ctrlspace","commit_stats":{"total_commits":833,"total_committers":29,"mean_commits":"28.724137931034484","dds":"0.12004801920768304","last_synced_commit":"7c75fac89887df03601f0817bb611069189fb351"},"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vim-ctrlspace%2Fvim-ctrlspace","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vim-ctrlspace%2Fvim-ctrlspace/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vim-ctrlspace%2Fvim-ctrlspace/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vim-ctrlspace%2Fvim-ctrlspace/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/vim-ctrlspace","download_url":"https://codeload.github.com/vim-ctrlspace/vim-ctrlspace/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248335182,"owners_count":21086533,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bookmark","buffer","fuzzy-search","neovim","tabline","vim","vim-ctrlspace","vim-script","workspace"],"created_at":"2024-08-06T18:04:33.102Z","updated_at":"2026-03-11T16:03:36.318Z","avatar_url":"https://github.com/vim-ctrlspace.png","language":"Vim Script","funding_links":[],"categories":["Vim Script","vim"],"sub_categories":[],"readme":"\n\u003cdiv align=\"center\"\u003e\n\u003cimg alt=\"Vim-CtrlSpace\" src=\"https://raw.github.com/vim-ctrlspace/vim-ctrlspace/master/gfx/logo5.png\" /\u003e\n\u003cbr\u003e\u003cbr\u003e\n\u003c/div\u003e\n\nWelcome to the **Vim-CtrlSpace** plug-in for managing\n\n* your tabs, buffers, files,\n* workspaces (sessions),\n* bookmarks for your favorite projects\n\nincluding fuzzy search (*powered by Go*);\nreachable by the default mapping `Ctrl` + `Space`:\nPressing `\u003cC-Space\u003e` opens a window listing\n\n* Buffers,\n* Files,\n* Tabs,\n* Workspaces, or\n* Bookmarks\n\nselectable by the `j`, `k`, and `\u003cCR\u003e` keys.\n\n\u003cp align=\"center\"\u003e\n\u003cimg alt=\"Vim-CtrlSpace\" src=\"https://raw.github.com/vim-ctrlspace/vim-ctrlspace/master/gfx/cs5_window.png\" /\u003e\n\u003c/p\u003e\n\n# Table of Contents\n\n   * [Idea by Analogy](#idea-by-analogy)\n   * [Getting Started](#getting-started)\n      * [Installation](#installation)\n      * [Basic Settings](#basic-settings)\n         * [Tabline](#tabline)\n         * [Neovim](#neovim)\n      * [First Steps](#first-steps)\n      * [Fuzzy Search Hints](#fuzzy-search-hints)\n      * [Automatically Saving Workspace](#automatically-saving-workspace)\n   * [Advanced Settings](#advanced-settings)\n      * [Go Engine](#go-engine)\n      * [Symbols](#symbols)\n      * [Glob Command](#glob-command)\n      * [Search Timing](#search-timing)\n      * [Colors](#colors)\n   * [Authors and License](#authors-and-license)\n\nIf you have already starred this repo, thank you!\nIf you have a question, a feature request, or a new idea, then don't hesitate to post new issues or pull requests:\nCollaboration is the most awesome thing in the open source community!\n\n# Idea by Analogy\n\nThese Lists can be explained with a simple analogy:\nImagine Vim is a writing desk.\n\n- The **Bookmarks List** lists your favorite projects that are like drawers.\n- To look up the documents in a drawer you need the **File List**.\n- Once you locate and pick up a file it becomes a **buffer**.\n    A buffer is like a sheet of paper lying on the desk.\n    Sometimes you can have a blank piece of paper --- that's a new unsaved buffer.\n    Eventually, once saved (put into a drawer), it becomes a file.\n    The **Buffer List** lets you manage all papers on the desk.\n\nThe strongest point of **Vim-CtrlSpace** is its handling of  **Tab pages**:\n**Each** tab holds a **separate** list of buffers;\nlike a pile of documents on the desk.\nWith tabs you can, for example:\n\n* group related buffers\n* extract to other tabs\n* name them accordingly\n* move or copy them\n\nTabs can be accessed and managed within **Tab List**.\n\nAll your buffers, tabs, and tab layouts can be persisted as a **workspace**.\nIt's like taking a picture of your desk with an instant camera.\nYou can save multiple workspaces per project with the **Workspace List**.\n\n# Getting Started\n\n## Installation\n\nIf you use [vim-plug](https://github.com/junegunn/vim-plug), then add to your `vimrc` file (whose path is shown by `:help vimrc`):\n\n```VimL\nPlug 'vim-ctrlspace/vim-ctrlspace'\n```\n\nYou can also clone the repository to your `vimfiles` directory (whose path is shown by `:help vimrc`):\n\n```Shell\ngit clone https://github.com/vim-ctrlspace/vim-ctrlspace.git .\n```\n\n## Basic Settings\n\nFirst please make sure that you set `nocompatible` and `hidden` options,\nand set `encoding=utf-8` (as required by the plugin) in your `.vimrc`: \u003e\n\n```VimL\nset nocompatible\nset hidden\nset encoding=utf-8\n```\n\n### Tabline\n\nIf you feel brave enough **turn off** tabline:\n\n```VimL\nset showtabline=0\n```\n\nTabline in Vim has very limited capabilities and as Vim-CtrlSpace makes\nuse of tabs intensively, tabline would just get in your way. **Tab List**\n(`\u003cl\u003e`) makes tabline obsolete ;).\n\n### Neovim\n\nNeovim requires adding the following line to your `.vimrc` or `init.vim`:\n\n```VimL\nlet g:CtrlSpaceDefaultMappingKey = \"\u003cC-space\u003e \"\n```\n\nNote the trailing space at the end of the mapping. Neovim doesn't mind\nit, but it makes vim-ctrlspace's \"is the mapping left at default\" check\nfail so it won't change the mapping to `\u003cnul\u003e`.\n\n\n## First Steps\n\nAlright! You've hopefully installed, configured Vim-CtrlSpace, and\nrestarted Vim (otherwise do it!). Now you're wondering how to start using\nthis thing.\n\nFirst, you need to select a project. Vim operates in a directory,\ndescribed as `CWD` (_Current Working Directory_). If you've just started\na MacVim it's probably pointing to your home directory (issue `:pwd` to\ncheck it).\n\nI advise you to add a project to the Bookmark List by opening the plugin\nwindow (`\u003cC-Space\u003e`) and pressing `\u003cb\u003e`. The plugin will ask for a project\ndirectory.\n\nMake sure that the path **is not your home directory**. Otherwise the\nplugin will start indexing all your files which will be pointless and\nresource exhaustive. Be concrete and provide a real path to a project.\nOnce your bookmark is created, you can go there with `\u003cCR\u003e`.\n\nNow open some files with `\u003co\u003e`. Finally save a workspace with `\u003cw\u003e` by\nproviding your first workspace name.\n\nFor more information please check out Vim-CtrlSpace help directly in Vim:\n\n```VimL\n:help ctrlspace\n```\n\nFor key reference press `\u003c?\u003e` inside the plugin window.\n\n## Fuzzy Search Hints\n\nIf you are used to hitting the `\u003cctrl-P\u003e` key combination for fuzzy search, add\nthis to your .vimrc file:\n\n```VimL\nnnoremap \u003csilent\u003e\u003cC-p\u003e :CtrlSpace O\u003cCR\u003e\n```\n\nBe sure to remember to refresh your search file list using `\u003cr\u003e` command.\n\n## Automatically Saving Workspace\n\nCtrl-Space can automatically save your workspace status based on configurations below:\n\n```VimL\nlet g:CtrlSpaceLoadLastWorkspaceOnStart = 1\nlet g:CtrlSpaceSaveWorkspaceOnSwitch = 1\nlet g:CtrlSpaceSaveWorkspaceOnExit = 1\n```\n\n# Advanced Settings\n\n## Go Engine\n\nThe plugin provides engine compiled for popular operating systems and\narchitectures. By default it will attempt to detect your OS and\narchitecture. To see if auto detection was successful press `\u003c?\u003e`.\n\nTo speed up the startup of Vim, replace it by a custom simpler one that\nrestricts to those architectures most probably used by you, and does not\ninvolve system calls. For example, if you use\n[vim-plug](https://github.com/junegunn/vim-plug), then by adding to your\n`vimrc`:\n\n```vim\nif has('win32')\n    let s:vimfiles = '~/vimfiles'\n    let s:os   = 'windows'\nelse\n    let s:vimfiles = '~/.vim'\n    if has('mac') || has('gui_macvim')\n        let s:os = 'darwin'\n    else\n    \" elseif has('gui_gtk2') || has('gui_gtk3')\n        let s:os = 'linux'\n    endif\nendif\n\nlet g:CtrlSpaceFileEngine = s:vimfiles . '/plugged/vim-ctrlspace' . '/bin/file_engine_' . s:os . '_amd64'\n```\n\nThe file engine binaries have been compiled for various OS's and CPU\ntypes, but only those for Linux, MacOS and Windows on 64 bit architectures\nare available in the git repository. The other versions for their 32 bit\narchitecture counterparts, as well as for FreeBSD, NetBSD and OpenBSD\non `ARM`, `MIPS`, `amd64` and `32` bit architectures can be downloaded at:\n\n\t\u003chttps://git.io/vim-ctrlspace-release-all_os_file_engines\u003e\n\nTo find more about setting up the file engines, check:\n\n```VimL\n:help g:CtrlSpaceFileEngine\n```\n\nLastly, this file engine sources the list of files it searches through from\na text file cache (`cs_files`, typically stored under `.git/`). For small to\nmedium-sized projects (say \u003c1k files as a cautious estimate), where loading\nfrom this files cache isn't likely to yield a noticeable speed boost, and you\nmight instead rather not think about when to refresh the cache (for instance\non switching to a branch with different files), you may disable the cache and\nby extension forgo using the Go file engine by setting the option below:\n\n```VimL\nlet g:CtrlSpaceEnableFilesCache = 0\n```\n\n## Symbols\n\nVim-Ctrlspace displays icons in the UI if your font supports UTF8, or\nASCII characters as a fallback. Some symbols (glyphs) might not look well\nwith the font you are using, so feel free to change and adjust them.\n\nI use the following symbols of the Inconsolata font in MacVim :\n\n```VimL\nif has(\"gui_running\")\n    \" Settings for MacVim and Inconsolata font\n    let g:CtrlSpaceSymbols = { \"File\": \"◯\", \"CTab\": \"▣\", \"Tabs\": \"▢\" }\nendif\n```\n\nSince it's impossible to provide universal character set that would look well\non any machine, the fine tuning is left to you.\n\nYou can find more about this tuning option in the plugin help:\n\n```VimL\n:help g:CtrlSpaceSymbols\n```\n\nIf you feel that you have found a better symbol for a given view, you are\nmore than welcome to open a pull request.\n\n## Glob Command\n\nAnother important setting is the *Glob* command that collects all files in your project directory.\nThe Glob commands `rg`, `fd` and `ag` respect `.gitignore` rules (where `ag` does not support the re-inclusion prefix `!` that re-includes files excluded by a previous exclusion pattern) and are faster (in the given order as showed a coarse benchmark on Linux) than that built-in.\nThey can be used by adding the following lines to `vimrc`:\n\n```VimL\nif executable('rg')\n    let g:CtrlSpaceGlobCommand = 'rg --color=never --files'\nelseif executable('fd')\n    let g:CtrlSpaceGlobCommand = 'fd --type=file --color=never'\nelseif executable('ag')\n    let g:CtrlSpaceGlobCommand = 'ag -l --nocolor -g \"\"'\nendif\n```\n\n## Search Timing\n\nIf your projects have more than 100 000 files, then you can make the file search more responsive by increasing the plugin's fuzzy search delay timing value:\n\n```VimL\nlet g:CtrlSpaceSearchTiming = 500\n```\n\n## Colors\n\nFinally, you can adjust some plugin colors. By default plugin uses\nthe following setup:\n\n```VimL\nhi link CtrlSpaceNormal   PMenu\nhi link CtrlSpaceSelected PMenuSel\nhi link CtrlSpaceSearch   Search\nhi link CtrlSpaceStatus   StatusLine\n```\n\nHowever some color schemes show search results with the same colors as\nPMenu groups. If that's your case try to link CtrlSpaceSearch highlight\ngroup to IncSearch instead:\n\n```VimL\nhi link CtrlSpaceSearch IncSearch\n```\n\nOf course nothing prevents you from providing your own highlighting, for example:\n\n```VimL\nhi CtrlSpaceSearch guifg=#cb4b16 guibg=NONE gui=bold ctermfg=9 ctermbg=NONE term=bold cterm=bold\n```\n\n## Tmux-Resurrect\n\nIf you use [tmux](https://github.com/tmux/tmux/wiki) and [tmux-resurrect](https://github.com/tmux-plugins/tmux-resurrect),\nyou can configure it to save and restore Vim-CtrlSpace workspaces by adding the following lines to your `~/.tmux.conf` file (falling back to a Session file if a workspace file is not found, and to just `vim` or `nvim` if no workspace files are found):\n\n```\nset -g @plugin 'tmux-plugins/tmux-resurrect'    # save/restore layout\nset -g @resurrect-processes '\"~vim\" -\u003e \"if [ -f .git/cs_workspaces ]; then vim +CtrlSpaceLoadWorkspace; elif [ -f .git/Session.vim ]; then vim -S .git/Session.vim; else vim; fi\"'\nset -g @resurrect-processes '\"~nvim\" -\u003e \"if [ -f .git/cs_workspaces ]; then nvim +CtrlSpaceLoadWorkspace; elif [ -f .git/Session.nvim ]; then nvim -S .git/Session.nvim; else nvim; fi\"'\n```\n\nAdditionally, to save the workspace continually, add to Vim an `autocmd` such as\n\n```\naugroup vimrcCtrlSpace\n  autocmd!\n  autocmd FocusLost,VimLeavePre *\n        \\ if ctrlspace#workspaces#ActiveWorkspace().Status | call ctrlspace#workspaces#SaveWorkspace(\"\") | endif\naugroup END\n```\n\n# Authors and License\n\nCopyright \u0026copy; 2013-2020 [Szymon Wrozynski and\nContributors](https://github.com/vim-ctrlspace/vim-ctrlspace/graphs/contributors).\nLicensed under [MIT\nLicense](https://github.com/vim-ctrlspace/vim-ctrlspace/blob/master/plugin/ctrlspace.vim#L5-L26)\nconditions.\n\n**Vim-CtrlSpace** is inspired by Robert Lillack plugin [VIM\nbufferlist](https://github.com/roblillack/vim-bufferlist) \u0026copy; 2005\nRobert Lillack. Moreover some concepts and inspiration has been taken from\n[Vim-Tabber](https://github.com/fweep/vim-tabber) by Jim Steward and\n[Tabline](https://github.com/mkitt/tabline.vim) by Matthew Kitt.\n\nSpecial thanks to [Wojtek Ryrych](https://github.com/ryrych) for help and\npatience ;) and all\n[Contributors](https://github.com/vim-ctrlspace/vim-ctrlspace/graphs/contributors).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvim-ctrlspace%2Fvim-ctrlspace","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvim-ctrlspace%2Fvim-ctrlspace","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvim-ctrlspace%2Fvim-ctrlspace/lists"}