14 Commits

7 changed files with 134 additions and 20 deletions

1
after/ftplugin/cabal.vim Normal file
View File

@@ -0,0 +1 @@
setlocal expandtab

View File

@@ -60,7 +60,7 @@ let g:vim_annotations_offset = '/.liquid/'
" LSP
let g:LanguageClient_autoStart = 1
let g:LanguageClient_serverCommands = {
\ 'haskell': ['hie', '--lsp', '-d', '-l', $HOME.'/lang-server.log'],
\ 'haskell': ['hie-wrapper', '--lsp', '-d', '-l', $HOME.'/lang-server.log'],
\ }
" we use ALE instead
let g:LanguageClient_diagnosticsEnable = 0
@@ -68,6 +68,7 @@ let g:LanguageClient_diagnosticsEnable = 0
nnoremap <leader>lc :call LanguageClient_contextMenu()<CR>
nnoremap <silent> gd :call LanguageClient#textDocument_definition()<CR>
nnoremap <silent> <C-F6> :call LanguageClient#textDocument_hover()<CR>
vnoremap <silent> <C-F6> :call LanguageClient#textDocument_hover()<CR>
nnoremap <silent> <F8> :call LanguageClient#textDocument_rename()<CR>
" deoplete
@@ -77,17 +78,21 @@ call deoplete#custom#option('sources',{
\ })
" inoremap <expr><tab> pumvisible() ? "\<c-n>" : "\<tab>"
call deoplete#enable()
call deoplete#enable_logging('DEBUG', $HOME . '/deoplete.log')
let g:ghcmod_hlint_options = ['--ignore=Eta reduce $']
" ALE
let g:ale_enabled = 1
let g:ale_linters = {'haskell':['ghc-mod', 'hdevtools'], 'c':['clang']}
" let g:ale_linters = {'haskell':['ghc-mod', 'hdevtools', 'argon'], 'c':['clang']}
" let g:ale_fixers = {
" \ 'go': ['gofmt', 'goimports'],
" \ 'haskell': ['brittany'],
" \}
let g:ale_haskell_hdevtools_options = "-g '-Wall' -g '-Wno-orphans'"
let g:ale_haskell_argon_error_level = 14
let g:ale_haskell_argon_warn_level = 10
let g:ale_haskell_argon_info_level = 6
" completion
"

View File

@@ -0,0 +1,69 @@
" Author: Julian Ospald <hasufell@hasufell.de>
" Description: argon for Haskell files
call ale#Set('haskell_argon_executable', 'argon')
call ale#Set('haskell_argon_options', '')
call ale#Set('haskell_argon_error_level', 12)
call ale#Set('haskell_argon_warn_level', 8)
call ale#Set('haskell_argon_info_level', 4)
function! ale_linters#haskell#argon#GetExecutable(buffer) abort
return ale#Var(a:buffer, 'haskell_argon_executable')
endfunction
function! ale_linters#haskell#argon#GetCommand(buffer) abort
return ale#Escape(ale_linters#haskell#argon#GetExecutable(a:buffer))
\ . ' '
\ . ale#Var(a:buffer, 'haskell_argon_options')
\ . ' -m ' . ale#Var(a:buffer, 'haskell_argon_info_level')
\ . ' -j'
\ . ' %t'
endfunction
function! ale_linters#haskell#argon#Handle(buffer, lines) abort
let l:output = []
for l:error in ale#util#FuzzyJSONDecode(a:lines, [])
if !has_key(l:error, 'blocks')
" this cannot be formatted properly into an ALE error
execute 'echom ''[argon] '' l:error.message'
return l:output
endif
for l:block in l:error.blocks
let l:complexity = l:block.complexity
if l:complexity >= ale#Var(a:buffer, 'haskell_argon_error_level')
let l:type = 'E'
let l:max_c = ale#Var(a:buffer, 'haskell_argon_error_level')
elseif l:complexity >= ale#Var(a:buffer, 'haskell_argon_warn_level')
let l:type = 'W'
let l:max_c = ale#Var(a:buffer, 'haskell_argon_warn_level')
else
let l:type = 'I'
let l:max_c = ale#Var(a:buffer, 'haskell_argon_info_level')
endif
call add(l:output, {
\ 'filename': l:error.path,
\ 'lnum': l:block.lineno,
\ 'col': l:block.col,
\ 'text': l:block.name . ': cyclomatic complexity of ' . l:complexity,
\ 'type': l:type,
\})
endfor
endfor
return l:output
endfunction
call ale#linter#Define('haskell', {
\ 'name': 'argon',
\ 'executable_callback': 'ale_linters#haskell#argon#GetExecutable',
\ 'command_callback': 'ale_linters#haskell#argon#GetCommand',
\ 'callback': 'ale_linters#haskell#argon#Handle',
\})

View File

@@ -37,6 +37,9 @@ noremap <leader>bd <Esc>:bd<CR>
noremap <leader>wc <Esc>:bd<CR>
noremap <leader>bo <Esc>:Bufonly<CR>
" close preview
nmap <C-p> :pc<CR>
" Remap window commands
" map <leader>ws <Esc>:wincmd s<CR>
" map <leader>wv <Esc>:wincmd v<CR>

