Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- " From:
- " Amir Salihefendic
- " http://amix.dk - amix@amix.dk
- "
- " Version:
- " 5.0 - 29/05/12 15:43:36
- "
- " Sections:
- " -> General
- " -> VIM user interface
- " -> Colors and Fonts
- " -> Files and backups
- " -> Text, tab and indent related
- " -> Visual mode related
- " -> Moving around, tabs and buffers
- " -> Status line
- " -> Editing mappings
- " -> vimgrep searching and cope displaying
- " -> Spell checking
- " -> Misc
- " -> Helper functions
- "
- """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
- "Plug 'scrooloose/nerdtree', { 'on': 'NERDTreeToggle' }
- "Plug 'w0rp/ale'
- "
- let $MYVIMRC = split($VIM, "\\")[0] . "\\config\\nvim\\init.vim"
- " Windows setup
- let $HOMEDRIVE = split($VIM, "\\")[0]
- let $HOMEPATH = "\\"
- let $HOME = $HOMEDRIVE . $HOMEPATH
- let $USERPROFILE = $HOME
- let $LOCALAPPDATA = $HOME . "config"
- let $PATH = $HOMEDRIVE . "\\emacs\\mingw64\\bin" . ";" . $HOMEDRIVE . "\\emacs\\bin" . ";" . $HOMEDRIVE . "\\cmder" . ";" . $HOMEDRIVE . "\\emacs\\Git\\bin" . ";" . "C:\\Windows\\System32" . ";" . "C:\\Windows"
- set nocompatible " be improved, required
- filetype off " required
- " set the runtime path to include Vundle and initialize
- "if has('nvim')
- " let s:editor_root=expand("~\AppData\Local\nvim")
- "else
- " let s:editor_root=expand("~\.vim")
- "endif
- set rtp+=~\config\nvim\bundle\Vundle.vim
- "let &rtp = &rtp . ',' . s:editor_root . '/bundle/vundle/'
- call vundle#begin() " required
- Plugin 'VundleVim/Vundle.vim' " required
- " ===================
- " my plugins here
- " ===================
- Plugin 'tpope/vim-fugitive'
- Plugin 'scrooloose/nerdtree'
- " Plugin 'dracula/vim'
- " ===================
- " end of plugins
- " ===================
- call vundle#end() " required
- filetype plugin indent on " required
- set mat=1
- """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
- " => Turn persistent undo on
- " means that you can undo even when you close a buffer/VIM
- """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
- try
- set undodir=~/.vim-undo
- set undofile
- catch
- endtry
- """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
- " => Command mode related
- """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
- " Smart mappings on the command line
- cno $h e ~/
- cno $d e ~/Desktop/
- cno $j e ./
- cno $c e <C-\>eCurrentFileDir("e")<cr>
- " $q is super useful when browsing on the command line
- " it deletes everything until the last slash
- cno $q <C-\>eDeleteTillSlash()<cr>
- " Bash like keys for the command line
- cnoremap <C-A> <Home>
- cnoremap <C-E> <End>
- cnoremap <C-K> <C-U>
- cnoremap <C-P> <Up>
- cnoremap <C-N> <Down>
- """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
- " => Parenthesis/bracket
- """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
- 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>
- " Map auto complete of (, ", ', [
- 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
- """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
- " => General
- """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
- " Don't emulate vi
- set nocompatible
- " Provides tab-completion for all file-related tasks
- set path+=**
- " Display all matching files for tab completion
- set wildmenu
- " TODO Create tags file
- " command! MakeTags !ctags -R . --pwd needs to be checked first
- " File browsing
- " let g:netrw_banner=0 " disable annoying banner
- " let g:netrw_browse_split=4 " open in prior window
- " let g:netrw_altv=1 " open splits to the right
- " let g:netrw_liststyle=3 " tree view
- " let g:netrw_list_hide=netrw_gitignore#Hide()
- " let g:netrw_list_hide.=',\(^\|\s\s\)\zs\.\S\+'
- " Sets how many lines of history VIM has to remember
- set history=500
- " Enable clipboard
- " set clipboard=unnamedplus
- " Enable filetype plugins
- filetype plugin on
- filetype indent on
- " Set to auto read when a file is changed from the outside
- set autoread
- " With a map leader it's possible to do extra key combinations
- " like <leader>w saves the current file
- let mapleader = ","
- let g:mapleader = ","
- " ..............................................................
- nnoremap ; :
- vnoremap ; :
- " Fast saving
- nmap <leader>w :w!<cr>
- " :W sudo saves the file
- " (useful for handling the permission-denied error)
- command W w !sudo tee % > /dev/null
- " Key code delay
- if !has('nvim') && &ttimeoutlen == -1
- set ttimeout
- set ttimeoutlen=100
- endif
- " Delete comment character when joining commented lines
- set formatoptions+=j
- if has('path_extra')
- setglobal tags-=./tags tags-=./tags; tags^=./tags;
- endif
- """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
- " => VIM user interface
- """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
- " Set 7 lines to the cursor - when moving vertically using j/k
- set so=2
- " Avoid garbled characters in Chinese language windows OS
- let $LANG='en'
- set langmenu=en
- "source $VIMRUNTIME/delmenu.vim
- "source $VIMRUNTIME/menu.vim
- " Turn on the WiLd menu
- set wildmenu
- " Ignore compiled files
- set wildignore=*.o,*~,*.pyc
- if has("win16") || has("win32")
- set wildignore+=.git\*,.hg\*,.svn\*
- else
- set wildignore+=*/.git/*,*/.hg/*,*/.svn/*,*/.DS_Store
- endif
- "Always show current position
- set ruler
- " Enable numbers
- set relativenumber
- " Height of the command bar
- set cmdheight=2
- " A buffer becomes hidden when it is abandoned
- set hid
- " Configure backspace so it acts as it should act
- set backspace=eol,start,indent
- set whichwrap+=<,>,h,l
- " Ignore case when searching
- set ignorecase
- " When searching try to be smart about cases
- set smartcase
- " Highlight search results
- set hlsearch
- " Makes search act like search in modern browsers
- set incsearch
- " Don't redraw while executing macros (good performance config)
- set lazyredraw
- " For regular expressions turn magic on
- set magic
- " Show matching brackets when text indicator is over them
- set showmatch
- " How many tenths of a second to blink when matching brackets
- set mat=2
- " No annoying sound on errors
- set noerrorbells
- set novisualbell
- set t_vb=
- set tm=500
- " Properly disable sound on errors on MacVim
- if has("gui_macvim")
- autocmd GUIEnter * set vb t_vb=
- endif
- " Add a bit extra margin to the left
- set foldcolumn=1
- " Show extra space characters
- " set list listchars=tab:ยปยท,trail:ยท
- if &listchars ==# 'eol:$'
- set listchars=tab:>\ ,trail:-,extends:>,precedes:<,nbsp:+
- endif
- " Highlight current line
- set cursorline
- " @@@
- set display+=lastline
- """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
- " => Colors and Fonts
- """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
- " Enable syntax highlighting
- syntax enable
- set t_Co=256
- source $VIM\theme.vim
- " Set extra options when running in GUI mode
- if has("gui_running")
- set guioptions-=T
- set guioptions-=e
- set guitablabel=%M\ %t
- endif
- " Set utf8 as standard encoding and en_US as the standard language
- set encoding=utf8
- " Use Unix as the standard file type
- set ffs=unix,dos,mac
- """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
- " => Files, backups and undo
- """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
- " Turn backup off, since most stuff is in SVN, git et.c anyway...
- set nobackup
- set wb
- set noswapfile
- """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
- " => Text, tab and indent related
- """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
- " Use spaces instead of tabs
- set expandtab
- " Be smart when using tabs ;)
- set smarttab
- " 1 tab == 4 spaces
- set shiftwidth=4
- set tabstop=4
- " Linebreak on 500 characters
- set lbr
- set tw=500
- set ai "Auto indent
- set si "Smart indent
- set wrap "Wrap lines
- """"""""""""""""""""""""""""""
- " => Visual mode related
- """"""""""""""""""""""""""""""
- " Visual mode pressing * or # searches for the current selection
- " Super useful! From an idea by Michael Naumann
- vnoremap <silent> * :<C-u>call VisualSelection('', '')<CR>/<C-R>=@/<CR><CR>
- vnoremap <silent> # :<C-u>call VisualSelection('', '')<CR>?<C-R>=@/<CR><CR>
- """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
- " => Moving around, tabs, windows and buffers
- """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
- " Map <Space> to / (search) and Ctrl-<Space> to ? (backwards search)
- map <space> <Nop>
- map <c-space> <Nop>
- " Disable highlight when <leader><cr> is pressed
- " map <silent> <leader><cr> :noh<cr>
- if maparg('<leader><cr>', 'n') ==# ''
- nnoremap <silent> <leader><cr> :nohlsearch<C-R>=has('diff')?'<Bar>diffupdate':''<CR><CR><C-L>
- endif
- " 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
- " Close the current buffer
- map <leader>bd :Bclose<cr>:tabclose<cr>gT
- " Close all the buffers
- map <leader>ba :bufdo bd<cr>
- " Close all the buffers
- map <leader>bb :ls<cr>
- " Navigate through buffers
- map <leader>, :bnext<cr>
- map <leader>. :bprevious<cr>
- map <leader>1 :b1<cr>
- map <leader>2 :b2<cr>
- map <leader>3 :b3<cr>
- map <leader>4 :b4<cr>
- map <leader>5 :b5<cr>
- map <leader>6 :b6<cr>
- map <leader>7 :b7<cr>
- map <leader>8 :b8<cr>
- map <leader>9 :b9<cr>
- map <leader>0 :b0<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<cr>
- map <leader>t<leader> :tabnext<cr>
- " Let 'tl' toggle between this and the last accessed tab
- let g:lasttab = 1
- nmap <Leader>tl :exe "tabn ".g:lasttab<CR>
- au TabLeave * let g:lasttab = tabpagenr()
- " 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>
- " Specify the behavior when switching between buffers
- try
- set switchbuf=useopen,usetab,newtab
- set stal=2
- catch
- endtry
- " Return to last edit position when opening files
- au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif
- """"""""""""""""""""""""""""""
- " => Status line
- """"""""""""""""""""""""""""""
- " Always show the status line
- set laststatus=2
- " Format the status line
- set statusline=\ %{HasPaste()}%F%m%r%h\ %w\ \ CWD:\ %r%{getcwd()}%h\ \ \ f:%{&ff}\ \ i:\%03.3b,0x:\%02.2B\ \ (%03l,%03v)[%p%%]
- """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
- " => Editing mappings
- """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
- " Remap VIM 0 to first non-blank character
- map 0 ^
- " Move a line of text using ALT+[jk] or Command+[jk] on mac
- nmap <M-j> mz:m+<cr>`z
- nmap <M-k> mz:m-2<cr>`z
- vmap <M-j> :m'>+<cr>`<my`>mzgv`yo`z
- vmap <M-k> :m'<-2<cr>`>my`<mzgv`yo`z
- " TODO fix keybindings
- " Delete trailing white space on save, useful for Python and CoffeeScript ;)
- func! DeleteTrailingWS()
- exe "normal mz"
- %s/\s\+$//ge
- exe "normal `z"
- endfunc
- autocmd BufWrite *.py :call DeleteTrailingWS()
- autocmd BufWrite *.coffee :call DeleteTrailingWS()
- inoremap <C-U> <C-G>u<C-U>
- """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
- " => Ag searching and cope displaying
- " requires ag.vim - it's much better than vimgrep/grep
- """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
- " When you press gv you Ag after the selected text
- vnoremap <silent> gv :call VisualSelection('gv', '')<CR>
- " Open Ag and put the cursor in the right position
- map <leader>g :Ag
- " When you press <leader>r you can search and replace the selected text
- vnoremap <silent> <leader>r :call VisualSelection('replace', '')<CR>
- " Do :help cope if you are unsure what cope is. It's super useful!
- "
- " When you search with Ag, display your results in cope by doing:
- " <leader>cc
- "
- " To go to the next search result do:
- " <leader>n
- "
- " To go to the previous search results do:
- " <leader>p
- "
- 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>
- """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
- " => Spell checking
- """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
- " Pressing ,ss will toggle and untoggle spell checking
- map <leader>ss :setlocal spell!<cr>
- " Shortcuts using <leader>
- map <leader>sn ]s
- map <leader>sp [s
- map <leader>sa zg
- map <leader>s? z=
- """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
- " => Misc
- """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
- " 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 scribble
- map <leader>q :e ~/buffer<cr>
- " Quickly open a markdown buffer for scribble
- map <leader>x :e ~/buffer.md<cr>
- " Toggle paste mode on and off
- map <leader>pp :setlocal paste!<cr>
- """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
- " => Plug-ins related
- """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
- "
- " Plug-ins setup
- "
- " NERDTree
- autocmd BufEnter * lcd %:p:h
- " ale
- " let g:ale_echo_msg_error_str = 'E'
- " let g:ale_echo_msg_warning_str = 'W'
- " let g:ale_echo_msg_format = '[%linter%] %s [%severity%]'
- " let g:ale_fixers = {
- \ 'c': ['clang-format']}
- " TODO Figure out how to pass args to clang-format
- " let g:ale_c_clangformat_executable='-style=Mozilla'
- "
- " Plug-ins keybindings
- "
- nnoremap - :NERDTreeToggle<cr>
- " nmap <silent> ]a <Plug>(ale_next_wrap)
- " nmap <silent> [a <Plug>(ale_previous_wrap)
- " nmap <leader>T :ALEToggle<cr>
- """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
- " => Helper functions
- """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
- function! CmdLine(str)
- exe "menu Foo.Bar :" . a:str
- emenu Foo.Bar
- unmenu Foo
- endfunction
- function! VisualSelection(direction, extra_filter) range
- let l:saved_reg = @"
- execute "normal! vgvy"
- let l:pattern = escape(@", '\\/.*$^~[]')
- let l:pattern = substitute(l:pattern, "\n$", "", "")
- if a:direction == 'gv'
- call CmdLine("Ag \"" . l:pattern . "\" " )
- elseif a:direction == 'replace'
- call CmdLine("%s" . '/'. l:pattern . '/')
- endif
- let @/ = l:pattern
- let @" = l:saved_reg
- endfunction
- " Returns true if paste mode is enabled
- function! HasPaste()
- if &paste
- return 'PASTE MODE '
- endif
- return ''
- endfunction
- " Don't close window, when deleting a buffer
- command! Bclose call <SID>BufcloseCloseIt()
- function! <SID>BufcloseCloseIt()
- let l:currentBufNum = bufnr("%")
- let l:alternateBufNum = bufnr("#")
- if buflisted(l:alternateBufNum)
- buffer #
- else
- bnext
- endif
- if bufnr("%") == l:currentBufNum
- new
- endif
- if buflisted(l:currentBufNum)
- execute("bdelete! ".l:currentBufNum)
- endif
- endfunction
- func! DeleteTillSlash()
- let g:cmd = getcmdline()
- if has("win16") || has("win32")
- let g:cmd_edited = substitute(g:cmd, "\\(.*\[\\\\]\\).*", "\\1", "")
- else
- let g:cmd_edited = substitute(g:cmd, "\\(.*\[/\]\\).*", "\\1", "")
- endif
- if g:cmd == g:cmd_edited
- if has("win16") || has("win32")
- let g:cmd_edited = substitute(g:cmd, "\\(.*\[\\\\\]\\).*\[\\\\\]", "\\1", "")
- else
- let g:cmd_edited = substitute(g:cmd, "\\(.*\[/\]\\).*/", "\\1", "")
- endif
- endif
- return g:cmd_edited
- endfunc
- func! CurrentFileDir(cmd)
- return a:cmd . " " . expand("%:p:h") . "/"
- endfunc
- " function! LinterStatus() abort
- " let l:counts = ale#statusline#Count(bufnr(''))
- "
- " let l:all_errors = l:counts.error + l:counts.style_error
- " let l:all_non_errors = l:counts.total - l:all_errors
- "
- " return l:counts.total == 0 ? 'OK' : printf(
- " \ '%dW %dE',
- " \ all_non_errors,
- " \ all_errors
- " \)
- " endfunction
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement