diff options
Diffstat (limited to '_vim/vimrc')
| -rw-r--r-- | _vim/vimrc | 336 | 
1 files changed, 336 insertions, 0 deletions
| diff --git a/_vim/vimrc b/_vim/vimrc new file mode 100644 index 0000000..941ccb6 --- /dev/null +++ b/_vim/vimrc @@ -0,0 +1,336 @@ +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" Credit: +" Amir Salihefendic — @amix3k +" https://github.com/amix/vimrc/blob/master/vimrcs/basic.vim +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" + +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" => General +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" Sets how many lines of history VIM has to remember +set history=500 + +" 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 = "," + +" 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 + + +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" => VIM user interface +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +set mouse=a +set ignorecase +set smartcase +set hlsearch +set incsearch + +" Set 7 lines to the cursor - when moving vertically using j/k +set scrolloff=7 + +" Turn on the Wild menu +set wildmenu + +" Ignore compiled files +set wildignore=*.o,*~,*.pyc +set wildignore+=*/.git/*,*/.hg/*,*/.svn/*,*/.DS_Store + +" Height of the command bar +set cmdheight=1 + +" A buffer becomes hidden when it is abandoned +set hidden + +" Configure backspace so it acts as it should act +set backspace=eol,start,indent +set whichwrap+=<,>,h,l + +" 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 matchtime=2 + +" No annoying sound on errors +set noerrorbells +set novisualbell +set t_vb= +set timeoutlen=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 + +" Highlight the current line +set cursorline + + +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" => Colors and Fonts +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +syntax enable + +set t_Co=256 +if $COLORTERM == 'truecolor' +    set termguicolors +endif +if &term =~# '^screen' +    " Set terminal sequences for true colors (:help xterm-true-color) +    let &t_8f = "\<Esc>[38;2;%lu;%lu;%lum" +    let &t_8b = "\<Esc>[48;2;%lu;%lu;%lum" +endif + +colorscheme flattened_light + +if has("gui_running") +    set guioptions-=T  " No toolbar +    set guioptions-=e  " No GUI tabs +    set guioptions-=m  " No menu bar +    set guioptions-=l  " No left scrollbar +    set guioptions-=L  " No left scrollbar +    set guioptions-=r  " No right scrollbar +    set guioptions-=R  " No right scrollbar +    set guifont=IBM\ Plex\ Mono\ Medium\ 11 +    set guitablabel=%M\ %t +    set guicursor+=a:blinkoff0  " Disable cursor blinking +endif + + +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" => Files, backups and undo +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +set encoding=utf8 +set fileformats=unix,dos,mac + +" Turn backup off +set nobackup +set nowritebackup +set noswapfile + + +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" => Text, tab and indent related +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +set expandtab +set smarttab +set tabstop=8 +set shiftwidth=4 + +set autoindent +set smartindent +set wrap + +set linebreak +set textwidth=75 +set formatoptions+=m  " Break at multi-byte characters (e.g., CJK) + + +"""""""""""""""""""""""""""""" +" => 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> / +map <c-space> ? + +" 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 + +" Close the current buffer +map <leader>bd :Bclose<cr>:tabclose<cr>gT + +" Close all the buffers +map <leader>ba :bufdo bd<cr> + +map <leader>l :bnext<cr> +map <leader>h :bprevious<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 +map <leader>t<leader> :tabnext + +" Let 'tl' toggle between this and the last accessed tab +let g:lasttab = 1 +nmap <leader>tl :exe "tabn ".g:lasttab<CR> +autocmd 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 +set switchbuf=useopen,usetab,newtab +set showtabline=2 + +" Return to last edit position when opening files (You want this!) +autocmd BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif + + +"""""""""""""""""""""""""""""" +" => Status line +"""""""""""""""""""""""""""""" +" Always show the status line +set laststatus=2 + +" Returns true if paste mode is enabled +function! HasPaste() +    if &paste +        return '[PASTE] ' +    endif +    return '' +endfunction + +" Format the status line +set statusline=\ %{HasPaste()}%f%m%r%h\ %w\ %= +set statusline+=%{&fileencoding?&fileencoding:&encoding}\ %y\ %l,%c%V\ %P +set statusline+=\  " blank space + + +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" => Editing mappings +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" 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 + +if has("mac") || has("macunix") +    nmap <D-j> <M-j> +    nmap <D-k> <M-k> +    vmap <D-j> <M-j> +    vmap <D-k> <M-k> +endif + +" Delete trailing white space on save, useful for some filetypes ;) +function! CleanExtraSpaces() +    let save_cursor = getpos(".") +    let old_query = getreg('/') +    silent! %s/\s\+$//e +    call setpos('.', save_cursor) +    call setreg('/', old_query) +endfunction + +autocmd BufWritePre *.txt,*.js,*.py,*.wiki,*.sh,*.coffee :call CleanExtraSpaces() + + +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" => Spell checking +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +set spelllang=en_us,cjk + +" 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> + +" Disable F1 to open the help +map  <F1> <Esc> +imap <F1> <Esc> + + +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" => Helper functions +""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +" 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 + +function! CmdLine(str) +    call feedkeys(":" . a:str) +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("Ack '" . l:pattern . "' " ) +    elseif a:direction == 'replace' +        call CmdLine("%s" . '/'. l:pattern . '/') +    endif + +    let @/ = l:pattern +    let @" = l:saved_reg +endfunction | 