View File

@@ -706,6 +706,11 @@ let s:FUF_BUF_NAME = '[fuf]'
"
function s:activateFufBuffer()
" Save the last window number so we can switch back to it later (otherwise,
" at least with more recent versions of Vim, we end up with the top left
" window focused)
let s:fuf_buffer_last_winnr = winnr()
" lcd . : To avoid the strange behavior that unnamed buffer changes its cwd
" if 'autochdir' was set on.
lcd .
@@ -733,6 +738,7 @@ function s:deactivateFufBuffer()
AutoComplPopUnlock
endif
call l9#tempbuffer#close(s:FUF_BUF_NAME)
exec s:fuf_buffer_last_winnr . "wincmd w"
endfunction
" }}}1

View File

@@ -0,0 +1,36 @@
From fd41e8d68b6774324b58c02692b896a6a36a0397 Mon Sep 17 00:00:00 2001
From: David Wolever <david@wolever.net>
Date: Thu, 1 Jun 2017 10:11:43 -0400
Subject: [PATCH] Fix focus top left window bug
With newer versions of Vim, the top left window will be focused after
opening the fuf menu. This patch restores the window focus after the
menu is closed.
---
autoload/fuf.vim | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/autoload/fuf.vim b/autoload/fuf.vim
index fe9e6eb..78be490 100644
--- a/autoload/fuf.vim
+++ b/autoload/fuf.vim
@@ -706,6 +706,11 @@ let s:FUF_BUF_NAME = '[fuf]'
"
function s:activateFufBuffer()
+ " Save the last window number so we can switch back to it later (otherwise,
+ " at least with more recent versions of Vim, we end up with the top left
+ " window focused)
+ let s:fuf_buffer_last_winnr = winnr()
+
" lcd . : To avoid the strange behavior that unnamed buffer changes its cwd
" if 'autochdir' was set on.
lcd .
@@ -733,6 +738,7 @@ function s:deactivateFufBuffer()
AutoComplPopUnlock
endif
call l9#tempbuffer#close(s:FUF_BUF_NAME)
+ exec s:fuf_buffer_last_winnr . "wincmd w"
endfunction
" }}}1

28
vimrc
View File

@@ -44,14 +44,9 @@ Plug 'tpope/vim-rhubarb'
Plug 'sjbach/lusty'
if has("nvim")
Plug 'iCyMind/NeoSolarized'
Plug 'vim-airline/vim-airline'
else
Plug 'powerline/powerline', {
\ 'branch': 'develop',
\ 'do': 'python3 setup.py install --user',
\ 'rtp': 'powerline/bindings/vim',
\ }
endif
Plug 'vim-airline/vim-airline'
Plug 'vim-airline/vim-airline-themes'
" local_vimrc
Plug 'LucHermitte/lh-vim-lib'
@@ -85,7 +80,9 @@ Plug 'autozimu/LanguageClient-neovim', {
Plug 'junegunn/fzf', { 'for': 'haskell' }
" linting/compilation
Plug 'w0rp/ale'
Plug 'w0rp/ale', {
\ 'do': 'bash -c \"cp -R ~/.vim/ale_linters .\"',
\ }
" haskell
" if has("nvim")
@@ -95,7 +92,7 @@ Plug 'eagletmt/ghcmod-vim', { 'for': 'haskell' }
" completion based on ghc-mod, not LSP
" Plug 'eagletmt/neco-ghc', { 'for': 'haskell' }
Plug 'lukerandall/haskellmode-vim', { 'for': 'haskell' }
Plug 'neovimhaskell/haskell-vim', { 'for': 'haskell' }
Plug 'neovimhaskell/haskell-vim', { 'for': ['haskell', 'cabal'] }
Plug 'ucsd-progsys/liquid-types.vim', { 'for': 'haskell' }
Plug 'bitc/lushtags', {
\ 'do': 'bash -c \"cabal clean && cabal sandbox delete && cabal sandbox init && cabal install && cp .cabal-sandbox/bin/lushtags ~/.cabal/bin/lushtags\"',
@@ -160,12 +157,6 @@ so ~/.vim/plugged/cmdalias.vim/plugin/cmdalias.vim
if !has("nvim")
"powerline
python3 from powerline.vim import setup as powerline_setup
python3 powerline_setup()
python3 del powerline_setup
set laststatus=2
" lj
let g:LustyJugglerSuppressRubyWarning = 1
endif
@@ -192,7 +183,10 @@ if has('conceal')
endif
" Enable snipMate compatibility feature.
let g:neosnippet#enable_snipmate_compatibility = 1
let g:neosnippet#disable_runtime_snippets = 1
" vim airline
" let g:airline#extensions#tabline#enabled = 1
" LSP
@@ -294,7 +288,7 @@ vnoremap x "_x
nnoremap x "_x
" Syntax
syntax enable
syntax on
" pane navigation
" Use ctrl-[hjkl] to select the active split!