Created
May 29, 2021 12:43
-
-
Save bytefluxio/af86f8697f15b16ddd285322aaa215b7 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" General | |
""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" Sets how many lines of history VIM remembers | |
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 | |
au FocusGained,BufEnter * checktime | |
" Set mapleader | |
let mapleader = "," | |
" :W sudo saves the file | |
" (useful for handling the permission-denied error) | |
command! W execute 'w !sudo tee % > /dev/null' <bar> edit! | |
""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" VIM user interface | |
""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" Show line number | |
set number | |
" Set 7 lines to the cursor - when moving vertically using j/k | |
set so=7 | |
" 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 | |
" Height of the command bar | |
set cmdheight=1 | |
" 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 | |
" Add a bit extra margin to the left | |
" set foldcolumn=1 | |
""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" Colors and Fonts | |
""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" Enable syntax heighlighting | |
syntax enable | |
" Set utf8 as standard encoding | |
set encoding=utf8 | |
" Use Unix as the standard file type | |
set ffs=unix,dos,mac | |
""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" Files, backups and undo | |
""""""""""""""""""""""""""""""""""""""""""""""""""" | |
set nobackup | |
set nowb | |
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 | |
""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" Text, tab and indent related | |
""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" Map <Space> to / (search) and Ctrl-<Space> to ? (backwards search) | |
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> | |
" 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 (You want this!) | |
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\ \ \ Line:\ %l/%L\ \ Column:\ %c | |
""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" 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 | |
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 ;) | |
fun! CleanExtraSpaces() | |
let save_cursor = getpos(".") | |
let old_query = getreg('/') | |
silent! %s/\s\+$//e | |
call setpos('.', save_cursor) | |
call setreg('/', old_query) | |
endfun | |
if has("autocmd") | |
autocmd BufWritePre *.txt,*.js,*.py,*.wiki,*.sh,*.coffee :call CleanExtraSpaces() | |
endif | |
""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" 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> | |
""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" Helper function | |
""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" 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 | |
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 | |
""""""""""""""""""""""""""""""""""""""""""""""""""" | |
" FILETYPE SECTION | |
""""""""""""""""""""""""""""""""""""""""""""""""""" | |
"""""""""""""""""""""""""""""" | |
" Python | |
"""""""""""""""""""""""""""""" | |
let python_highlight_all = 1 | |
au FileType python syn keyword pythonDecorator True None False self | |
au BufNewFile,BufRead *.jinja set syntax=htmljinja | |
au BufNewFile,BufRead *.mako set ft=mako | |
au FileType python map <buffer> F :set foldmethod=indent<cr> | |
au FileType python inoremap <buffer> $r return | |
au FileType python inoremap <buffer> $i import | |
au FileType python inoremap <buffer> $p print | |
au FileType python inoremap <buffer> $f # --- <esc>a | |
au FileType python map <buffer> <leader>1 /class | |
au FileType python map <buffer> <leader>2 /def | |
au FileType python map <buffer> <leader>C ?class | |
au FileType python map <buffer> <leader>D ?def | |
"""""""""""""""""""""""""""""" | |
" JavaScript | |
"""""""""""""""""""""""""""""" | |
au FileType javascript call JavaScriptFold() | |
au FileType javascript setl fen | |
au FileType javascript setl nocindent | |
au FileType javascript imap <C-t> $log();<esc>hi | |
au FileType javascript imap <C-a> alert();<esc>hi | |
au FileType javascript inoremap <buffer> $r return | |
au FileType javascript inoremap <buffer> $f // --- PH<esc>FP2xi | |
function! JavaScriptFold() | |
setl foldmethod=syntax | |
setl foldlevelstart=1 | |
syn region foldBraces start=/{/ end=/}/ transparent fold keepend extend | |
function! FoldText() | |
return substitute(getline(v:foldstart), '{.*', '{...}', '') | |
endfunction | |
setl foldtext=FoldText() | |
endfunction | |
"""""""""""""""""""""""""""""" | |
" CoffeeScript section | |
"""""""""""""""""""""""""""""" | |
function! CoffeeScriptFold() | |
setl foldmethod=indent | |
setl foldlevelstart=1 | |
endfunction | |
au FileType coffee call CoffeeScriptFold() | |
au FileType gitcommit call setpos('.', [0, 1, 1, 0]) | |
"""""""""""""""""""""""""""""" | |
" Shell | |
"""""""""""""""""""""""""""""" | |
if exists('$TMUX') | |
if has('nvim') | |
set termguicolors | |
else | |
set term=screen-256color | |
endif | |
endif | |
"""""""""""""""""""""""""""""" | |
" Twig | |
"""""""""""""""""""""""""""""" | |
autocmd BufRead *.twig set syntax=html filetype=html | |
"""""""""""""""""""""""""""""" | |
" Markdown | |
"""""""""""""""""""""""""""""" | |
let vim_markdown_folding_disabled = 1 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment