set number relativenumber
set ideajoin
set linenumber
set showmode
set showcmd
set incsearch
set hlsearch
set scrolloff=10
set visualbell
set ignorecase
set smartcase
set notimeout
set clipboard+=unnamed

" 3rd party
set which-key
set surround
set highlightedyank

" Which Key
let g:WhichKey_FontSize = 16
let g:WhichKey_CommandColor = "#41ead4"
let g:WhichKey_PrefixColor = "#f335b2"
let g:WhichKey_SortOrder = "by_key_prefix_first"

" NerdTree
Plug 'preservim/nerdtree'
nnoremap <C-n> :NERDTree<CR>

let g:NERDTreeWinSize=30
let g:NERDTreeMapPreview=0
let g:NERDTreeMapActivateNode='l'
let g:NERDTreeMapJumpParent='h'

let mapleader=' '


" Manage Projects
noremap <C-Space>s :action ManageRecentProjects<CR>

" Tab Navigation
noremap <S-l> :action NextTab<CR>
noremap <S-h> :action PreviousTab<CR>

" Pane Navigation
sethandler <c-j> a:vim
sethandler <c-k> a:vim
noremap <C-h> <C-w>h
noremap <C-l> <C-w>l
noremap <C-k> <C-w>k
noremap <C-j> <C-w>j

" Navigation
let g:WhichKeyDesc_GoToFile = "<leader>ff Go to file"
let g:WhichKeyDesc_RecentFiles = "<leader><leader> Recent files"
let g:WhichKeyDesc_RecentLocations = "<leader>fl Recent locations"
let g:WhichKeyDesc_NewScratchFile = "<leader>fs New scratch file"
map <leader>ff <action>(GoToFile)
map <leader><leader> <action>(RecentFiles)
map <leader>fl <action>(RecentLocations)
map <leader>fs <action>(NewScratchFile)

" Center Screen with Page up and down
nnoremap <C-d> <C-d>zz
nnoremap <C-u> <C-u>zz

" Window Management
let g:WhichKeyDesc_WindowManagement = "<leader>% Window management"
let g:WhichKeyDesc_SplitVertically = "<leader>% Split vertically"
let g:WhichKeyDesc_SplitHorizontally = "<leader>\" Split horizontally"
let g:WhichKeyDesc_CloseContent = "<leader>x Close content"
let g:WhichKeyDesc_MoveEditorToOppositeTabGroup = "<leader>wm Move editor to opposite tab group"
map <leader>% <action>(SplitVertically)
map <leader>" <action>(SplitHorizontally)
map <leader>x <action>(CloseContent)
map <leader>wm <action>(MoveEditorToOppositeTabGroup)

" Popup Navigation
inoremap <C-j> <Action>(PopupMenu-selectNext)
inoremap <C-k> <Action>(PopupMenu-selectPrev)

" Debug options
let g:WhichKeyDesc_DebugOptions = "<leader>dd Debug options"
let g:WhichKeyDesc_ToggleLineBreakpoint = "<leader>db Toggle line breakpoint"
map <leader>dd <action>(Debug)
map <leader>db <action>(ToggleLineBreakpoint)

" Actions
let g:WhichKeyDesc_Actions = "<leader>a Actions"
let g:WhichKeyDesc_ShowIntentionActions = "<leader>am Show intention actions"
let g:WhichKeyDesc_SearchEverywhere = "<leader>as Search everywhere"
map <leader>am <action>(ShowIntentionActions)
map <leader>as <action>(SearchEverywhere)

" Refactoring
let g:WhichKeyDesc_Refactoring = "<leader>r Refactoring"
let g:WhichKeyDesc_RenameElement = "<leader>rn Rename element"
let g:WhichKeyDesc_ExtractMethod = "<leader>re Extract method"
let g:WhichKeyDesc_IntroduceVariable = "<leader>rv Introduce variable"
let g:WhichKeyDesc_IntroduceField = "<leader>rf Introduce field"
let g:WhichKeyDesc_ChangeSignature = "<leader>rs Change signature"
let g:WhichKeyDesc_QuickListPopupAction = "<leader>rr Quick list popup action"
map <leader>rn <action>(RenameElement)
map <leader>re <action>(ExtractMethod)
map <leader>rv <action>(IntroduceVariable)
map <leader>rf <action>(IntroduceField)
map <leader>rs <action>(ChangeSignature)
map <leader>rr <action>(Refactorings.QuickListPopupAction)

" Go To Code
let g:WhichKeyDesc_GoToCode = "<leader>g Go to code"
let g:WhichKeyDesc_GoToDeclaration = "<leader>gd Go to declaration"
let g:WhichKeyDesc_GotoTypeDeclaration = "<leader>gy Goto type declaration"
let g:WhichKeyDesc_GotoImplementation = "<leader>gi Goto implementation"
let g:WhichKeyDesc_ShowUsages = "<leader>gu Show usages"
let g:WhichKeyDesc_GotoTest = "<leader>gt Goto test"
let g:WhichKeyDesc_Back = "<leader>gb Back"
let g:WhichKeyDesc_Forward = "<leader>gf Forward"
map <leader>gd <action>(GoToDeclaration)
map <leader>gy <action>(GotoTypeDeclaraton)
map <leader>gi <action>(GotoImplementation)
map <leader>gu <action>(ShowUsages)
map <leader>gt <action>(GotoTest)
map <leader>gb <action>(Back)
map <leader>gf <action>(Forward)

" Go Tag
let g:WhichKeyDesc_GoTag = "<leader>gt Go tag"
let g:WhichKeyDesc_GoTag_AddKey = "<leader>gt Add Tag"
map <leader>gt :action IntentionActionAsAction_com.goide.inspections.tag.GoTagAddKeyIntention<CR>

" Errors
let g:WhichKeyDesc_Errors = "<leader>e Errors"
let g:WhichKeyDesc_NextError = "<leader>en Next error in solution"
let g:WhichKeyDesc_PrevError = "<leader>ep Previous error in solution"
map <leader>en <action>(ReSharperGotoNextErrorInSolution)
map <leader>ep <action>(ReSharperGotoPrevErrorInSolution)

" Menu
let g:WhichKeyDesc_Menu = "<leader>m Menu"
let g:WhichKeyDesc_Menu_Main = "<leader>mm Main menu"
let g:WhichKeyDesc_AnalyzeMenu = "<leader>ma Analyze Menu"
let g:WhichKeyDesc_BuildMenu = "<leader>mb Build Menu"
let g:WhichKeyDesc_CodeMenu = "<leader>mc Code menu"
let g:WhichKeyDesc_FindMenuGroup = "<leader>mf Find menu group"
let g:WhichKeyDesc_GoToMenu = "<leader>mg Go to menu"
let g:WhichKeyDesc_ScopeViewPopupMenu = "<leader>ms Scope view popup menu"
let g:WhichKeyDesc_EditorTabPopupMenu = "<leader>mt Editor tab popup menu"
let g:WhichKeyDesc_ToolWindowsGroup = "<leader>mw Tool windows group"
map <leader>mm <action>(MainMenu)
map <leader>ma <action>(AnalyzeMenu)
map <leader>mb <action>(BuildMenu)
map <leader>mc <action>(CodeMenu)
map <leader>mf <action>(FindMenuGroup)
map <leader>mg <action>(GoToMenu)
map <leader>ms <action>(ScopeViewPopupMenu)
map <leader>mt <action>(EditorTabPopupMenu)
map <leader>mw <action>(ToolWindowsGroup)

" Run
map <leader>rc <action>(RunClass)
