diff --git a/.vimrc b/.vimrc deleted file mode 120000 index 5bf8a5c..0000000 --- a/.vimrc +++ /dev/null @@ -1 +0,0 @@ -/Users/sebastianb/Documents/gitolite/kabelkiste/dotfiles/.vimrc \ No newline at end of file diff --git a/.vimrc b/.vimrc new file mode 100644 index 0000000..47b023e --- /dev/null +++ b/.vimrc @@ -0,0 +1,493 @@ +set encoding=utf-8 +set termencoding=utf-8 + + +set nocompatible " be iMproved, required + + +"vim-plug installation (auto installs on new machines) + +if empty(glob('~/.vim/autoload/plug.vim')) + silent !curl -fLo ~/.vim/autoload/plug.vim --create-dirs + \ https://git.burschel.com/sebastian/kabelkiste/raw/branch/master/dotfiles/.vim/autoload/plug.vim + autocmd VimEnter * PlugInstall --sync | source $MYVIMRC +endif + + +call plug#begin('~/.vim/bundle') + + +Plug 'iamcco/markdown-preview.nvim', { 'do': { -> mkdp#util#install() }, 'for': ['markdown', 'vim-plug']} + +" Java autocomplete +" Plug 'artur-shaik/vim-javacomplete2' + +" Generates a list of todo comments +Plug 'chauncey-garrett/vim-tasklist' + +" Autocompletion for everything +Plug 'neoclide/coc.nvim', {'branch': 'release'} + +" Fuzzy file finder +Plug 'ctrlpvim/ctrlp.vim' + +" Zooms into windows (fullscreen toggle) +Plug 'szw/vim-maximizer' + +" Linter and analyse tool +Plug 'dense-analysis/ale' + +" Forces to do what I want (autocomplete etc.) +Plug 'ervandew/supertab' + +" Adds the closing equivalent of everything that opens: ""[]().... +Plug 'jiangmiao/auto-pairs' + +" Git commit browser +Plug 'junegunn/gv.vim' + +" When pressing " or @, it shows a popup with the register content. +Plug 'junegunn/vim-peekaboo' + +" The package manager itself. +Plug 'junegunn/vim-plug' + +" Shows the color in css files +Plug 'ap/vim-css-color' + +" Add swift support +Plug 'keith/swift.vim' + +" Latex, I guess? Have to check if I actually need this. +" Plug 'LaTeX-Box-Team/LaTeX-Box' + +" I use it as my snippet manager, but it is actually for HTML. +Plug 'mattn/emmet-vim' + +" Necessary to use my emmet json snippet file +Plug 'mattn/webapi-vim' + +" vue support +Plug 'posva/vim-vue' + +" Makes (un)commenting stuff much easier. +Plug 'preservim/nerdcommenter' + +" My snippet file +Plug 'https://git.burschel.com/sebastian/emmet-snippets.git' + +" My dark theme +Plug 'SeBaBu/darcula' + +" My light theme. +Plug 'NLKNguyen/papercolor-theme' + +" File browser +Plug 'scrooloose/nerdtree' + +" Language pack for most languages I use. +Plug 'sheerun/vim-polyglot' + +" Git support for vim +Plug 'tpope/vim-fugitive' + +" Change surrounding stuff fast and reliable +Plug 'tpope/vim-surround' + +" Status line for the bottom of the screen (and a themes pack) +Plug 'vim-airline/vim-airline' +Plug 'vim-airline/vim-airline-themes' + +" Shows vertical lines to make indents more visible +Plug 'Yggdroot/indentLine' + +" Better Javascript indent and syntax support +Plug 'pangloss/vim-javascript' + +call plug#end() + + +" Leader +let mapleader = "," + +set backspace=2 " Backspace deletes like most programs in insert mode +set nobackup +set nowritebackup +set noswapfile " http://robots.thoughtbot.com/post/18739402579/global-gitignore#comment-458413287 +set history=200 +set ruler " show the cursor position all the time +set showcmd " display incomplete commands +set incsearch " do incremental searching +set laststatus=2 " Always display the status line +set autowrite " Automatically :write before running commands +set modelines=0 " Disable modelines as a security precaution +set nomodeline +set cursorline " Highlight the full line the cursor is in + + +" Switch syntax highlighting on, when the terminal has colors +" Also switch on highlighting the last used search pattern. +if (&t_Co > 2 || has("gui_running")) && !exists("syntax_on") + syntax on +endif + +" Higher redrawtime or syntax highlighting can fail. +set redrawtime=10000 + +if filereadable(expand("~/.vimrc.bundles")) + source ~/.vimrc.bundles +endif + +" Load matchit.vim, but only if the user hasn't installed a newer version. +if !exists('g:loaded_matchit') && findfile('plugin/matchit.vim', &rtp) ==# '' + runtime! macros/matchit.vim +endif + + +augroup vimrcEx + autocmd! + +" " When editing a file, always jump to the last known cursor position. +" " Don't do it for commit messages, when the position is invalid, or when +" " inside an event handler (happens when dropping a file on gvim). + autocmd BufReadPost * + \ if &ft != 'gitcommit' && line("'\"") > 0 && line("'\"") <= line("$") | + \ exe "normal g`\"" | + \ endif + + " Set syntax highlighting for specific file types + autocmd BufRead,BufNewFile *.md set filetype=markdown + autocmd BufRead,BufNewFile .{jscs,jshint,eslint}rc set filetype=json + autocmd BufRead,BufNewFile aliases.local,zshrc.local,*/zsh/configs/* set filetype=sh + autocmd BufRead,BufNewFile gitconfig.local set filetype=gitconfig + autocmd BufRead,BufNewFile tmux.conf.local set filetype=tmux + autocmd BufRead,BufNewFile vimrc.local set filetype=vim +augroup END + + +" When the type of shell script is /bin/sh, assume a POSIX-compatible +" shell for syntax highlighting purposes. +"let g:is_posix = 1 + +" Softtabs, 4 spaces +set tabstop=4 +set shiftwidth=4 +set shiftround " Tabs are rounded to multiples of shiftwidth +set expandtab " Tabs are spaces + +" Display extra whitespace +set list listchars=tab:»·,trail:·,nbsp:· + +" Use one space, not two, after punctuation. +set nojoinspaces + +" Make it obvious where 80 characters is (Python only) +autocmd FileType python setlocal colorcolumn=81 + +" Highlight "self." in different color in python files: +augroup python_syntax_extra + autocmd! + autocmd! Syntax python :syn keyword Keyword self +augroup END + +" Line numbers with the width of 5 digits +set number +set numberwidth=5 + +" Relative line numbers, but real line number for current line +set number relativenumber +set nu rnu + +" Autocomplete menu for command mode +set wildmenu +set wildmode=longest:full,full + +" Open new split panes to right and bottom, which feels more natural +set splitbelow +set splitright + +" Quicker window movement +nnoremap j +nnoremap k +nnoremap h +nnoremap l + +" Autocomplete with dictionary words when spell check is on +set complete+=kspell + +"Autocompletion syntax: +set omnifunc=syntaxcomplete#Complete + +" Keep 8 rows above and below the kk +set scrolloff=8 + +" Jump to wrapped line instead of next real line. But still respect the line +" numbering when doing bigger steps. Also adds jumps bigger than 5 to the jump +" list +" source: https://www.vi-improved.org/vim-tips/ +nnoremap j v:count ? (v:count > 5 ? "m'" . v:count : '') . 'j' : 'gj' +nnoremap k v:count ? (v:count > 5 ? "m'" . v:count : '') . 'k' : 'gk' + + +" Use e and E to jump to start or end of a line. +nnoremap e ^ +nnoremap E $ + +" Do not cut words when breaking lines. +set linebreak + +" Searching with "/": Ignore case if search term is lower case. +set ignorecase +set smartcase +set hlsearch + +" Stop highlighting search results. +nnoremap :nohlsearch + +" Search replace bind: +nnoremap S :%s//g + +" Strip trailing whitespaces on each save +fun! StripTrailingWhitespaces() + let l = line(".") + let c = col(".") + %s/\s\+$//e + call cursor(l, c) +endfun +autocmd BufWritePre * :call StripTrailingWhitespaces() + +" Indent and unindent with tab. +nnoremap >>_ +nnoremap <<_ +inoremap +vnoremap >gv +vnoremap +map gN :bp +map gp :bp + + +" Toggle through splits: +nnoremap w w +nnoremap W W + +" Emmet +let g:user_emmet_leader_key=',' +let g:user_emmet_settings = webapi#json#decode(join(readfile(expand('~/.vim/bundle/emmet-snippets/customizations/vim-emmet-mysnippets.json')), "\n")) + +" jedi-vim: +"let g:jedi#popup_on_dot = 1 + +" Peekaboo window width +let g:peekaboo_window = 'vert bo 65new' + +" javacomplete2 +autocmd FileType java setlocal omnifunc=javacomplete#Complete + +" tasklist settings +let g:tlTokenList = ["FIXME", "TODO", "todo"] " keywords for todos +let g:tlWindowPosition = 1 "Open window on bottom, 0 would be top +let g:tlRememberPosition = 1 +map t TaskList + +" nerdtree settings +map :NERDTreeToggle +let NERDTreeIgnore=["\.git$"] + +" nerdcommenter settins +let g:NERDCompactSexyComs = 1 +" Comment symbols are in a straight line and not mimicing the indents of the code +let g:NERDDefaultAlign = "left" +" Add a space between the comment symbol(s) and the code +let NERDSpaceDelims=1 + +" supertab settings +" On autocomplete, start cycling from top to bottom +let g:SuperTabDefaultCompletionType = "" + +" airline settings +let g:airline#extensions#tabline#enabled = 1 " Show buffers as tabs + +" ale settings +let g:ale_linters = {'python': ['flake8', 'mypy', 'pylint', 'prospector'], + \'cpp': ['cc', 'gcc', 'clang']} +let g:ale_fixers = {'python': ['isort', 'black'], + \'json': ['fixjson'], + \'html': ['html-beautify', 'tidy'], + \'xml': ['xmllint'], + \'java': ['uncrustify'], + \'javascript': ['eslint', 'prettier', 'xo', 'standard'], + \'tex': ['latexindent']} + + + " \'htmldjango': ['html-beautify', 'tidy'], + +" Run ALEFix shortcut +nnoremap f :ALEFix + +" Markdown spellchecking +" autocmd FileType markdown setlocal spell spelllang=de " not working yet + + +" colorscheme toggle dark/light: +function! s:SwitchColorscheme() + if g:colors_name == 'darcula' + set background=light + colorscheme PaperColor + AirlineTheme papercolor + else + colorscheme darcula + set background=dark + AirlineTheme dark + endif +endfunction +map :call SwitchColorscheme() + +colorscheme darcula + +" Highlight whole todo comment, not just the keyword itself: +augroup myTodo + autocmd! + autocmd Syntax * syntax match myTodo /\v\_.<(TODO|FIXME|todo|fixme).*/hs=s+1 containedin=.*Comment +augroup END + +highlight link myTodo Todo + +" Bind ctrl+u to jump list jump (opposite of ctrl+o) +nnoremap + +" Bind ctrl-s to quicksave! +noremap :update +vnoremap :update +inoremap :update + +" Load changes to a file automatically from drive if the file has not been +" changed yet +set autoread + +" Generate help tags to find the docs with :help +"if !empty((globpath(&rtp, '~/.vim/doc/**')) +" helptags ~/.vim/doc +"endif + +" Use persistent history. (so undo from older sessions can be used) +if !isdirectory("$HOME/.vim/.vim-undo-dir") + silent !mkdir -p $HOME/.vim/.vim-undo-dir +endif +set undodir=$HOME/.vim/.vim-undo-dir +set undofile + +" Set the character which is used as tab indent marker +let g:indentLine_char = '┊' + +" CoC install the language extensions I want: +let g:coc_global_extensions = [ + \"coc-json", + \"coc-git", + \"coc-tsserver", + \"coc-html", + \"coc-clangd", + \"coc-css", + \"coc-htmldjango", + \"coc-jedi", + \"coc-vetur"] + +" Toggle zoom into windows with vim-maximizer +nnoremap z :MaximizerToggle + + +" In split views, delete a buffer but keep the window layout. +" Found it here: https://vim.fandom.com/wiki/Deleting_a_buffer_without_closing_the_window +"delete the buffer; keep windows; create a scratch buffer if no buffers left +function s:Kwbd(kwbdStage) + if(a:kwbdStage == 1) + if(&modified) + let answer = confirm("This buffer has been modified. Are you sure you want to delete it?", "&Yes\n&No", 2) + if(answer != 1) + return + endif + endif + if(!buflisted(winbufnr(0))) + bd! + return + endif + let s:kwbdBufNum = bufnr("%") + let s:kwbdWinNum = winnr() + windo call s:Kwbd(2) + execute s:kwbdWinNum . 'wincmd w' + let s:buflistedLeft = 0 + let s:bufFinalJump = 0 + let l:nBufs = bufnr("$") + let l:i = 1 + while(l:i <= l:nBufs) + if(l:i != s:kwbdBufNum) + if(buflisted(l:i)) + let s:buflistedLeft = s:buflistedLeft + 1 + else + if(bufexists(l:i) && !strlen(bufname(l:i)) && !s:bufFinalJump) + let s:bufFinalJump = l:i + endif + endif + endif + let l:i = l:i + 1 + endwhile + if(!s:buflistedLeft) + if(s:bufFinalJump) + windo if(buflisted(winbufnr(0))) | execute "b! " . s:bufFinalJump | endif + else + enew + let l:newBuf = bufnr("%") + windo if(buflisted(winbufnr(0))) | execute "b! " . l:newBuf | endif + endif + execute s:kwbdWinNum . 'wincmd w' + endif + if(buflisted(s:kwbdBufNum) || s:kwbdBufNum == bufnr("%")) + execute "bd! " . s:kwbdBufNum + endif + if(!s:buflistedLeft) + set buflisted + set bufhidden=delete + set buftype= + setlocal noswapfile + endif + else + if(bufnr("%") == s:kwbdBufNum) + let prevbufvar = bufnr("#") + if(prevbufvar > 0 && buflisted(prevbufvar) && prevbufvar != s:kwbdBufNum) + b # + else + bn + endif + endif + endif +endfunction + +command! Kwbd call s:Kwbd(1) +nnoremap Kwbd :Kwbd + +" Create a mapping (e.g. in your .vimrc) like this: +"nmap ! Kwbd +nmap bd Kwbd + + + +nmap ga (coc-codeaction-line) + +" Go to definition +nmap g (coc-definition) +" nmap gy (coc-type-definition) +" nmap gi (coc-implementation) +" nmap gr (coc-references) + + +" Don't hide stuff in tex files like \textbf{} +let g:tex_conceal="" + +" Load local config if there is one +if filereadable($HOME . "/.vimrc.local") + source ~/.vimrc.local +endif + + diff --git a/.zshrc b/.zshrc new file mode 100644 index 0000000..e55a5d0 --- /dev/null +++ b/.zshrc @@ -0,0 +1,79 @@ +if [ -f ~/.bash_profile ]; then + source ~/.bash_profile; +fi + + +# extra files in ~/.zsh/configs/pre , ~/.zsh/configs , and ~/.zsh/configs/post +# these are loaded first, second, and third, respectively. +_load_settings() { + _dir="$1" + if [ -d "$_dir" ]; then + if [ -d "$_dir/pre" ]; then + for config in "$_dir"/pre/**/*~*.zwc(N-.); do + . $config + done + fi + + for config in "$_dir"/**/*(N-.); do + case "$config" in + "$_dir"/(pre|post)/*|*.zwc) + : + ;; + *) + . $config + ;; + esac + done + + if [ -d "$_dir/post" ]; then + for config in "$_dir"/post/**/*~*.zwc(N-.); do + . $config + done + fi + fi +} +_load_settings "$HOME/.zsh/configs" + +# Local config +[[ -f ~/.zshrc.local ]] && source ~/.zshrc.local + +# aliases +[[ -f ~/.aliases ]] && source ~/.aliases + + +# Save history +SAVEHIST=3000 +HISTSIZE=3000 +HISTFILE="$HOME/.zsh_history" +setopt INC_APPEND_HISTORY # Write to the history file immediately, not when the shell exits. +setopt SHARE_HISTORY # Share history between all sessions. +setopt HIST_EXPIRE_DUPS_FIRST # Expire duplicate entries first when trimming history. +setopt HIST_IGNORE_DUPS # Don't record an entry that was just recorded again. +setopt HIST_IGNORE_ALL_DUPS # Delete old recorded entry if new entry is a duplicate. +setopt HIST_FIND_NO_DUPS # Do not display a line previously found. +setopt HIST_IGNORE_SPACE # Don't record an entry starting with a space. +setopt HIST_SAVE_NO_DUPS # Don't write duplicate entries in the history file. +setopt HIST_REDUCE_BLANKS # Remove superfluous blanks before recording entry. +setopt HIST_VERIFY # Don't execute immediately upon history expansion. +setopt HIST_BEEP # Beep when accessing nonexistent history. + + +# Prompt + +PS1="(%*) %F{green}%n%f@%F{magenta}%m%f %F{blue}%B%~%b%f %# " # https://wiki.gentoo.org/wiki/Zsh/Guide#Prompts + + +# Set variables + +export HTML_TIDY=~/.tidy.conf + +# Other settings + +setopt autocd # Change directory without typing "cd" in front of it. +alias scp='noglob \scp' # Allows wildcards in scp commands +alias rsync='noglob \rsync' # Allows wildcards in rsync commands +# setxkbmap -option caps:escape # Change capslock key to escape +zstyle ':completion:*' rehash true # Find new executables for autcompletion +stty -ixon # Ignore and pass through ctrl-s and ctrl-q as normal input (quicksave bin for vim) + +