diff --git a/core/buffer.vim b/core/buffer.vim
deleted file mode 100644
index 4b8e7bf..0000000
--- a/core/buffer.vim
+++ /dev/null
@@ -1,44 +0,0 @@
-set autowrite
-set autoread
-
-command! Wq wq
-command! WQ wq
-command! Q q
-command! W w
-
-" set the history far higher (default 50)
-if &history < 1000
-	set history=1000
-endif
-
-nnoremap U :redo<CR>
-nnoremap <C-R> <NOP>
-
-if v:version >= 704
-	set undofile
-	set undolevels=1000
-endif
-
-" write swap file to disk after n millisecs
-set updatetime=1500
-
-set switchbuf=useopen,usetab
-
-" more clipboard options
-if has('xterm_clipboard')
-	set clipboard=unnamed,unnamedplus,autoselect
-endif
-
-" allow explicit writing of read-only files with sudo
-cnoremap sudow w !sudo tee % >/dev/null
-
-aug ReadonlyFiles
-	au BufNewFile,BufRead /var/log/* set readonly
-	au BufNewFile,BufRead /var/log/* set nomodifiable
-aug END
-
-"if v:version >= 704
-	"set cryptmethod=blowfish
-
-	"au BufReadPost * if &key != "" | set noswapfile nowritebackup viminfo= nobackup noshelltemp history=0 secure | endif
-"endif
diff --git a/core/compat.vim b/core/compat.vim
new file mode 100644
index 0000000..b1410a1
--- /dev/null
+++ b/core/compat.vim
@@ -0,0 +1,17 @@
+if ! has('nvim')
+	set ttimeoutlen=-1
+endif
+
+if v:version >= 704
+	set undofile
+
+	aug LineNumbers
+		au!
+		au VimEnter,WinEnter,InsertLeave * setlocal relativenumber
+		au WinLeave,InsertEnter * setlocal norelativenumber
+	aug END
+endif
+
+if has('xterm_clipboard')
+	set clipboard=unnamed,unnamedplus,autoselect
+endif
diff --git a/core/control.vim b/core/control.vim
deleted file mode 100644
index bd42e44..0000000
--- a/core/control.vim
+++ /dev/null
@@ -1,45 +0,0 @@
-nnoremap Y y$
-nnoremap j gj
-nnoremap k gk
-
-inoremap jk <ESC>
-inoremap JK <ESC>
-inoremap Jk <ESC>
-
-set ttimeout
-
-" lower timeout
-set ttimeoutlen=-1
-set timeoutlen=500
-
-" unset default help shortcut
-nnoremap <F1> <NOP>
-inoremap <F1> <NOP>
-
-let g:mapleader = ","
-
-" unset search highlighting
-noremap <silent> <Leader><CR> :noh<CR>
-
-nnoremap <Leader>vl :setlocal cursorline!<CR>
-nnoremap <Leader>vc :setlocal cursorcolumn!<CR>
-nnoremap <Leader>ve :setlocal colorcolumn=80<CR>
-nnoremap <Leader>vn :setlocal colorcolumn=0<CR>
-
-" enable mouse support
-if has('mouse')
-	set mouse=a
-endif
-
-" some useful backspace settings
-set backspace=indent,eol,start
-
-" change the current directory to the one containing the current file
-if has('autochdir')
-	set autochdir
-endif
-
-" octal is not really that important
-set nrformats-=octal
-
-set confirm
diff --git a/core/folding.vim b/core/folding.vim
deleted file mode 100644
index 17c4a61..0000000
--- a/core/folding.vim
+++ /dev/null
@@ -1,34 +0,0 @@
-if has('folding')
-	set foldcolumn=1
-	set foldlevel=1
-	set foldmethod=syntax
-	set foldtext=MyFoldText()
-
-	let g:sh_fold_enabled=1
-
-	function! MyFoldText()
-		" get actual numberwidth of the current document
-		let nw_add = (len(line('$')) - (&numberwidth - 1))
-		if nw_add > 0
-			let nw = &numberwidth + nw_add
-		else
-			let nw = &numberwidth
-		endif
-
-		let numfold_w =(nw * &number) + &foldcolumn
-		let window_w = winwidth(0) - numfold_w
-		let onetab = strpart('          ', 0, &tabstop)
-
-		let foldtxt_start = getline(v:foldstart) . '  …'
-		let foldtxt_start = substitute(foldtxt_start, '\t', onetab, 'g')
-		let foldtxt_start_w = len(foldtxt_start) - 2
-
-		let foldtxt_end = '+' . string(foldclosedend(v:foldend) - foldclosed(v:foldstart)) . '         '
-		let foldtxt_end_w = len(foldtxt_end)
-
-		let foldtxt_mid_w = window_w - (foldtxt_start_w + foldtxt_end_w)
-		let foldtxt_mid = repeat(' ', foldtxt_mid_w + 2)
-
-		return foldtxt_start . foldtxt_mid . foldtxt_end
-	endfunction
-endif
diff --git a/core/formatting.vim b/core/formatting.vim
deleted file mode 100644
index c2d416e..0000000
--- a/core/formatting.vim
+++ /dev/null
@@ -1,29 +0,0 @@
-if v:version >= 704
-	set formatoptions+="j"
-endif
-
-set autoindent
-set smarttab
-
-" round the indent to a multiple o shiftwidth
-set shiftround
-
-if has('smartindent')
-	set smartindent
-endif
-
-" enable filetype plugins
-if has('autocmd')
-	filetype indent on
-	filetype plugin on
-endif
-
-vnoremap < <gv
-vnoremap > >gv
-
-" fix indentation of an entire file
-nnoremap <leader>fmt gg=G<CR>``
-
-" local replace
-nnoremap gr gd[{V%::s/<C-R>///g<left><left>
-nnoremap gR gD:%s/<C-R>///g<left><left>
diff --git a/core/legacy.vim b/core/legacy.vim
new file mode 100644
index 0000000..e1d66e6
--- /dev/null
+++ b/core/legacy.vim
@@ -0,0 +1,53 @@
+if ! has('nvim')
+    " default options in neovim
+    set autoindent
+    set autoread
+    set backspace=indent,eol,start
+    set complete-=i
+    set display=lastline
+    "if has('multi_byte')
+        "set encoding=utf-8
+    "endif
+    if v:version >= 704
+        set formatoptions=tcqj
+    endif
+    if &history < 10000
+        set history=10000
+    endif
+    if has('extra_search')
+        set hlsearch
+        set incsearch
+    endif
+    if has('langmap')
+        set langnoremap
+    endif
+    set laststatus=2
+    set listchars="tab:> ,trail:-,nbsp:+"
+    if has('mouse')
+        set mouse=a
+    endif
+    "set nocompatible
+    set nrformats=hex
+    if has('mksession')
+        set sessionoptions+=options
+    endif
+    set smarttab
+    if has('windows')
+        set tabpagemax=50
+    endif
+    set tags="./tags;,tags"
+    set ttyfast
+    if has('viminfo')
+        set viminfo+=!
+    endif
+    if has('wildmenu')
+        set wildmenu
+    endif
+
+    " options that have been removed from neovim
+    if v:version >= 704 
+        set cryptmethod=blowfish
+
+        au BufReadPost * if &key != "" | set noswapfile nowritebackup viminfo= nobackup noshelltemp history=0 secure | endif
+    endif
+endif
diff --git a/core/mappings.vim b/core/mappings.vim
new file mode 100644
index 0000000..be4fe2f
--- /dev/null
+++ b/core/mappings.vim
@@ -0,0 +1,63 @@
+let g:mapleader = ","
+
+command! Wq wq
+command! WQ wq
+command! Q q
+command! W w
+
+nnoremap U :redo<CR>
+nnoremap <C-R> <NOP>
+
+" allow explicit writing of read-only files with sudo
+cnoremap sudow w !sudo tee % >/dev/null
+
+" unset search highlighting
+noremap <silent> <Leader><CR> :noh<CR>
+
+nnoremap <Leader>vl :setlocal cursorline!<CR>
+nnoremap <Leader>vc :setlocal cursorcolumn!<CR>
+nnoremap <Leader>ve :setlocal colorcolumn=80<CR>
+nnoremap <Leader>vn :setlocal colorcolumn=0<CR>
+
+nnoremap Y y$
+nnoremap j gj
+nnoremap k gk
+
+" unset default help shortcut
+nnoremap <F1> <NOP>
+inoremap <F1> <NOP>
+
+inoremap jk <ESC>
+inoremap JK <ESC>
+inoremap Jk <ESC>
+
+vnoremap < <gv
+vnoremap > >gv
+
+" fix indentation of an entire file
+nnoremap <leader>fmt gg=G<CR>``
+
+" local replace
+nnoremap gr gd[{V%::s/<C-R>///g<left><left>
+nnoremap gR gD:%s/<C-R>///g<left><left>
+
+if v:progname == 'nvim'
+	tnoremap <ESC> <C-\><C-n>
+endif
+
+" highlight searches and search while typing
+if has('extra_search')
+	if maparg('<C-L>', 'n') ==# ''
+		nnoremap <silent><C-L> :nohlsearch<CR><C-L>
+	endif
+endif
+
+nnoremap th :tabfirst<CR>
+nnoremap tj :tabnext<CR>
+nnoremap tk :tabprev<CR>
+nnoremap tl :tablast<CR>
+nnoremap tn :tabnew<CR>
+nnoremap tq :tabclose<CR>
+
+nnoremap <silent> <leader>il :set invlist<CR>
+vnoremap <silent> <leader>il :<C-W>set invlist<CR>
diff --git a/core/plugins.vim b/core/plugins.vim
index afb4bce..d0a98f5 100644
--- a/core/plugins.vim
+++ b/core/plugins.vim
@@ -1,31 +1,37 @@
 call plug#begin(g:vim_data_home . '/plugins')
 
-" Always load
+" always load
 Plug 'scrooloose/nerdcommenter'
-Plug 'scrooloose/syntastic'
-Plug 'jiangmiao/auto-pairs'
-Plug 'majutsushi/tagbar'
 
+Plug 'majutsushi/tagbar'
 Plug 'kien/ctrlp.vim'
 Plug 'vim-scripts/gnupg'
-
 Plug 'tomasr/molokai'
+Plug 'hoelzro/vim-polyglot'
+Plug 'bling/vim-airline' "until powerline works in neovim
 Plug 'junegunn/seoul256.vim'
-Plug 'baeuml/summerfruit256.vim'
-"Plug 'zefei/vim-colortuner',		{ 'on': 'Colortuner' }
-Plug 'godlygeek/csapprox'
+"Plug 'godlygeek/csapprox'
+"Plug 'jiangmiao/auto-pairs'
+"Plug 'tpope/vim-commentary'
 
-Plug 'scrooloose/nerdtree',             { 'on': 'NERDTreeToggle' }
-Plug 'scrooloose/nerdtree-git-plugin',  { 'on': 'NERDTreeToggle' }
+" on demand loading
+Plug 'scrooloose/nerdtree', { 'on': 'NERDTreeToggle' }
+Plug 'scrooloose/nerdtree-git-plugin', { 'on': 'NERDTreeToggle' }
+
+"Plug 'Twinside/vim-hoogle', { 'for': 'haskell' }
+"Plug 'Twinside/vim-haskellConceal', { 'for': 'haskell' }
+"Plug 'lukerandall/haskellmode-vim', { 'for': 'haskell' }
+
+Plug 'scrooloose/syntastic', {'for': ['c', 'cpp', 'python', 'sh']}
 
 if v:version >= 704
-Plug 'vim-pandoc/vim-pandoc'
-Plug 'vim-pandoc/vim-pandoc-syntax'
-Plug 'Valloric/YouCompleteMe',          { 'do': './install.sh --clang-completer --system-libclang' }
+    Plug 'vim-pandoc/vim-pandoc'
+    Plug 'vim-pandoc/vim-pandoc-syntax'
+    Plug 'Valloric/YouCompleteMe', {'do': 'python2 install.py --clang-completer' }
 endif
 
 if v:version >= 703
-Plug 'vim-scripts/Gundo',               { 'on': 'GundoToggle' }
+    Plug 'vim-scripts/Gundo', { 'on': 'GundoToggle' }
 endif
 
 call plug#end()
diff --git a/core/search.vim b/core/search.vim
deleted file mode 100644
index 5e4a900..0000000
--- a/core/search.vim
+++ /dev/null
@@ -1,16 +0,0 @@
-set ignorecase
-set smartcase
-
-" highlight searches and search while typing
-if has('extra_search')
-	set hlsearch
-	set incsearch
-	if maparg('<C-L>', 'n') ==# ''
-		nnoremap <silent><C-L> :nohlsearch<CR><C-L>
-	endif
-endif
-
-" load the matchit macros
-if !exists('g:loaded_matchit') && findfile('plugins/matchit.vim', &rtp) ==# ''
-	runtime! macros/matchit.vim
-endif
diff --git a/core/settings.vim b/core/settings.vim
new file mode 100644
index 0000000..96aa762
--- /dev/null
+++ b/core/settings.vim
@@ -0,0 +1,104 @@
+set confirm
+set ttimeout
+set timeoutlen=500
+set autochdir
+set autowrite
+set scrolloff=1
+set sidescrolloff=5
+set number
+set ignorecase
+set smartcase
+set listchars=tab:»\ ,trail:◆,extends:▹,precedes:◃,eol:↲,nbsp:·
+set showmatch
+set shortmess=aoOtTI
+
+if has('smartindent')
+    set smartindent
+endif
+
+" enable filetype plugins
+if has('autocmd')
+    filetype indent on
+    filetype plugin on
+endif
+
+
+"if !exists('g:loaded_matchit') && findfile('plugins/matchit.vim', &rtp) ==# ''
+"runtime! macros/matchit.vim
+"endif
+
+if has('windows')
+    set splitbelow
+    set splitright
+endif
+
+if has('linebreak')
+    let &showbreak = '↳ '
+
+    if v:version >=704
+        set breakindent
+        set breakindentopt=sbr
+    endif
+endif
+
+if has('cmdline_info')
+    set ruler
+    set showcmd
+endif
+
+if has('wildmenu')
+    set wildmode=list:longest,full
+    set wildignore=.bak,.old,.swp,~
+endif
+
+if has('virtualedit')
+    set virtualedit=block
+endif
+
+if has('syntax')
+    syntax enable
+endif
+
+aug CursorLineColumn
+    au!
+    au VimEnter,WinEnter,BufWinEnter * setlocal cursorline cursorcolumn
+    au WinLeave * setlocal nocursorline nocursorcolumn
+aug END
+
+"set visualbell
+"set t_vb=
+
+if has('folding')
+    set foldcolumn=1
+    set foldlevel=99
+    set foldmethod=syntax
+    set foldtext=MyFoldText()
+
+    let g:sh_fold_enabled=1
+
+    function! MyFoldText()
+        " get actual numberwidth of the current document
+        let nw_add = (len(line('$')) - (&numberwidth - 1))
+        if nw_add > 0
+            let nw = &numberwidth + nw_add
+        else
+            let nw = &numberwidth
+        endif
+
+        let numfold_w =(nw * &number) + &foldcolumn
+        let window_w = winwidth(0) - numfold_w
+        let onetab = strpart('          ', 0, &tabstop)
+
+        let foldtxt_start = getline(v:foldstart) . '  …'
+        let foldtxt_start = substitute(foldtxt_start, '\t', onetab, 'g')
+        let foldtxt_start_w = len(foldtxt_start) - 2
+
+        let foldtxt_end = '+' . string(foldclosedend(v:foldend) - foldclosed(v:foldstart)) . '         '
+        let foldtxt_end_w = len(foldtxt_end)
+
+        let foldtxt_mid_w = window_w - (foldtxt_start_w + foldtxt_end_w)
+        let foldtxt_mid = repeat(' ', foldtxt_mid_w + 2)
+
+        return foldtxt_start . foldtxt_mid . foldtxt_end
+    endfunction
+endif
diff --git a/core/tabs.vim b/core/tabs.vim
deleted file mode 100644
index cd9ec2f..0000000
--- a/core/tabs.vim
+++ /dev/null
@@ -1,11 +0,0 @@
-nnoremap th :tabfirst<CR>
-nnoremap tj :tabnext<CR>
-nnoremap tk :tabprev<CR>
-nnoremap tl :tablast<CR>
-nnoremap tn :tabnew<CR>
-nnoremap tq :tabclose<CR>
-
-" increase the maximal number of tabpages (default 10)
-if &tabpagemax < 50
-	set tabpagemax=50
-endif
diff --git a/core/tmux.vim b/core/tmux.vim
new file mode 100644
index 0000000..f2f400f
--- /dev/null
+++ b/core/tmux.vim
@@ -0,0 +1,25 @@
+if exists('$TMUX')
+	function! TmuxOrSplitSwitch(wincmd, tmuxdir)
+		let previous_winnr = winnr()
+		silent! execute "wincmd " . a:wincmd
+		if previous_winnr == winnr()
+			call system("tmux select-pane -" . a:tmuxdir)
+			redraw!
+		endif
+	endfunction
+
+	let previous_title = substitute(system("tmux display-message -p '#{pane_title}'"), '\n', '', '')
+	let &t_ti = "\<Esc>]2;vim\<Esc>\\" . &t_ti
+	let &t_te = "\<Esc>]2;". previous_title . "\<Esc>\\" . &t_te
+
+	noremap <silent><C-h> :call TmuxOrSplitSwitch('h', 'L')<cr>
+	noremap <silent><C-l> :call TmuxOrSplitSwitch('l', 'R')<cr>
+	noremap <silent><C-k> :call TmuxOrSplitSwitch('k', 'U')<cr>
+	noremap <silent><C-j> :call TmuxOrSplitSwitch('j', 'D')<cr>
+	noremap <silent><C-b> :call TmuxOrSplitSwitch('b', 'l')<cr>
+else
+	noremap <C-h> <C-w>h
+	noremap <C-j> <C-w>j
+	noremap <C-k> <C-w>k
+	noremap <C-l> <C-w>l
+endif
diff --git a/core/window.vim b/core/window.vim
deleted file mode 100644
index ca8d6bb..0000000
--- a/core/window.vim
+++ /dev/null
@@ -1,102 +0,0 @@
-" split the windows more 'naturally'
-if has('windows')
-	set splitbelow
-	set splitright
-	set showtabline=2
-endif
-
-
-" set scroll offset slightly higher so that the next or previous line can be seen
-if !&scrolloff
-	set scrolloff=1
-endif
-
-" same as with scroll offset but for horizontal scrolling
-if !&sidescrolloff
-	set sidescrolloff=5
-endif
-
-set number
-
-if v:version >= 704
-	aug LineNumbers
-		au!
-		au VimEnter,WinEnter,InsertLeave * setlocal relativenumber
-		au WinLeave,InsertEnter * setlocal norelativenumber
-	aug END
-endif
-
-if has('linebreak')
-	let &showbreak = '↳ '
-	if v:version >=704
-		set breakindent
-		set breakindentopt=sbr
-	endif
-endif
-
-" show a ruler and show the current command in the bottom right
-if has('cmdline_info')
-	set ruler
-	set showcmd
-endif
-
-" show invisible characters
-set listchars=tab:»\ ,trail:◆,extends:▹,precedes:◃,eol:↲,nbsp:·
-
-nnoremap <silent> <leader>il :set invlist<CR>
-vnoremap <silent> <leader>il :<C-W>set invlist<CR>
-
-if has('wildmenu')
-	set wildmenu
-	set wildmode=list:longest,full
-	set wildignore=.bak,.old,.swp,~
-endif
-
-" maximum height of a popup menu
-set pumheight=10
-
-" allow the cursor to be positioned where no characters are in virtual block mode 
-if has('virtualedit')
-	set virtualedit=block
-endif
-
-" enable syntax highlighting
-if has('syntax')
-	syntax enable
-endif
-
-" set via $LANG
-"if has('multi_byte')
-"set encoding=utf-8
-"set termencoding=utf-8
-"endif
-
-" always show a status line
-set laststatus=2
-
-" show as much as possible of the last line
-set display+=lastline
-
-" show matching brackets
-set showmatch
-set matchtime=2
-
-" shorten some messages
-set shortmess=aoOtTI
-
-" set the terminal colors to 256 if not in a VT
-if exists($TERM)
-	if &t_Co == 8 && $TERM !~# '^linux'
-		set t_Co=256
-	endif
-endif
-
-aug CursorLineColumn
-	au!
-	au VimEnter,WinEnter,BufWinEnter * setlocal cursorline cursorcolumn
-	au WinLeave * setlocal nocursorline nocursorcolumn
-aug END
-
-" disable visualbell
-set visualbell
-set t_vb=