Skip to content

Instantly share code, notes, and snippets.

@niko
Created March 12, 2018 08:33
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save niko/06c0d56db842d0076e124916dd3c48fb to your computer and use it in GitHub Desktop.
Save niko/06c0d56db842d0076e124916dd3c48fb to your computer and use it in GitHub Desktop.
set nocompatible
set number
" show invisible characters:
set list
set listchars=tab:▸\ ,eol:¬
set listchars+=trail:˙
" allow buffer changes without saving:
set hidden
syntax enable
filetype plugin indent on
set path+=** " :find … and :b …
set wildmenu
set wildmode=longest:full,full
set wildignore=*.swp,*.bak,*.pyc,*.class
set wildcharm=<C-z>
set history=10000 " remember more commands and search history
set undolevels=10000 " use many muchos levels of undo
set copyindent " copy the previous indentation on autoindenting
set scrolloff=1
" set cursorline " Highlight current line
" remember to autocomplete:
" everything: CTRL-n / CTRL-p
" filenames: CTRL-x CTRL-f
" file browsing:
let g:netrw_banner=0 " disable annoying banner
let g:netrw_browse_split=3 " open in prior window
let g:netrw_liststyle=3 " tree view
let g:netrw_list_hide=netrw_gitignore#Hide() " hide stuff in gitignore
let g:netrw_list_hide.=',\(^\|\s\s\)\zs\.\S\+' " hide stuff in gitignore
let g:netrw_sort_sequence = '[\/]$,*' " sort directories on the top, files below
" let g:netrw_altv = 1
" absolute width of netrw window
let g:netrw_winsize = -28
" open file in a new tab
" Tab navigation like Firefox.
nnoremap <C-h> :tabprevious<CR>
nnoremap <C-l> :tabnext<CR>
nnoremap <C-t> :tabnew<CR>
inoremap <C-h> <Esc>:tabprevious<CR>i
inoremap <C-l> <Esc>:tabnext<CR>i
inoremap <C-t> <Esc>:tabnew<CR>
" jump to last position when opening a file:
au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif
" no visual selection with mouse in normal/insert mode
set mouse=c
set showcmd
" search settings:
set incsearch " search as you type
set hlsearch " highligh search
set ignorecase " case insensitive search
set smartcase " case sensitive when uc present
set whichwrap=b,s,<,>,[,] " backspace and cursor keys wrap
nnoremap Y y$ " Yank from the cursor to the end of the line, to be consistent with C and D.
" visual shifting (does not exit Visual mode)
vnoremap < <gv
vnoremap > >gv
hi WarningMsg ctermfg=white ctermbg=red guifg=White guibg=Red gui=None
hi statusline guibg=DarkGrey ctermfg=8 guifg=White ctermbg=15
if has('statusline')
set laststatus=2
" Broken down into easily includeable segments:
set statusline=%{getcwd()}/%f\ " Path and filename
set statusline+=%w%h%m%r " Options
set statusline+=\ [%{&ff}/%Y] " Filetype
set statusline+=%=%-14.(%l,%c%V%)\ %p%% " Right aligned file nav info
endif
" persisted undos:
set undofile
set undodir=~/.vimtmp
set undolevels=1000
let mapleader = ","
" toggle *n*umbers, invisible chars and cursorline. good for mouse copy/paste:
nnoremap <Leader>n :set number! list! cursorline!<CR>
" switch buffer with ,b:
nnoremap <Leader>b :buffer <C-z><S-Tab>
nnoremap ;; :e#<cr>
" use the systems C-c/C-v clipboard in vim with y/p: (may not work on server)
set clipboard=unnamedplus
" prepend/del_first to/from selected lines:
vnoremap <Leader>> <C-v>0I
vnoremap <Leader>< <C-v>0x
" own filetype settings:
autocmd FileType * setlocal shiftwidth=2 tabstop=2
autocmd FileType html setlocal shiftwidth=2 tabstop=2
autocmd FileType javascript setlocal shiftwidth=4 tabstop=4
autocmd FileType ruby setlocal shiftwidth=2 tabstop=2 expandtab
" to avoid vim trying to "write" the netrw buffer:
autocmd FileType netrw setl bufhidden=delete
" qq - record macro
" q - stop recording macro
" Q - replay macro
nnoremap Q @q
vnoremap Q :norm @q<cr>
autocmd FileType go set noexpandtab
autocmd FileType go set shiftwidth=4
autocmd FileType go set softtabstop=4
autocmd FileType go set tabstop=4
" don't wrap emails:
" au BufRead /tmp/mutt-* set filetype=mail " this is done by default anyway
au BufRead *tmp/neomutt-* set filetype=mail
autocmd FileType mail set textwidth=0
autocmd FileType mail inoremap --<Space><CR> -- <CR><C-o>:read ~/.mutt/signatures/laut<CR>
augroup filetypedetect
" elixir is close enough to ruby:
au BufRead,BufNewFile *.exs set filetype=ruby
au BufRead,BufNewFile *.ex set filetype=ruby
augroup END
" https://bluz71.github.io/2017/06/28/current-treats-future-wants-of-neovim.html
" incremental substitution
" try :%s/foo/bar/g
if has("nvim")
set inccommand=nosplit
endif
if has("nvim")
" Terminal Mode https://neovim.io/doc/user/nvim_terminal_emulator.html
" Make escape work in the Neovim terminal.
tnoremap <Esc> <C-\><C-n>
" Make navigation into and out of Neovim terminal splits nicer.
tnoremap <C-h> <C-\><C-N><C-w>h
tnoremap <C-j> <C-\><C-N><C-w>j
tnoremap <C-k> <C-\><C-N><C-w>k
tnoremap <C-l> <C-\><C-N><C-w>l
" I like relative numbering when in normal mode.
" autocmd TermOpen * setlocal conceallevel=0 colorcolumn=0 relativenumber
" Prefer Neovim terminal insert mode to normal mode.
autocmd BufEnter term://* startinsert
if has('nvim-0.1.5') " True color in neovim wasn't added until 0.1.5
set termguicolors
endif
endif
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment