Improvements to IdeaVim and Emacs init

This commit is contained in:
Joseph Ferano 2022-12-06 22:25:03 +04:00
parent 94eb22829d
commit 582dd92fff
2 changed files with 218 additions and 154 deletions

View File

@ -5,7 +5,6 @@
#+TOC: true #+TOC: true
** Early Init ** Early Init
*** Garbage Collection *** Garbage Collection
The default Garbage Collector is triggered at 800 KB, way too conservative, let's bump to 512 MB. The default Garbage Collector is triggered at 800 KB, way too conservative, let's bump to 512 MB.
@ -129,6 +128,7 @@ need to benchmark slow init times later.
;; (setq confirm-kill-emacs 'y-or-n-p) ;; (setq confirm-kill-emacs 'y-or-n-p)
(require 'recentf) (require 'recentf)
(recentf-mode t)
(setq recentf-auto-cleanup 'never) (setq recentf-auto-cleanup 'never)
(setq recentf-keep '(file-remote-p file-readable-p)) (setq recentf-keep '(file-remote-p file-readable-p))
@ -165,10 +165,10 @@ I don't even know how you resume from GUI mode, we'll find a use for this keybin
Use Dashboard.el. First load `all-the-icons` for nicer rendering Use Dashboard.el. First load `all-the-icons` for nicer rendering
#+begin_src emacs-lisp #+begin_src emacs-lisp
(straight-use-package 'all-the-icons) ;; (straight-use-package 'all-the-icons)
(straight-use-package 'dashboard) (straight-use-package 'dashboard)
(require 'dashboard)
(dashboard-setup-startup-hook) (dashboard-setup-startup-hook)
(setq initial-buffer-choice (lambda () (get-buffer-create "*dashboard*"))) (setq initial-buffer-choice (lambda () (get-buffer-create "*dashboard*")))
(setq dashboard-items '((recents . 8) (setq dashboard-items '((recents . 8)
(bookmarks . 8))) (bookmarks . 8)))
@ -177,7 +177,9 @@ Use Dashboard.el. First load `all-the-icons` for nicer rendering
(setq dashboard-set-file-icons t) (setq dashboard-set-file-icons t)
(setq dashboard-set-navigator t) (setq dashboard-set-navigator t)
(setq dashboard-set-heading-icons t) (setq dashboard-set-heading-icons t)
(add-hook 'dashboard-mode-hook (lambda () (setq-local line-spacing 12))) (add-hook 'dashboard-mode-hook (lambda ()
(setq-local line-spacing 12)
(dashboard-jump-to-recents)))
#+end_src #+end_src
*** Olivetti *** Olivetti
@ -349,50 +351,6 @@ Emacs is an great operating system, if only it had a good text editor...
(evil-set-leader nil (kbd "C-SPC")) (evil-set-leader nil (kbd "C-SPC"))
(evil-set-leader 'normal (kbd "SPC")) (evil-set-leader 'normal (kbd "SPC"))
(evil-define-key 'normal 'global
(kbd "<leader>w") 'save-buffer
(kbd "<leader>q") 'kill-buffer-and-window
(kbd "<leader>k") 'kill-this-buffer
(kbd "<leader>h") 'help-command
(kbd "<leader>hf") 'helpful-callable
(kbd "<leader>hv") 'helpful-variable
(kbd "<leader>hk") 'helpful-key
(kbd "<leader>ho") 'helpful-symbol
(kbd "<leader>hg") 'helpful-at-point
(kbd "<leader>fb") 'bookmark-jump
(kbd "<leader>fr") 'consult-recent-file
(kbd "<leader>ff") 'project-find-file
(kbd "<leader>fi") 'joe/edit-init
(kbd "<leader>bl") 'mode-line-other-buffer
(kbd "<leader>ba") 'consult-buffer
(kbd "<leader>bb") 'consult-project-buffer
(kbd "<leader>bi") 'ibuffer
(kbd "<leader>bm") 'joe/toggle-buffer-mode
(kbd "<leader>br") 'joe/revert-buffer-no-confirm
(kbd "<leader>gg") 'magit-status
(kbd "<leader>gc") 'magit-clone
(kbd "<leader>ss") 'joe/vterm-here
(kbd "<leader>sv") 'vterm
(kbd "<leader>tv") 'vterm-other-window
(kbd "<leader>Ba") 'joe/bookmark-set-and-save
(kbd "<leader>Bd") 'bookmark-delete
(kbd "<leader>mr") 'joe/compile-run
(kbd "<leader>mc") 'joe/compile-comp
(kbd "<leader>ct") 'consult-theme
(kbd "<leader>cl") 'consult-line
(kbd "<leader>ci") 'consult-imenu
(kbd "<leader>cy") 'consult-yank-from-kill-ring
(kbd "<leader>cg") 'consult-ripgrep
(kbd "<leader>cF") 'consult-find
(kbd "<leader>co") 'consult-outline
(kbd "C-h") 'evil-window-left
(kbd "C-j") 'evil-window-down
(kbd "C-k") 'evil-window-up
(kbd "C-l") 'evil-window-right
(kbd "<leader>tn") 'tab-new
(kbd "<leader>tc") 'tab-close
(kbd "<leader>tr") 'tab-rename)
(evil-define-key 'normal 'global (kbd "q") 'avy-goto-word-0) (evil-define-key 'normal 'global (kbd "q") 'avy-goto-word-0)
(evil-define-key 'normal 'global (kbd "M-1") '(lambda () (interactive) (tab-bar-select-tab 1))) (evil-define-key 'normal 'global (kbd "M-1") '(lambda () (interactive) (tab-bar-select-tab 1)))
@ -444,6 +402,52 @@ Emacs is an great operating system, if only it had a good text editor...
(setq evil-goggles-duration 0.075) (setq evil-goggles-duration 0.075)
(setq evil-goggles-pulse t) (setq evil-goggles-pulse t)
(setq evil-goggles-async-duration 0.55) (setq evil-goggles-async-duration 0.55)
(add-hook 'emacs-startup-hook (lambda ()
(evil-define-key 'normal 'global
(kbd "<leader>w") 'save-buffer
(kbd "<leader>q") 'kill-buffer-and-window
(kbd "<leader>k") 'kill-this-buffer
(kbd "<leader>h") 'help-command
(kbd "<leader>hf") 'helpful-callable
(kbd "<leader>hv") 'helpful-variable
(kbd "<leader>hk") 'helpful-key
(kbd "<leader>ho") 'helpful-symbol
(kbd "<leader>hg") 'helpful-at-point
(kbd "<leader>fb") 'bookmark-jump
(kbd "<leader>fr") 'consult-recent-file
(kbd "<leader>ff") 'project-find-file
(kbd "<leader>fi") 'joe/edit-init
(kbd "<leader>bl") 'mode-line-other-buffer
(kbd "<leader>ba") 'consult-buffer
(kbd "<leader>bb") 'consult-project-buffer
(kbd "<leader>bi") 'ibuffer
(kbd "<leader>bm") 'joe/toggle-buffer-mode
(kbd "<leader>br") 'joe/revert-buffer-no-confirm
(kbd "<leader>gg") 'magit-status
(kbd "<leader>gc") 'magit-clone
(kbd "<leader>ss") 'joe/vterm-here
(kbd "<leader>sv") 'vterm
(kbd "<leader>tv") 'vterm-other-window
(kbd "<leader>Ba") 'joe/bookmark-set-and-save
(kbd "<leader>Bd") 'bookmark-delete
(kbd "<leader>mr") 'joe/compile-run
(kbd "<leader>mc") 'joe/compile-comp
(kbd "<leader>ct") 'consult-theme
(kbd "<leader>cl") 'consult-line
(kbd "<leader>ci") 'consult-imenu
(kbd "<leader>cy") 'consult-yank-from-kill-ring
(kbd "<leader>cg") 'consult-ripgrep
(kbd "<leader>cF") 'consult-find
(kbd "<leader>co") 'consult-outline
(kbd "C-h") 'evil-window-left
(kbd "C-j") 'evil-window-down
(kbd "C-k") 'evil-window-up
(kbd "C-l") 'evil-window-right
(kbd "<leader>tn") 'tab-new
(kbd "<leader>tc") 'tab-close
(kbd "<leader>tr") 'tab-rename)))
#+end_src #+end_src
** Buffers ** Buffers
#+begin_src emacs-lisp #+begin_src emacs-lisp
@ -941,11 +945,56 @@ startup. Reason we have to call this is so the vterm fucntion can call `vterm--i
#+begin_src emacs-lisp #+begin_src emacs-lisp
;; (straight-use-package 'yasnippet) ;; (straight-use-package 'yasnippet)
(straight-use-package 'markdown-mode) (straight-use-package 'markdown-mode)
;; (straight-use-package 'posframe)
;; (straight-use-package '(lsp-bridge
;; :type git
;; :host github
;; :repo "manateelazycat/lsp-bridge"
;; :files (:defaults "*.py" "core/*" "langserver/*")));; (straight-use-package 'lsp-mode)
;; (straight-use-package
;; '(acm-terminal :type git :host github :repo "twlz0ne/acm-terminal"))
;; (straight-use-package
;; '(popon :type git :repo "https://codeberg.org/akib/emacs-popon.git"))
;; (straight-use-package 'lsp-mode) ;; (straight-use-package 'lsp-mode)
;; (straight-use-package 'lsp-ui) ;; (straight-use-package 'lsp-ui)
(evil-global-set-key 'normal (kbd "M-e") #'flymake-goto-next-error)
(evil-global-set-key 'normal (kbd "M-S-e") #'flymake-goto-prev-error)
;; (setq lsp-ui-peek-always-show t)
;; (setq lsp-ui-sideline-show-hover t)
;; (setq lsp-ui-doc-enable t)
;; (setq lsp-rust-analyzer-server-display-inlay-hints t)
;; (setq lsp-rust-analyzer-display-lifetime-elision-hints-enable "skip_trivial")
;; (setq lsp-rust-analyzer-display-chaining-hints t)
;; (setq lsp-rust-analyzer-display-lifetime-elision-hints-use-parameter-names nil)
;; (setq lsp-rust-analyzer-display-closure-return-type-hints t)
;; (setq lsp-rust-analyzer-display-parameter-hints t)
;; (setq lsp-rust-analyzer-display-reborrow-hints t)
;; (setq lsp-rust-analyzer-cargo-watch-command "clippy")
;; (setq lsp-eldoc-render-all t)
;; (setq lsp-eldoc-enable-hover nil)
;; (setq lsp-idle-delay 0.2)
;; (straight-use-package 'eglot)
;; (setq eldoc-echo-area-use-multiline-p t)
;; (setq eldoc-echo-area-prefer-doc-buffer t)
;; (setq eldoc-idle-delay 0.1)
;; (setq lsp-eldoc-render-all nil)
;; (setq lsp-keymap-prefix "C-c c") ;; (setq lsp-keymap-prefix "C-c c")
;; (setq eldoc-documentation-strategy )
;; (defun joe/eldoc-display-docs (interactive)
;; (interactive (list t))
;; (with-current-buffer eldoc--doc-buffer
;; (let ((s (buffer-string)))
;; (with-current-buffer (generate-new-buffer "*persisted eldoc*")
;; (insert s)
;; (display-buffer (current-buffer))))))
;; (require 'lsp) ;; (require 'lsp)
;; (lsp-enable-which-key-integration t) ;; (lsp-enable-which-key-integration t)
;; (straight-use-package 'eglot) ;; (straight-use-package 'eglot)
@ -957,20 +1006,23 @@ startup. Reason we have to call this is so the vterm fucntion can call `vterm--i
;; (add-to-list 'completion-at-point-functions #'cape-symbol) ;; (add-to-list 'completion-at-point-functions #'cape-symbol)
;; (add-to-list 'completion-at-point-functions #'cape-file) ;; (add-to-list 'completion-at-point-functions #'cape-file)
;; (add-to-list 'completion-at-point-functions #'cape-dabbrev) ;; (add-to-list 'completion-at-point-functions #'cape-dabbrev)
(straight-use-package 'kind-icon) ;; (straight-use-package 'kind-icon)
;; (require 'kind-icon) ;; (require 'kind-icon)
;; (setq completion-in-region-function #'consult-completion-in-region) ;; (setq completion-in-region-function #'consult-completion-in-region)
;; (setq completion-in-region-function (kind-icon-enhance-completion completion-in-region-function)) ;; (setq completion-in-region-function (kind-icon-enhance-completion completion-in-region-function))
(setq completion-in-region-function ;; (setq completion-in-region-function
(kind-icon-enhance-completion ;; (kind-icon-enhance-completion
(lambda (&rest args) ;; (lambda (&rest args)
(let ((marginalia-classifiers nil)) ;; (let ((marginalia-classifiers nil))
(apply #'consult-completion-in-region args))))) ;; (apply #'consult-completion-in-region args)))))
(straight-use-package 'company) (straight-use-package 'company)
(require 'company) (require 'company)
;; (setq company-transformers '()) (setq company-minimum-prefix-length 1)
(setq company-tooltip-align-annotations t)
(setq company-minimum-prefix-length 1)
(setq company-transformers '())
(add-to-list 'completion-at-point-functions #'elisp-completion-at-point) (add-to-list 'completion-at-point-functions #'elisp-completion-at-point)
(with-eval-after-load 'company (with-eval-after-load 'company
@ -983,7 +1035,7 @@ startup. Reason we have to call this is so the vterm fucntion can call `vterm--i
(define-key company-active-map (kbd "<backtab>") (lambda () (interactive) (company-complete-common-or-cycle -1))) (define-key company-active-map (kbd "<backtab>") (lambda () (interactive) (company-complete-common-or-cycle -1)))
(setq company-idle-delay 0.15 (setq company-idle-delay 0.15
company-tooltip-idle-delay 20 company-tooltip-idle-delay 0.5
company-require-match nil company-require-match nil
company-frontends '(company-preview-frontend company-echo-metadata-frontend) company-frontends '(company-preview-frontend company-echo-metadata-frontend)
;; company-frontends ;; company-frontends
@ -1063,9 +1115,6 @@ it doesn't close it.
(popper-close-latest)))))) (popper-close-latest))))))
(add-hook 'compilation-finish-functions 'joe/close-compilation-if-no-warn-err) (add-hook 'compilation-finish-functions 'joe/close-compilation-if-no-warn-err)
(global-set-key (kbd "C-c e n") #'flymake-goto-next-error)
(global-set-key (kbd "C-c e p") #'flymake-goto-prev-error)
#+end_src #+end_src
*** Go *** Go
@ -1073,7 +1122,7 @@ it doesn't close it.
(straight-use-package 'go-mode) (straight-use-package 'go-mode)
;; (straight-use-package 'go-imports) ;; (straight-use-package 'go-imports)
#+end_src #+end_src
** FSharp *** FSharp
#+begin_src emacs-lisp #+begin_src emacs-lisp
;; (straight-use-package 'eglot) ;; (straight-use-package 'eglot)
(straight-use-package 'fsharp-mode) (straight-use-package 'fsharp-mode)
@ -1083,8 +1132,21 @@ it doesn't close it.
*** Rust *** Rust
#+begin_src emacs-lisp #+begin_src emacs-lisp
(straight-use-package 'rust-mode) (straight-use-package 'rust-mode)
(straight-use-package 'rustic)
(straight-use-package 'parsec) ;; Required by evcxr-mode
(straight-use-package
'(evcxr
:type git
:host github
:repo "serialdev/evcxr-mode"
:config
(add-hook 'rust-mode-hook #'evcxr-minor-mode)))
;; (straight-use-package 'flycheck) ;; (straight-use-package 'flycheck)
#+end_src #+end_src
*** Json
#+begin_src emacs-lisp
(straight-use-package 'json)
#+end_src
** Magit ** Magit
The best git porcelain/client I've ever used. Also kill stray magit buffers left over as explained [[https://manueluberti.eu/emacs/2018/02/17/magit-bury-buffer/][here]] The best git porcelain/client I've ever used. Also kill stray magit buffers left over as explained [[https://manueluberti.eu/emacs/2018/02/17/magit-bury-buffer/][here]]

View File

@ -1,130 +1,132 @@
let mapleader = " " let mapleader = " "
set so=3
set incsearch set incsearch
set hlsearch
set clipboard+=unnamed set clipboard+=unnamed
set number set number
set relativenumber set relativenumber
set surround "" set idearefactormode=visual
set multiple-cursors
set ideajoin
set idearefactormode=visual set idearefactormode=visual
set ignorecase set ignorecase
set commentary set commentary
set NERDTree
set highlightedyank set highlightedyank
set NERDTree
set ideajoin
set surround
set multiple-cursors
" TODO Find bindings for these " TODO Find bindings for these
" nnoremap <Leader>rc :action ChooseRcnConfiguration<CR> " map <Leader>rc :action ChooseRcnConfiguration<CR>
" nnoremap ;b :action ToggleLineBreakpoint<CR> " map ;b :action ToggleLineBreakpoint<CR>
" nnoremap ;e :action EvaluateExpression<CR> " map ;e :action EvaluateExpression<CR>
" nnoremap ;d :action Debug<CR> " map ;d :action Debug<CR>
" nnoremap ;r :action Resume<CR> " map ;r :action Resume<CR>
" nnoremap ;s :action StepInto<CR> " map ;s :action StepInto<CR>
" nnoremap ;n :action StepOver<CR> " map ;n :action StepOver<CR>
" nmap :action<Up><CR> **** Repeat last command " nmap :action<Up><CR> **** Repeat last command
" Find out about VCS tool " Find out about VCS tool
" We need to get good bindings for window navigation " We need to get good bindings for window navigation
" IDE has nice search behavior, consider adding these " IDE has nice search behavior, consider adding these
" map / :action Find<CR> " map / :action Find<CR>
" nnoremap n :action FindNext<CR> " map n :action FindNext<CR>
" nnoremap N :action FindPrevious<CR> " map N :action FindPrevious<CR>
" vnoremap n :action FindNext<CR> " vnoremap n :action FindNext<CR>
" vnoremap N :action FindPrevious<CR> " vnoremap N :action FindPrevious<CR>
" nnoremap * :action FindWordAtCaret<CR> " map * :action FindWordAtCaret<CR>
" nnoremap # :action FindWordAtCaret<CR> " map # :action FindWordAtCaret<CR>
nnoremap <Leader>f :action FindInPath<CR> map ' `
map Y y$
map $ g_
map vv ^vg_
vnoremap < <gv
vnoremap > >gv
map gt <Action>(GotoTypeDeclaration)
nnoremap <C-=> :action EditorIncreaseFontSize<CR> map <Leader>f <Action>(FindInPath)
nnoremap <C--> :action EditorDecreaseFontSize<CR> map <C-A-d> <Action>(ToggleDistractionFreeMode)
nnoremap <C-0> :action EditorResetFontSize<CR> map <C-=> <Action>(EditorIncreaseFontSize)
map <C--> <Action>(EditorDecreaseFontSize)
map <C-0> <Action>(EditorResetFontSize)
nnoremap ) :action MethodDown<CR> map ) <Action>(MethodDown)
nnoremap ( :action MethodUp<CR> map ( <Action>(MethodUp)
nnoremap \ q map \ q
nnoremap q :action KJumpAction.Word0<CR> map q <Action>(KJumpAction.Word0)
noremap <Leader>rl :source ~/.ideavimrc<CR> map <Leader>i :e ~/.ideavimrc<CR>
noremap <Leader>i :e ~/.ideavimrc<CR>
nnoremap <C-p>p :action SearchEverywhere<CR> map <C-p>p <Action>(SearchEverywhere)
nnoremap <C-p>c :action GotoClass<CR> map <C-p>c <Action>(GotoClass)
nnoremap <C-p>t :action FileStructurePopup<CR> map <C-p>s <Action>(FileStructurePopup)
nnoremap <C-p>f :action GotoFile<CR> map <C-p>f <Action>(GotoFile)
nnoremap <C-p>r :action RecentFiles<CR> map <C-p>r <Action>(RecentFiles)
nnoremap <C-p>u :action GotoTest<CR> map <A-x> <Action>(GotoAction)
" map <C-p>u <Action>(GotoTest)
nnoremap zd :action CollapseDocComments<CR> map zd <Action>(CollapseDocComments)
nnoremap zD :action ExpandDocComments<CR> map zD <Action>(ExpandDocComments)
nnoremap <C-w>H :action MoveEditorToOppositeTabGroup<CR> map <C-w>H <Action>(MoveEditorToOppositeTabGroup)
nnoremap <C-w>L :action MoveEditorToOppositeTabGroup<CR> map <C-w>L <Action>(MoveEditorToOppositeTabGroup)
nnoremap <C-e> 2<C-e> noremap <C-e> 2<C-e>
nnoremap <C-y> 2<C-y> noremap <C-y> 2<C-y>
nnoremap gt :action GotoTypeDeclaration<CR> map <Leader>h <Action>(HideAllWindows)
nnoremap <Leader>h :action HideAllWindows<CR> map <Leader>q <Action>(CloseContent)
nnoremap <Leader>q :action CloseContent<CR> map <Leader>d <Action>(QuickImplementations)
nnoremap <Leader>d :action QuickImplementations<CR> map <Leader>t <Action>(QuickJavaDoc)
nnoremap <Leader>t :action QuickJavaDoc<CR> map <Leader>e <Action>(ShowErrorDescription)
nnoremap <Leader>e :action ShowErrorDescription<CR> map <Leader>u <Action>(FindUsages)
nnoremap <Leader>u :action FindUsages<CR> map <Leader>rn <Action>(RenameElement)
nnoremap <Leader>rn :action RenameElement<CR> map <Leader>c <Action>(ChangeColorScheme)
nnoremap <Leader>c :action ChangeColorScheme<CR> map <Leader>bb <Action>(BuildCurrentProject)
nnoremap <Leader>; :actionlist<Space> map <Leader>br <Action>(Run)
nnoremap <Leader>bb :action BuildCurrentProject<CR> map <Leader>bc <Action>(RunClass)
nnoremap <Leader>br :action Run<CR> map <Leader>bd <Action>(Debug)
nnoremap <Leader>bc :action RunClass<CR> map <Leader>bs <Action>(BuildSolutionAction)
nnoremap <Leader>bd :action Debug<CR> map <Leader>; :actionlist<Space>
nnoremap <Leader>bs :action BuildSolutionAction<CR>
vnoremap gq :action aligncarets.AlignAction<CR> map <Leader>w <Action>(SaveDocument)
nnoremap <Leader>w :action SaveDocument<CR> map <Leader>or <Action>(ManageRecentProjects)
nnoremap <Leader>or :action ManageRecentProjects<CR>
noremap - :action LocateInSolutionView<CR> " noremap - <Action>(LocateInSolutionView)
noremap - :action SelectInProjectView<CR> noremap - :action SelectInProjectView<CR>
noremap = :action ReformatCode<CR> map = <Action>(ReformatCode)
vnoremap = :action ReformatCode<CR> " vnoremap = <Action>(ReformatCode)
nnoremap <Leader>/ :nohlsearch<CR> map <Leader>/ :nohlsearch<CR>
nnoremap g/ :action Find<CR> map g/ <Action>(Find)
nnoremap <A-x> :action GotoAction<CR>
" So we jump to both line and column for marks map g; <Action>(JumpToLastChange)
nnoremap ' ` map g, <Action>(JumpToNextChange)
nnoremap Y y$
nnoremap $ g_
nnoremap vv ^vg_
nnoremap g; :action JumpToLastChange<CR>
nnoremap g, :action JumpToNextChange<CR>
nnoremap <C-1> :action GoToTab1<CR> map <A-1> <Action>(GoToTab1)
nnoremap <C-2> :action GoToTab2<CR> map <A-2> <Action>(GoToTab2)
nnoremap <C-3> :action GoToTab3<CR> map <A-3> <Action>(GoToTab3)
nnoremap <C-4> :action GoToTab4<CR> map <A-4> <Action>(GoToTab4)
nnoremap <C-5> :action GoToTab5<CR> map <A-5> <Action>(GoToTab5)
nnoremap <C-6> :action GoToTab6<CR> map <A-6> <Action>(GoToTab6)
nnoremap <C-7> :action GoToTab7<CR> map <A-7> <Action>(GoToTab7)
nnoremap <C-8> :action GoToTab8<CR> map <A-8> <Action>(GoToTab8)
nnoremap <C-9> :action GoToTab9<CR> map <A-9> <Action>(GoToTab9)
nnoremap <C-j> :action MoveLineDown<CR> map <C-S-j> <Action>(MoveLineDown)
nnoremap <C-k> :action MoveLineUp<CR> map <C-S-k> <Action>(MoveLineUp)
nnoremap <C-h> <c-w>h map <C-h> <c-w>h
nnoremap <C-l> <c-w>l map <C-l> <c-w>l
noremap <C-S-s> :action SurroundWithLiveTemplate<CR> map <C-j> <c-w>j
map <C-k> <c-w>k
map <C-S-s> <Action>(SurroundWithLiveTemplate)
nnoremap <A-j> :action EditorCloneCaretBelow<CR> map <A-j> <Action>(EditorCloneCaretBelow)
nnoremap <A-k> :action EditorCloneCaretAbove<CR> map <A-k> <Action>(EditorCloneCaretAbove)
nnoremap <A-;> A;<Esc> map <A-;> A;<Esc>
inoremap <A-;> <Esc>A;<Esc> map <A-,> A,<Esc>
" nnoremap <A-d> :action ToggleDistractionFreeMode<CR> imap <A-;> <Esc>A;<Esc>
" nnoremap <A-f> :action ToggleFullScreen<CR> map <A-e> <Action>(GotoNextError)
nnoremap <A-e> :action GotoNextError<CR> map <S-A-e> <Action>(GotoPreviousError)
nnoremap <S-A-e> :action GotoPreviousError<CR> map <A-o> moo<Esc>'o
nnoremap <A-o> moo<Esc>'o map <A-S-o> moO<Esc>'o
nnoremap <A-S-o> moO<Esc>'o map <S-A-h> <Action>(ParameterNameHints)
nnoremap <S-A-h> :action ParameterNameHints<CR>