2012-10-20 13:28:11 -04:00
# The Ultimate vimrc of hustcalm forked from amix
2012-10-20 13:32:35 -04:00
**Below is the original readme post of amix**
2012-05-29 12:19:29 -04:00
2012-05-29 17:32:24 -04:00
Over the last 8 years I have used and tweaked Vim. This is my Ultimate vimrc.
There are two versions:
2012-05-29 17:48:36 -04:00
* **Basic**: If you want something small just copy [basic.vim ](https://github.com/amix/vimrc/blob/master/vimrcs/basic.vim ) into your ~/.vimrc and you will have a great basic setup
* **Awesome**: This includes a ton of useful plugins, color schemes and configurations
2012-05-29 17:32:24 -04:00
I would of course recommend using the awesome version.
2012-05-30 13:04:21 -04:00
## How to install the Basic version?
2012-05-29 17:32:24 -04:00
The basic version is basically just one file and no plugins. You can check out [basic.vim ](https://github.com/amix/vimrc/blob/master/vimrcs/basic.vim ).
This is useful to install on remote servers where you don't need many plugins and you don't do many edits.
git clone git://github.com/amix/vimrc.git ~/.vim_runtime
sh ~/.vim_runtime/install_basic_vimrc.sh
2012-05-30 12:31:10 -04:00
2012-05-29 17:32:24 -04:00
2012-05-30 13:04:21 -04:00
## How to install the Awesome version?
2012-05-29 17:32:24 -04:00
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:
git clone git://github.com/amix/vimrc.git ~/.vim_runtime
sh ~/.vim_runtime/install_awesome_vimrc.sh
2012-05-30 13:04:21 -04:00
## How to install on Windows?
2012-05-30 12:31:10 -04:00
2012-05-30 13:04:21 -04:00
Use [msysgit ](http://msysgit.github.com/ ) to checkout the repository and run the installation instructions above. No special instructions needed ;-)
2012-05-30 12:31:10 -04:00
2012-08-15 23:22:34 -04:00
## How to update to latest version?
Simply just do a git rebase!
cd ~/.vim_runtime
git pull --rebase
2012-05-29 17:45:13 -04:00
## Some screenshots
Colors when editing a Python file:
![Screenshot 1 ](http://files1.wedoist.com/e952fdb343b1e617b90d256e474d0370/as/screenshot_1.png )
Opening recently opened files [mru.vim ](https://github.com/vim-scripts/mru.vim ):
![Screenshot 2 ](http://files1.wedoist.com/1967b0e48af40e513d1a464e08196990/as/screenshot_2.png )
2012-05-30 12:31:10 -04:00
[NERD Tree ](https://github.com/scrooloose/nerdtree ) plugin in a terminal window:
![Screenshot 3 ](http://files1.wedoist.com/b1509d7ed9e9f357e8d04797f9fad67b/as/screenshot3.png )
2012-05-29 17:45:13 -04:00
2012-05-30 13:04:21 -04:00
This vimrc even works on Windows!
![Screenshot 4 ](http://files1.wedoist.com/4e85163d97b81422240c822c82022f2f/as/screenshot_4.png )
2012-05-29 17:45:13 -04:00
2012-05-29 17:32:24 -04:00
## What plugins are included?
2012-05-30 13:06:22 -04:00
I recommend reading the docs of these plugins to understand them better. Each of them provide a much better Vim experience!
2012-05-29 17:32:24 -04:00
2012-08-15 23:19:21 -04:00
* [pathogen.vim ](https://github.com/tpope/vim-pathogen ): Manages the runtime path of the plugins
2012-05-29 17:32:24 -04:00
* [YankRing ](https://github.com/vim-scripts/YankRing.vim ): Maintains a history of previous yanks, changes and deletes
* [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
2012-05-29 17:50:00 -04:00
* [bufexplorer.zip ](https://github.com/vim-scripts/bufexplorer.zip ): Buffer Explorer / Browser. This plugin can be opened with `<leader+o>`
2012-05-29 17:32:24 -04:00
* [NERD Tree ](https://github.com/scrooloose/nerdtree ): A tree explorer plugin for vim
* [ack.vim ](github.com/mileszs/ack.vim ): Vim plugin for the Perl module / CLI script 'ack'
* [vim-powerline ](https://github.com/Lokaltog/vim-powerline ): The ultimate vim statusline utility
2012-05-29 17:50:00 -04:00
* [ctrlp.vim ](https://github.com/kien/ctrlp.vim ): Fuzzy file, buffer, mru and tag finder. In my config it's mapped to `<Ctrl+F>` , because `<Ctrl+P>` is used by YankRing
* [mru.vim ](https://github.com/vim-scripts/mru.vim ): Plugin to manage Most Recently Used (MRU) files. Includes my own fork which adds syntax highlighting to MRU. This plugin can be opened with `<leader+f>`
* [open_file_under_cursor.vim ](https://github.com/amix/open_file_under_cursor.vim ): Open file under cursor when pressing `gf`
2013-04-13 13:54:26 -04:00
* [zencoding ](https://github.com/mattn/zencoding-vim ): Expanding abbreviation like zen-coding, very useful for editing XML, HTML.
* [vim-indent-object ](https://github.com/michaeljsmith/vim-indent-object ): Defines a new text object representing lines of code at the same indent level. Useful for python/vim scripts
* [taglist.vim ](https://github.com/vim-scripts/taglist.vim ): Source code browser (supports C/C++, java, perl, python, tcl, sql, php, etc)
2013-04-16 09:27:16 -04:00
* [vim-multiple-cursors ](https://github.com/terryma/vim-multiple-cursors ): Sublime Text style multiple selections for Vim, CTRL+N is remapped to CTRL+S (due to YankRing)
2013-04-14 11:48:31 -04:00
* [vim-expand-region ](https://github.com/terryma/vim-expand-region ): Allows you to visually select increasingly larger regions of text using the same key combination.
2012-05-29 17:32:24 -04:00
## What color schemes are included?
* [peaksea ](https://github.com/vim-scripts/peaksea ): My favorite!
* [vim-colors-solarized ](https://github.com/altercation/vim-colors-solarized )
* [vim-irblack ](https://github.com/wgibbs/vim-irblack )
* [mayansmoke ](https://github.com/vim-scripts/mayansmoke )
* [vim-pyte ](https://github.com/therubymug/vim-pyte )
## What modes are included?
* [vim-coffee-script ](https://github.com/kchmck/vim-coffee-script )
* [vim-less ](https://github.com/groenewege/vim-less )
* [vim-bundle-mako ](https://github.com/sophacles/vim-bundle-mako )
2012-05-30 13:04:21 -04:00
* [vim-markdown ](https://github.com/tpope/vim-markdown )
2013-04-13 13:54:26 -04:00
* [nginx.vim ](https://github.com/vim-scripts/nginx.vim ): Highlights configuration files for nginx
2012-05-29 17:32:24 -04:00
## How to include your own stuff?
2012-05-30 13:06:22 -04:00
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:
2012-05-29 17:32:24 -04:00
~/.vim_runtime (master)> cat my_configs.vim
map < leader > ct :cd ~/Desktop/Todoist/todoist< cr >
map < leader > cw :cd ~/Desktop/Wedoist/wedoist< cr >
2012-05-30 13:06:22 -04:00
You can also install your own plugins, for instance, via pathogen we can install [vim-rails ](https://github.com/tpope/vim-rails ):
2012-05-29 17:32:24 -04:00
cd ~/.vim_runtime
2013-04-14 11:50:51 -04:00
git clone git://github.com/tpope/vim-rails.git sources_non_forked/vim-rails
2012-05-29 17:32:24 -04:00
Now you have vim-rails installed ;-)
2012-05-29 17:51:17 -04:00
## Key Mappings
2012-05-29 17:32:24 -04:00
### Plugin related mappings
2012-05-30 12:31:10 -04:00
Open [bufexplorer ](https://github.com/vim-scripts/bufexplorer.zip ) and see and manage the current buffers:
2012-05-29 17:32:24 -04:00
map < leader > o :BufExplorer< cr >
2012-05-30 12:31:10 -04:00
Open [MRU.vim ](https://github.com/vim-scripts/mru.vim ) and see the recently open files:
2012-05-29 17:32:24 -04:00
map < leader > f :MRU< CR >
2012-05-30 12:31:10 -04:00
Open [ctrlp.vim ](https://github.com/kien/ctrlp.vim ) plugin:
2012-05-29 17:32:24 -04:00
let g:ctrlp_map = '< c-f > '
2012-05-30 12:31:10 -04:00
Open [PeepOpen ](https://peepcode.com/products/peepopen ) plugin:
2012-05-29 17:32:24 -04:00
map < leader > j :PeepOpen< cr >
2012-05-30 12:31:10 -04:00
Managing the [NERD Tree ](https://github.com/scrooloose/nerdtree ) plugin:
2012-05-29 17:32:24 -04:00
map < leader > nn :NERDTreeToggle< cr >
map < leader > nb :NERDTreeFromBookmark
map < leader > nf :NERDTreeFind< cr >
### Normal mode mappings
2013-04-14 11:48:31 -04:00
2012-05-29 17:32:24 -04:00
Fast saving of a buffer:
nmap < leader > w :w!< cr >
Treat long lines as break lines (useful when moving around in them):
map j gj
map k gk
2012-05-30 12:31:10 -04:00
Map `<Space>` to `/` (search) and `<Ctrl>+<Space>` to `?` (backwards search):
2012-05-29 17:32:24 -04:00
map < space > /
map < c-space > ?
map < silent > < leader > < cr > :noh< cr >
Disable highlight when `<leader><cr>` is pressed:
map < silent > < leader > < cr > :noh< cr >
Smart way to move between windows:
map < C-j > < C-W > j
map < C-k > < C-W > k
map < C-h > < C-W > h
map < C-l > < C-W > l
Closing of current buffer(s):
" Close current buffer
map < leader > bd :Bclose< cr >
" Close all buffers
map < leader > ba :1,1000 bd!< cr >
Useful mappings for managing tabs:
map < leader > tn :tabnew< cr >
map < leader > to :tabonly< cr >
map < leader > tc :tabclose< cr >
map < leader > tm :tabmove
" Opens a new tab with the current buffer's path
" Super useful when editing files in the same directory
map < leader > te :tabedit < c-r > =expand("%:p:h")< cr > /
Switch CWD to the directory of the open buffer:
map < leader > cd :cd %:p:h< cr > :pwd< cr >
Open vimgrep and put the cursor in the right position:
map < leader > g :vimgrep // ** /*.< left >< left >< left >< left >< left >< left >< left >
Vimgreps in the current file:
map < leader > < space > :vimgrep // < C-R > %< C-A > < right > < right > < right > < right > < right > < right > < right > < right > < right >
Remove the Windows ^M - when the encodings gets messed up:
noremap < leader > m mmHmt:%s/< C-V > < cr > //ge< cr > 'tzt'm
Quickly open a buffer for scripbble:
map < leader > q :e ~/buffer< cr >
Toggle paste mode on and off:
map < leader > pp :setlocal paste!< cr >
### Insert mode mappings
Quickly insert parenthesis/brackets/etc.:
inoremap $1 ()< esc > i
inoremap $2 []< esc > i
inoremap $3 {}< esc > i
inoremap $4 {< esc > o}< esc > O
inoremap $q ''< esc > i
inoremap $e ""< esc > i
inoremap $t < >< esc > i
Insert the current date and time (useful for timestamps):
iab xdate < c-r > =strftime("%d/%m/%y %H:%M:%S")< cr >
### Visual mode mappings
2012-05-30 12:31:10 -04:00
Visual mode pressing `*` or `#` searches for the current selection:
2012-05-29 17:32:24 -04:00
vnoremap < silent > * :call VisualSelection('f')< CR >
vnoremap < silent > # :call VisualSelection('b')< CR >
When you press gv you vimgrep after the selected text:
vnoremap < silent > gv :call VisualSelection('gv')< CR >
When you press `<leader>r` you can search and replace the selected text:
vnoremap < silent > < leader > r :call VisualSelection('replace')< CR >
Surround the visual selection in parenthesis/brackets/etc.:
vnoremap $1 < esc > `>a)< esc > `< i ( < esc >
vnoremap $2 < esc > `>a]< esc > `< i [ < esc >
vnoremap $3 < esc > `>a}< esc > `< i { < esc >
vnoremap $$ < esc > `>a"< esc > `< i " < esc >
vnoremap $q < esc > `>a'< esc > `< i ' < esc >
vnoremap $e < esc > `>a"< esc > `< i " < esc >
### Command line mappings
2012-05-30 12:31:10 -04:00
$q is super useful when browsing on the command line. It deletes everything until the last slash:
2012-05-29 17:32:24 -04:00
cno $q < C- \>eDeleteTillSlash ()< cr >
2012-05-30 12:31:10 -04:00
Bash like keys for the command line:
2012-05-29 17:32:24 -04:00
cnoremap < C-A > < Home >
cnoremap < C-E > < End >
cnoremap < C-K > < C-U >
cnoremap < C-P > < Up >
cnoremap < C-N > < Down >
2013-04-14 11:48:31 -04:00
Write the file as sudo (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 ):
2013-04-13 13:45:21 -04:00
:W
2012-05-29 17:32:24 -04:00
### Spell checking
Pressing `<leader>ss` will toggle and untoggle spell checking
map < leader > ss :setlocal spell!< cr >
2012-05-30 12:31:10 -04:00
Shortcuts using `<leader>` instead of special chars
2012-05-29 17:32:24 -04:00
map < leader > sn ]s
map < leader > sp [s
map < leader > sa zg
map < leader > s? z=
### Cope
Do :help cope if you are unsure what cope is. It's super useful!
When you search with vimgrep, display your results in cope by doing:
2012-05-30 12:31:10 -04:00
`<leader>cc`
2012-05-29 17:32:24 -04:00
To go to the next search result do:
2012-05-30 12:31:10 -04:00
`<leader>n`
2012-05-29 17:32:24 -04:00
To go to the previous search results do:
2012-05-30 12:31:10 -04:00
`<leader>p`
Vimscript mappings:
2012-05-29 17:32:24 -04:00
map < leader > cc :botright cope< cr >
map < leader > co ggVGy:tabnew< cr > :set syntax=qf< cr > pgg
map < leader > n :cn< cr >
map < leader > p :cp< cr >
## Useful blog tips regarding my Vim setup
* [Vim: Annotate strings with gettext (the macro way) ](http://amix.dk/blog/post/19678#Vim-Annotate-strings-with-gettext-the-macro-way )
* [vimgrep: Searching through multiple file extensions ](http://amix.dk/blog/post/19672#vimgrep-Searching-through-multiple-file-extensions )
* [Filtering through vimgrep results using regular expressions ](http://amix.dk/blog/post/19666#Filtering-through-vimgrep-results-using-regular-expressions )
* [PeepOpen - File auto completion for Mac editors ](http://amix.dk/blog/post/19601#PeepOpen-File-auto-completion-for-Mac-editors )
* [Vim 7.3: Persistent undo and encryption! ](http://amix.dk/blog/post/19548#Vim-7-3-Persistent-undo-and-encryption )
* [Vim tips: Visual Search ](http://amix.dk/blog/post/19334#Vim-tips-Visual-Search )
* [Folding in Vim ](http://amix.dk/blog/post/19132#Folding-in-Vim )
2012-10-20 13:28:11 -04:00
2012-10-20 13:32:35 -04:00
**Above is the original readme post of amix**
2012-10-20 13:28:11 -04:00
2013-06-24 11:18:54 -04:00
2012-10-20 13:28:11 -04:00
# My Updates to The Ultimate vimrc
2012-10-29 07:23:06 -04:00
## Add some useful candinate plugins to the repo
See them in [vim_plugin_candintes_src ](https://github.com/hustcalm/vimrc/tree/master/vim_plugin_candinates_src ).All these plugins will be candinates to be added to my Ultimate vimrc.
2012-10-20 13:32:35 -04:00
2012-10-20 13:28:11 -04:00
You can also add your own favorite script from [vim-scripts.org ](http://vim-scripts.org/ ) or install from [github ](http://github.com/vim-scripts ).
2012-10-29 07:23:06 -04:00
## Use git and pathogen to manage vim plugins
2012-10-29 10:46:27 -04:00
### Amix's method
2012-10-29 07:23:06 -04:00
As amix mentioned, you can isntall your own plugins via pathogen,for instance vim-rails:
2012-10-29 07:26:28 -04:00
2012-10-29 07:23:06 -04:00
cd ~/.vim_runtime
2013-05-06 07:45:58 -04:00
git clone git://github.com/tpope/vim-rails.git sources_non_forked/vim-rails
2012-10-29 07:26:28 -04:00
2013-05-06 07:45:58 -04:00
After this,you got vim-rails under sources_non_forked/vim-rails as a git local repo.
2012-10-29 07:28:02 -04:00
2012-10-29 10:46:27 -04:00
**But** all you got at this time is a local repo and you may get upset if you want to share your very super plugin together with Ultimate vimrc.
### Manage with git submodule
2012-10-29 11:34:13 -04:00
Instead I'm using git submodule to manage vim plugins now(Alternately you can use [git subtree ](https://github.com/apenwarr/git-subtree.git )), clone them from github and install,config,update,delete,etc... And as a vimer, I prefer to drop the plugins to bundle rather than sources_plugins thus pathogen can find it automatically.
2012-10-29 10:46:27 -04:00
As we want to install vim-rails:
cd ~/.vim_runtime
2012-10-29 11:04:38 -04:00
git submodule add git://github.com/tpope/vim-rails.git bundle/vim-rails
2012-10-29 10:46:27 -04:00
git commit -a -m 'first commit with submodule vim-rails'
git submodule init
### Clone repo with Git Submodule
If you want to clone my repo and favor the vim plugins managed with submodule, you need to run:
git submodule init
git submmodule update
after you clone my repo.
### Update Installed module
2013-05-06 04:51:32 -04:00
cd bundle/vim-rails
2012-10-29 10:46:27 -04:00
git pull origin master
cd ~/.vim_runtime
git status
git commit -a -m 'update vim-rails'
git push
git submodule status
### Remove Sub Module
2012-10-29 11:04:38 -04:00
git rm --cached bundle/vim-rails
git rm bundle/vim-rails
2012-10-29 10:46:27 -04:00
vi .gitmoudles
vi .git/config
git add . & & git commit -m 'Remove Submodule vim-rails'
git submoudule sync
Above we use vi to edit .gitmoudles and .git/config to remove references to specific submoudle.
### git submodule reference
* [Tips-Using git submodule keep your vim plugin up-to-date ](http://www.allenwei.cn/tips-using-git-submodule-keep-your-plugin-up-to-date/ )
* [Git Submodule介绍与使用 ](http://blog.wu-boy.com/2011/09/introduction-to-git-submodule/ )
2013-06-24 11:14:03 -04:00
## Use Vundle to make life easier managing plugins
[Vundle ](https://github.com/gmarik/vundle ) is short for _Vim bundle_ and is a [Vim ](http://www.vim.org/ ) plugin manager.
[Vundle ](https://github.com/gmarik/vundle ) allows to:
- keep track and configure your scripts right in `.vimrc`
- [install] configured scripts (aka bundle)
- [update] configured scripts
- [search] by name [all available vim scripts]
- [clean] unused scripts up
- run above actions in a *single keypress* with [interactive mode]
Also [Vundle ](https://github.com/gmarik/vundle ):
- manages runtime path of your installed scripts
- regenerates helptag automatically
Simple commands like BundleInstall, BundleSearch, BundleClean get everything done!
For more info, please refer to the [offcial repository ](https://github.com/gmarik/vundle ).
2013-06-24 11:18:54 -04:00
Currently, I install Vundle as a git submodule and managed by pathogen, but for other plugins management, I'm happy to play with [Vundle ](https://github.com/gmarik/vundle ).
2013-05-06 07:36:46 -04:00
**Note:**
You can either use git submodule to manage your vim plugins as I do now, or you can manage using Amix's approach cause ha has provided a python script to get all the plugins updated with one single command.
2012-10-29 07:23:06 -04:00