====== Learn ====== Things to learn through repetition. ===== CoPilotChat in vim ===== Shortcut to official [[https://github.com/CopilotC-Nvim/CopilotChat.nvim?tab=readme-ov-file#features|Features and Short cut keys]]. ^ Insert ^ Normal ^ Action ^ | | - | Trigger/accept completion menu for tokens | | | | Submit the current prompt | | - | grr | Toggle sticky prompt for line under cursor | | - | grx | Clear all sticky prompts in prompt | | | q | Close the chat window | | | | Reset and clear the chat window | | | | Accept nearest diff | | - | gj | Jump to section of nearest diff | | - | gqa | Add all answers from chat to quickfix list | | - | gqd | Add all diffs from chat to quickfix list | | - | gy | Yank nearest diff to register | | - | gd | Show diff between source and nearest diff | | - | gi | Show info about current chat | | - | gc | Show current chat context | | - | gh | Show help message | GitHub Copilot's Suggestions: ^ Insert ^ Action ^ | | Dismiss the current suggestion. | | , | Cycle to the next/prev suggestion, if one is available. | | | Accept the **next word** of the current suggestion. | | | Accept the next line of the current suggestion. | | | Explicitly request a suggestion. | ===== LSP in vim ===== ^ Insert ^ Normal ^ Action ^ | | ]d, [d, | Next/Prev diagnostic | | | d, d | Show diagnostic popup | | | gra | if "(fixes available)" then [[https://neovim.io/doc/user/lsp.html#_global-defaults|code actions]] appear at bottom | | | K | hover window (details on selected word) | | | ]q, [q, :ccl | Next/Prev close QuickFix List | | | ]l, [l, :lcl | Next/Prev close Location List | | | gq | Format lines (best with visual mode) uses .clang-format | | | ,z | Close preview window | ===== CLI/UI Navigation (vim / tmux / i3) ===== Vim, tmux and i3 all have similar concepts. You can have multiple things on screen, each can be maximized, and you can also have collections of those things offscreen. This is an over simplification. We're not going to get into things like vim buffers, tmux sessions, and i3 containers. Let's keep it simple. ^ Nomenclature ^^^ ^ Tool ^ Things on screen ^ Off screen ^ | vim | windows | tabs | | tmux | panes | windows | | i3 | windows | workspaces | If I'm in i3, I'm usually local to the machine and don't start tmux sessions. So for me it's either ssh+tmux+vim+entr, or i3+vim+entr. These are the everyday things I have to do in each: ^ New Vim Window / tmux Pane / i3 Window ^^^ ^ Context ^ Key ^ Action ^ | vim | C-w,n | New empty window | | vim | C-w,s | Duplicate window below | | vim | C-w,v | Duplicate window on side | | tmux | Prefix,s | New pane below | | tmux | Prefix,v | New pane on side | | i3 | Mod+d or Enter or g | Every app launches into a new window (find [[https://git.dlma.com/dotfiles.git/raw/HEAD/.config/i3/config|mod+g]]) | ^ Close Window / Pane / Window ^^^ ^ Context ^ Key ^ Action ^ | vim | C-w,q | Quit this window | | vim | C-w,o | Close other windows, leaving only this one. | | tmux | exit or C-d | Terminate the shell to close pane | | i3 | | Close the app its normal way | ^ Resize Window / Pane / Window ^^^ ^ Context ^ Key ^ Action ^ | vim | C-w,= | Make windows equal size | | vim | C-w,<>+- | <,> for width; +,- for height | | tmux | Prefix,HJKL | Change dimension in that direction | | tmux | Prefix,C-arrow | Change dimension in that direction | | i3 | Mod+r,hjkl | Enter resize mode (or drag bar with mouse) | ^ Maximize Window / Pane / Window ^^^ ^ Context ^ Key ^ Action ^ | vim | Leader,o | Maximize only this window in new tab (find [[https://git.dlma.com/dotfiles.git/raw/HEAD/.vimrc|o]]) | | tmux | Prefix,z | toggle maximize | | i3 | Mod+f | maximize window | ^ Navigate Window, Buffer / Pane / Window ^^^ ^ Context ^ Key ^ Action ^ | vim | C-w,hjkl | Select that window | | vim | tab | Next buffer (in this window) (find [[https://git.dlma.com/dotfiles.git/raw/HEAD/.vimrc|]]) | | tmux | Prefix,hjkl | Select that pane | | tmux | Prefix,tab | Next/prev pane, maximized (find [[https://git.dlma.com/dotfiles.git/raw/HEAD/.tmux.conf|Tab]]) | | i3 | Mod+hjkl | select that window | ^ Swap Window / Pane / Window ^^^ ^ Context ^ Key ^ Action ^ | vim | C-w,HJKL | Move window in that direction | | tmux | Prefix,{ or } | Swap panes | | tmux | Prefix,space | Rotate splits | | i3 | Mod+HJKL | Move window in that direction | ^ New Tab / Window / Workspace ^^^ ^ Context ^ Key ^ Action ^ | vim | Leader,t,n or :tabnew | New tab | | tmux | Prefix,c | Create a new window | | i3 | Ctrl+Mod+Shift+o | Move to first available workspace (find [[https://git.dlma.com/dotfiles.git/raw/HEAD/.config/i3/config|$mod+Shift+Ctrl+o]]) | ^ Navigate Tab / Window / Workspace ^^^ ^ Context ^ Key ^ Action ^ | vim | gt or gT | Navigate prev or next tab | | tmux | Prefix,p or n | Previous or next window | | i3 | Ctrl+Mod+ <- or -> or h or l | Change workspaces | ===== Git ===== See [[git]] for general notes. [[https://fle.github.io/git-tip-keep-your-branch-clean-with-fixup-and-autosquash.html|fixup and squash]] for appending fixes to commits you already made. * ''git commit --fixup '': automatically marks your commit as a fix of a previous commit * ''git rebase -i --autosquash'': automatically organize merging of these fixup commits and associated normal commits [[https://git-scm.com/docs/git-stash|stash]] for stashing your local changes away. You can ''push'' and ''pop'' stashes. ===== Vim ===== ==== Autocomplete ==== ^ Command ^ Notes ^ | ''c-p'', ''c-n'' | Autocomplete Previous or Next match, Also navigate completion menu. | | ''c-y'', ''c-e'' | Accept or cancel the autocompletion | | ''c-x,c-]'', ''c-x,c-o'' | Autocomplete from tags or from Omnicomplete. Close with ''c-w,c-z'' or '':pc'' | === Navigation === ^ Command ^ Notes ^ | ''c-e'' | Scroll down (text goes up) | | ''zz'' | Scroll current line to center. | | ''c-y'' | Scroll up (text goes down) | ^ Command ^ Notes ^ | ''%%[[%%'' | Go to previous "{" on first column. ('']]'' goes to next one.) | | ''[{'' | Go to enclosing "{" | | '']}'' | Go to enclosing "}" | | ''{'' | Go to previous blank line | | ''}'' | Go to next blank line | | ''[q'', '']q'' | Quickfix window navigation | | ''c-hjkl'' | quick Window navigation | | ''\o'' | Open window in new tab (for quick fullscreen) |