diff --git a/README.md b/README.md index 21e939a2..4d20af66 100644 --- a/README.md +++ b/README.md @@ -11,22 +11,28 @@ There are two versions: I would, of course, recommend using the awesome version. - ## How to install the Awesome version? + ### Install for your own user only + The awesome version includes a lot of great plugins, configurations and color schemes that make Vim a lot better. To install it simply do following from your terminal: - git clone --depth=1 https://github.com/amix/vimrc.git ~/.vim_runtime - sh ~/.vim_runtime/install_awesome_vimrc.sh - +```sh +git clone --depth=1 https://github.com/amix/vimrc.git ~/.vim_runtime +sh ~/.vim_runtime/install_awesome_vimrc.sh +``` + ### Install for multiple users + To install for multiple users, the repository needs to be cloned to a location accessible for all the intended users. - git clone --depth=1 https://github.com/amix/vimrc.git /opt/vim_runtime - sh ~/.vim_runtime/install_awesome_parameterized.sh /opt/vim_runtime user0 user1 user2 - # to install for all users with home directories - sh ~/.vim_runtime/install_awesome_parameterized.sh /opt/vim_runtime --all - +```sh +git clone --depth=1 https://github.com/amix/vimrc.git /opt/vim_runtime +sh ~/.vim_runtime/install_awesome_parameterized.sh /opt/vim_runtime user0 user1 user2 +# to install for all users with home directories +sh ~/.vim_runtime/install_awesome_parameterized.sh /opt/vim_runtime --all +``` + Naturally, `/opt/vim_runtime` can be any directory, as long as all the users specified have read access. ## Fonts @@ -44,33 +50,36 @@ The basic version is just one file and no plugins. Just copy [basic.vim](https:/ The basic version is useful to install on remote servers where you don't need many plugins, and you don't do many edits. - git clone --depth=1 https://github.com/amix/vimrc.git ~/.vim_runtime - sh ~/.vim_runtime/install_basic_vimrc.sh - +```sh +git clone --depth=1 https://github.com/amix/vimrc.git ~/.vim_runtime +sh ~/.vim_runtime/install_basic_vimrc.sh +``` ## How to install on Windows? Use [gitforwindows](http://gitforwindows.org/) to checkout the repository and run the installation instructions above. No special instructions needed ;-) - ## How to install on Linux If you have vim aliased as `vi` instead of `vim`, make sure to either alias it: `alias vi=vim`. Otherwise, `apt-get install vim` - ## How to update to latest version? Just do a git rebase! - cd ~/.vim_runtime - git reset --hard - git clean -d --force - git pull --rebase - python update_plugins.py # use python3 if python is unavailable +```sh +cd ~/.vim_runtime +git reset --hard +git clean -d --force +git pull --rebase +python update_plugins.py # use python3 if python is unavailable +``` NOTE: If you get `ModuleNotFoundError: No module named 'requests'`, you must first install the `requests` python module using `pip`, `pip3`, or `easy_install`. - pip install requests +```sh +pip install requests +``` ## Some screenshots @@ -84,7 +93,6 @@ Colors when editing a Python file: Distraction free mode using [goyo.vim](https://github.com/junegunn/goyo.vim) and [vim-zenroom2](https://github.com/amix/vim-zenroom2): ![Screenshot 4](https://dnp4pehkvoo6n.cloudfront.net/f0dcc4c9739148c56cbf8285a910ac41/as/Zen%20mode.png) - ## Included Plugins I recommend reading the docs of these plugins to understand them better. Each plugin provides a much better Vim experience! @@ -92,11 +100,11 @@ I recommend reading the docs of these plugins to understand them better. Each pl * [ack.vim](https://github.com/mileszs/ack.vim): Vim plugin for `the_silver_searcher` (ag) or ack -- a wicked fast grep * [bufexplorer.zip](https://github.com/vim-scripts/bufexplorer.zip): Quickly and easily switch between buffers. This plugin can be opened with `` * [ctrlp.vim](https://github.com/ctrlpvim/ctrlp.vim): Fuzzy file, buffer, mru and tag finder. It's mapped to `` -* [goyo.vim](https://github.com/junegunn/goyo.vim) and [vim-zenroom2](https://github.com/amix/vim-zenroom2): +* [goyo.vim](https://github.com/junegunn/goyo.vim) and [vim-zenroom2](https://github.com/amix/vim-zenroom2): * [lightline.vim](https://github.com/itchyny/lightline.vim): A light and configurable statusline/tabline for Vim * [NERD Tree](https://github.com/preservim/nerdtree): A tree explorer plugin for vim * [open_file_under_cursor.vim](https://github.com/amix/open_file_under_cursor.vim): Open file under cursor when pressing `gf` -* [pathogen.vim](https://github.com/tpope/vim-pathogen): Manage your vim runtimepath +* [pathogen.vim](https://github.com/tpope/vim-pathogen): Manage your vim runtimepath * [snipmate.vim](https://github.com/garbas/vim-snipmate): snipmate.vim aims to be a concise vim script that implements some of TextMate's snippets features in Vim * [ale](https://github.com/dense-analysis/ale): Syntax and lint checking for vim (ALE requires NeoVim >= 0.2.0 or Vim 8 with +timers +job +channel) * [vim-commentary](https://github.com/tpope/vim-commentary): Comment stuff out. Use `gcc` to comment out a line (takes a count), `gc` to comment out the target of a motion. `gcu` uncomments a set of adjacent commented lines. @@ -110,7 +118,6 @@ I recommend reading the docs of these plugins to understand them better. Each pl * [vim-indent-guides](https://github.com/nathanaelkane/vim-indent-guides) Is a plugin for visually displaying indent levels in Vim * [editorconfig-vim](https://github.com/editorconfig/editorconfig-vim) EditorConfig helps maintain consistent coding styles for multiple developers working on the same project across various editors and IDEs. - ## Included color schemes * [peaksea](https://github.com/vim-scripts/peaksea): The default @@ -120,7 +127,6 @@ I recommend reading the docs of these plugins to understand them better. Each pl * [mayansmoke](https://github.com/vim-scripts/mayansmoke) * [vim-pyte](https://github.com/therubymug/vim-pyte) - ## Included modes * [vim-coffee-script](https://github.com/kchmck/vim-coffee-script) @@ -134,251 +140,317 @@ I recommend reading the docs of these plugins to understand them better. Each pl * [vim-javascript](https://github.com/pangloss/vim-javascript) * [vim-python-pep8-indent](https://github.com/Vimjas/vim-python-pep8-indent) - ## How to include your own stuff? After you have installed the setup, you can create **~/.vim_runtime/my_configs.vim** to fill in any configurations that are important for you. For instance, my **my_configs.vim** looks like this: - ~/.vim_runtime (master)> cat my_configs.vim - map ct :cd ~/Desktop/Todoist/todoist - map cw :cd ~/Desktop/Wedoist/wedoist +```sh +~/.vim_runtime (master)> cat my_configs.vim +map ct :cd ~/Desktop/Todoist/todoist +map cw :cd ~/Desktop/Wedoist/wedoist +``` You can also install your plugins, for instance, via pathogen you can install [vim-rails](https://github.com/tpope/vim-rails): - cd ~/.vim_runtime - git clone git://github.com/tpope/vim-rails.git my_plugins/vim-rails +```sh +cd ~/.vim_runtime +git clone git://github.com/tpope/vim-rails.git my_plugins/vim-rails +``` You can also install plugins without any plugin manager (vim 8+ required): - Add `packloadall` to your .vimrc file - Create pack plugin directory: - `mkdir -p ~/.vim/pack/plugins/start` - Clone the plugin that you want in that directory, for example: - `git clone --depth=1 git://github.com/maxmellon/vim-jsx-pretty ~/.vim/pack/plugins/vim-jsx-pretty` - +Add `packloadall` to your .vimrc file +Create pack plugin directory: +`mkdir -p ~/.vim/pack/plugins/start` +Clone the plugin that you want in that directory, for example: +`git clone --depth=1 git://github.com/maxmellon/vim-jsx-pretty ~/.vim/pack/plugins/vim-jsx-pretty` ## Key Mappings The [leader](http://learnvimscriptthehardway.stevelosh.com/chapters/06.html#leader) is `,`, so whenever you see `` it means `,`. - ### Normal mode mappings Fast saving of a buffer (`w`): - nmap w :w! - +```vim +nmap w :w! +``` + Map `` to `/` (search) and `+` to `?` (backwards search): - - map / - map ? - map :noh + +```vim +map / +map ? +map :noh +``` Disable highlights when you press ``: - - map :noh + +```vim +map :noh +``` Smart way to move between windows (`j` etc.): - - map j - map k - map h - map l + +```vim +map j +map k +map h +map l +``` Closing of the current buffer(s) (`bd` and (`ba`)): - - " Close current buffer - map bd :Bclose - - " Close all buffers - map ba :1,1000 bd! - + +```vim +" Close current buffer +map bd :Bclose + +" Close all buffers +map ba :1,1000 bd! +``` + Useful mappings for managing tabs: - - map tn :tabnew - map to :tabonly - map tc :tabclose - map tm :tabmove - - " Opens a new tab with the current buffer's path - " Super useful when editing files in the same directory - map te :tabedit =expand("%:p:h")/ - + +```vim +map tn :tabnew +map to :tabonly +map tc :tabclose +map tm :tabmove + +" Opens a new tab with the current buffer's path +" Super useful when editing files in the same directory +map te :tabedit =expand("%:p:h")/ +``` + Switch [CWD](http://vim.wikia.com/wiki/Set_working_directory_to_the_current_file) to the directory of the open buffer: - - map cd :cd %:p:h:pwd - + +```vim +map cd :cd %:p:h:pwd +``` + Open `ack.vim` for fast search: - - map g :Ack + +```vim +map g :Ack +``` Quickly open a buffer for scripbble: - - map q :e ~/buffer + +```vim +map q :e ~/buffer +``` Toggle paste mode on and off: - - map pp :setlocal paste! +```vim +map pp :setlocal paste! +``` ### Visual mode mappings Visual mode pressing `*` or `#` searches for the current selection: - vnoremap * :call VisualSelection('f') - vnoremap # :call VisualSelection('b') +```vim +vnoremap * :call VisualSelection('f') +vnoremap # :call VisualSelection('b') +``` When you press gv you `Ack.vim` after the selected text: - vnoremap gv :call VisualSelection('gv', '') +```vim +vnoremap gv :call VisualSelection('gv', '') +``` When you press `r` you can search and replace the selected text: - vnoremap r :call VisualSelection('replace') +```vim +vnoremap r :call VisualSelection('replace') +``` Surround the visual selection in parenthesis/brackets/etc.: - vnoremap $1 `>a)` - vnoremap $2 `>a]` - vnoremap $3 `>a}` - vnoremap $$ `>a"` - vnoremap $q `>a'` - vnoremap $e `>a`` - +```vim +vnoremap $1 `>a)` +vnoremap $2 `>a]` +vnoremap $3 `>a}` +vnoremap $$ `>a"` +vnoremap $q `>a'` +vnoremap $e `>a`` +``` ### Insert mode mappings Quickly insert parenthesis/brackets/etc.: - inoremap $1 ()i - inoremap $2 []i - inoremap $3 {}i - inoremap $4 {o}O - inoremap $q ''i - inoremap $e ""i - inoremap $t <>i +```vim +inoremap $1 ()i +inoremap $2 []i +inoremap $3 {}i +inoremap $4 {o}O +inoremap $q ''i +inoremap $e ""i +inoremap $t <>i +``` Insert the current date and time (useful for timestamps): - iab xdate =strftime("%d/%m/%y %H:%M:%S") - +```vim +iab xdate =strftime("%d/%m/%y %H:%M:%S") +``` ### Command line mappings $q is super useful when browsing on the command line. It deletes everything until the last slash: - cno $q eDeleteTillSlash() +```vim +cno $q eDeleteTillSlash() +``` Bash like keys for the command line: - cnoremap - cnoremap - cnoremap +```vim +cnoremap +cnoremap +cnoremap - cnoremap - cnoremap +cnoremap +cnoremap +``` Write the file as sudo (works only on Unix). Super useful when you open a file and you don't have permissions to save your changes. [Vim tip](http://vim.wikia.com/wiki/Su-write): - :W - +```vim +:W +``` ### Plugin related mappings Open [bufexplorer](https://github.com/vim-scripts/bufexplorer.zip) to see and manage the current buffers (`o`): - - map o :BufExplorer + +```vim +map o :BufExplorer +``` Open [ctrlp.vim](https://github.com/kien/ctrlp.vim) plugin to quickly find a file or a buffer (`j` or `f`): - " Quickly find and open a file in the CWD - let g:ctrlp_map = '' +```vim +" Quickly find and open a file in the CWD +let g:ctrlp_map = '' - " Quickly find and open a recently opened file - map f :MRU +" Quickly find and open a recently opened file +map f :MRU - " Quickly find and open a buffer - map b :CtrlPBuffer +" Quickly find and open a buffer +map b :CtrlPBuffer +``` [NERD Tree](https://github.com/preservim/nerdtree) mappings: - map nn :NERDTreeToggle - map nb :NERDTreeFromBookmark - map nf :NERDTreeFind +```vim +map nn :NERDTreeToggle +map nb :NERDTreeFromBookmark +map nf :NERDTreeFind +``` [goyo.vim](https://github.com/junegunn/goyo.vim) and [vim-zenroom2](https://github.com/amix/vim-zenroom2) lets you only focus on one thing at a time. It removes all the distractions and centers the content. It has a special look when editing Markdown, reStructuredText and textfiles. It only has one mapping. (`z`) - map z :Goyo +```vim +map z :Goyo +``` [vim-multiple-cursors](https://github.com/terryma/vim-multiple-cursors) mappings to manage multiple cursors at once: - let g:multi_cursor_start_word_key = '' - let g:multi_cursor_select_all_word_key = '' - let g:multi_cursor_start_key = 'g' - let g:multi_cursor_select_all_key = 'g' - let g:multi_cursor_next_key = '' - let g:multi_cursor_prev_key = '' - let g:multi_cursor_skip_key = '' - let g:multi_cursor_quit_key = '' +```vim +let g:multi_cursor_start_word_key = '' +let g:multi_cursor_select_all_word_key = '' +let g:multi_cursor_start_key = 'g' +let g:multi_cursor_select_all_key = 'g' +let g:multi_cursor_next_key = '' +let g:multi_cursor_prev_key = '' +let g:multi_cursor_skip_key = '' +let g:multi_cursor_quit_key = '' +``` [vim-yankstack](https://github.com/maxbrunsfeld/vim-yankstack) mappings to manage the kill-ring (clipboard): - nmap yankstack_substitute_older_paste - nmap yankstack_substitute_newer_paste +```vim +nmap yankstack_substitute_older_paste +nmap yankstack_substitute_newer_paste +``` [ctrl-p](https://github.com/ctrlpvim/ctrlp.vim) mappings to easily find and open a file, buffer, etc.: - let g:ctrlp_map = '' - map j :CtrlP - map :CtrlPBuffer +```vim +let g:ctrlp_map = '' +map j :CtrlP +map :CtrlPBuffer +``` [vim-snipmate](https://github.com/garbas/vim-snipmate) mappings to autocomplete via snippets: - ino =snipMate#TriggerSnippet() - snor i=snipMate#TriggerSnippet() +```vim +ino =snipMate#TriggerSnippet() +snor i=snipMate#TriggerSnippet() +``` [vim-surround](https://github.com/tpope/vim-surround) mappings to easily surround a string with `_()` gettext annotation: - vmap Si S(i_f) - au FileType mako vmap Si S"i${ _(2f"a) } +```vim +vmap Si S(i_f) +au FileType mako vmap Si S"i${ _(2f"a) } +``` [ale](https://github.com/dense-analysis/ale) to easily go to the next Ale syntax/lint error: - nmap a (ale_next_wrap) +```vim +nmap a (ale_next_wrap) +``` [vim-indent-guides](https://github.com/nathanaelkane/vim-indent-guides) the default mapping to toggle the plugin is (`ig`) - You can also use the following commands inside Vim: - :IndentGuidesEnable - :IndentGuidesDisable - :IndentGuidesToggle +```vim +" You can also use the following commands inside Vim: +:IndentGuidesEnable +:IndentGuidesDisable +:IndentGuidesToggle +``` [vim-fugitive](https://github.com/tpope/vim-fugitive) to copy the link to the line of a Git repository to the clipboard: - nnoremap v :.GBrowse! - xnoremap v :'<'>GBrowse! - +```vim +nnoremap v :.GBrowse! +xnoremap v :'<'>GBrowse! +``` ### Spell checking + Pressing `ss` will toggle spell checking: - map ss :setlocal spell! +```vim +map ss :setlocal spell! +``` Shortcuts using `` instead of special characters: - map sn ]s - map sp [s - map sa zg - map s? z= +```vim +map sn ]s +map sp [s +map sa zg +map s? z= +``` ### Running Code + To run code directly from vim, press `F5`. The currently open code will execute without you having to type anything. -Can be used to execute code written in C, C++, Java, Python, Go, Octave, Bash scripts and HTML. To edit how you want your code to be executed, make changes in the file -``` +Can be used to execute code written in C, C++, Java, Python, Go, Octave, Bash scripts and HTML. To edit how you want your code to be executed, make changes in the file + +```sh ~/.vim_runtime/vimrcs/extended.vim ``` ### Cope + Query `:help cope` if you are unsure what cope is. It's super useful! When you search with `Ack.vim`, display your results in cope by doing: @@ -392,21 +464,22 @@ To go to the previous search results do: Cope mappings: - map cc :botright cope - map co ggVGy:tabnew:set syntax=qfpgg - map n :cn - map p :cp - +```vim +map cc :botright cope +map co ggVGy:tabnew:set syntax=qfpgg +map n :cn +map p :cp +``` ## How to uninstall + Just do following: + * Remove `~/.vim_runtime` * Remove any lines that reference `.vim_runtime` in your `~/.vimrc` - ## Looking for a remote-first job? Maintaining this Vim configuration isn't my day job. Daily I am the founder/CEO of [Doist](https://doist.com/). You could come and help us build the workplace of the future while living a balanced life (anywhere in the world 🌍🌎🌏). PS: Using Vim isn't a requirement 😄 -