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
** Early Init
*** Garbage Collection
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)
(require 'recentf)
(recentf-mode t)
(setq recentf-auto-cleanup 'never)
(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
#+begin_src emacs-lisp
(straight-use-package 'all-the-icons)
;; (straight-use-package 'all-the-icons)
(straight-use-package 'dashboard)
(require 'dashboard)
(dashboard-setup-startup-hook)
(setq initial-buffer-choice (lambda () (get-buffer-create "*dashboard*")))
(setq dashboard-items '((recents . 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-navigator 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
*** 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 '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 "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-pulse t)
(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
** Buffers
#+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
;; (straight-use-package 'yasnippet)
(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-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 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)
;; (lsp-enable-which-key-integration t)
;; (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-file)
;; (add-to-list 'completion-at-point-functions #'cape-dabbrev)
(straight-use-package 'kind-icon)
;; (straight-use-package 'kind-icon)
;; (require 'kind-icon)
;; (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
(lambda (&rest args)
(let ((marginalia-classifiers nil))
(apply #'consult-completion-in-region args)))))
;; (setq completion-in-region-function
;; (kind-icon-enhance-completion
;; (lambda (&rest args)
;; (let ((marginalia-classifiers nil))
;; (apply #'consult-completion-in-region args)))))
(straight-use-package '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)
(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)))
(setq company-idle-delay 0.15
company-tooltip-idle-delay 20
company-tooltip-idle-delay 0.5
company-require-match nil
company-frontends '(company-preview-frontend company-echo-metadata-frontend)
;; company-frontends
@ -1063,9 +1115,6 @@ it doesn't close it.
(popper-close-latest))))))
(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
*** Go
@ -1073,7 +1122,7 @@ it doesn't close it.
(straight-use-package 'go-mode)
;; (straight-use-package 'go-imports)
#+end_src
** FSharp
*** FSharp
#+begin_src emacs-lisp
;; (straight-use-package 'eglot)
(straight-use-package 'fsharp-mode)
@ -1083,8 +1132,21 @@ it doesn't close it.
*** Rust
#+begin_src emacs-lisp
(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)
#+end_src
*** Json
#+begin_src emacs-lisp
(straight-use-package 'json)
#+end_src
** 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]]

View File

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