433 lines
14 KiB
HTML
433 lines
14 KiB
HTML
<!doctype html>
|
|
<html>
|
|
<head>
|
|
<meta charset="utf-8" />
|
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
<link
|
|
rel="stylesheet"
|
|
href="https://cdnjs.cloudflare.com/ajax/libs/github-markdown-css/5.6.1/github-markdown.min.css"
|
|
/>
|
|
<title>haunt98 posts</title>
|
|
</head>
|
|
<style>
|
|
.markdown-body {
|
|
box-sizing: border-box;
|
|
min-width: 200px;
|
|
max-width: 980px;
|
|
margin: 0 auto;
|
|
padding: 45px;
|
|
font-family:
|
|
Shantell Sans Normal,
|
|
Rec Mono Casual,
|
|
SF Pro,
|
|
Inter,
|
|
sans-serif;
|
|
font-weight: 500;
|
|
}
|
|
|
|
.markdown-body pre {
|
|
font-family:
|
|
Berkeley Mono,
|
|
IBM Plex Mono,
|
|
SF Mono,
|
|
Jetbrains Mono,
|
|
monospace;
|
|
}
|
|
|
|
@media (max-width: 767px) {
|
|
.markdown-body {
|
|
padding: 15px;
|
|
}
|
|
}
|
|
</style>
|
|
<body class="markdown-body">
|
|
<h2>
|
|
<a href="index.html"><code>~</code></a>
|
|
</h2>
|
|
<div class="markdown-heading">
|
|
<h1 class="heading-element">My neovim workflow</h1>
|
|
<a
|
|
id="user-content-my-neovim-workflow"
|
|
class="anchor"
|
|
aria-label="Permalink: My neovim workflow"
|
|
href="#my-neovim-workflow"
|
|
><span aria-hidden="true" class="octicon octicon-link"></span
|
|
></a>
|
|
</div>
|
|
<p>
|
|
<a
|
|
target="_blank"
|
|
rel="noopener noreferrer nofollow"
|
|
href="https://raw.githubusercontent.com/haunt98/posts-images/main/nvim-000.jxl"
|
|
><img
|
|
src="https://raw.githubusercontent.com/haunt98/posts-images/main/nvim-000.jxl"
|
|
alt="nvim-000"
|
|
style="max-width: 100%"
|
|
/></a>
|
|
</p>
|
|
<p>
|
|
All configs are in
|
|
<a href="https://github.com/haunt98/dotfiles">my dotfiles</a>.
|
|
</p>
|
|
<div class="markdown-heading">
|
|
<h2 class="heading-element">Trick or treat</h2>
|
|
<a
|
|
id="user-content-trick-or-treat"
|
|
class="anchor"
|
|
aria-label="Permalink: Trick or treat"
|
|
href="#trick-or-treat"
|
|
><span aria-hidden="true" class="octicon octicon-link"></span
|
|
></a>
|
|
</div>
|
|
<p>Search current word: <code>*</code></p>
|
|
<p>Search multiple words:</p>
|
|
<div class="highlight highlight-source-viml">
|
|
<pre>:/<span class="pl-cce">\v</span>word1|word2|word3</pre>
|
|
</div>
|
|
<p>Replace word:</p>
|
|
<div class="highlight highlight-source-viml">
|
|
<pre>:<span class="pl-k">%</span><span class="pl-c1">s</span><span class="pl-sr">/word1/</span>word2/<span class="pl-c1">g</span></pre>
|
|
</div>
|
|
<p>Delete all lines contain word:</p>
|
|
<div class="highlight highlight-source-viml">
|
|
<pre>:<span class="pl-c1">g</span><span class="pl-sr">/word/</span><span class="pl-c1">d</span></pre>
|
|
</div>
|
|
<p>Delete all lines <strong>not</strong> contain word:</p>
|
|
<div class="highlight highlight-source-viml">
|
|
<pre>:<span class="pl-c1">g</span><span class="pl-k">!</span><span class="pl-sr">/word/</span><span class="pl-c1">d</span>
|
|
|
|
:<span class="pl-c1">v</span><span class="pl-sr">/word/</span><span class="pl-c1">d</span></pre>
|
|
</div>
|
|
<p>Play macro <code>a</code> (after selecting lines):</p>
|
|
<div class="highlight highlight-source-viml">
|
|
<pre>:norm<span class="pl-k">!</span> <span class="pl-smi">@a</span></pre>
|
|
</div>
|
|
<p>Sort lines (after selecting lines):</p>
|
|
<div class="highlight highlight-source-viml">
|
|
<pre>:<span class="pl-c1">sort</span> <span class="pl-k">-</span><span class="pl-c1">u</span></pre>
|
|
</div>
|
|
<p>Reverse lines (after selcting lines):</p>
|
|
<div class="highlight highlight-source-viml">
|
|
<pre>:<span class="pl-k">!</span>tail <span class="pl-k">-</span><span class="pl-c1">r</span></pre>
|
|
</div>
|
|
<p>Column-ize lines:</p>
|
|
<div class="highlight highlight-source-viml">
|
|
<pre>:<span class="pl-k">!</span>column <span class="pl-k">-</span><span class="pl-c1">t</span></pre>
|
|
</div>
|
|
<div class="markdown-heading">
|
|
<h2 class="heading-element">Jumpo</h2>
|
|
<a
|
|
id="user-content-jumpo"
|
|
class="anchor"
|
|
aria-label="Permalink: Jumpo"
|
|
href="#jumpo"
|
|
><span aria-hidden="true" class="octicon octicon-link"></span
|
|
></a>
|
|
</div>
|
|
<p>Basic:</p>
|
|
<ul>
|
|
<li><code>gg</code>: first line</li>
|
|
<li><code>G</code>: last line</li>
|
|
<li><code>0</code>: first character of line</li>
|
|
<li><code>$</code>: last character of line</li>
|
|
<li><code>w</code>, <code>b</code>: word forward/backward</li>
|
|
<li><code>e</code>, <code>ge</code>: end of word current/before</li>
|
|
<li>
|
|
<code>W</code>, <code>B</code>: WORD (word with special char)
|
|
forward/backward
|
|
</li>
|
|
<li><code>E</code>, <code>gE</code>: end of WORD current/before</li>
|
|
<li>
|
|
<code>f{char}</code>, <code>F{char}</code>: find forward/backward
|
|
character
|
|
</li>
|
|
<li>
|
|
<code>%</code>: jump between matching pair of <code>()</code>,
|
|
<code>[]</code>, <code>{}</code>
|
|
</li>
|
|
</ul>
|
|
<p>Advance:</p>
|
|
<ul>
|
|
<li>
|
|
<code>CTRL-O</code>, <code>CTRL-I</code>: cursor position
|
|
backward/forward
|
|
</li>
|
|
<li><code>{</code>, <code>}</code>: paragraph backward/forward</li>
|
|
<li><code>H</code>: top of screen</li>
|
|
<li><code>M</code>: middle of screen</li>
|
|
<li><code>L</code>: bottom of screen</li>
|
|
<li>
|
|
<code>CTRL-]</code>, <code>CTRL-T</code>: jump to tag/jump back from tag
|
|
<ul>
|
|
<li>
|
|
Support jump to Go definition with
|
|
<a href="https://github.com/fatih/vim-go">fatih/vim-go</a>.
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
<div class="markdown-heading">
|
|
<h2 class="heading-element">Keymap</h2>
|
|
<a
|
|
id="user-content-keymap"
|
|
class="anchor"
|
|
aria-label="Permalink: Keymap"
|
|
href="#keymap"
|
|
><span aria-hidden="true" class="octicon octicon-link"></span
|
|
></a>
|
|
</div>
|
|
<p>Use both <code>\</code> and <code>;</code> as leader key:</p>
|
|
<div class="highlight highlight-source-lua">
|
|
<pre><span class="pl-smi">vim</span>.<span class="pl-e">keymap</span>.<span class="pl-c1">set</span>(<span class="pl-s"><span class="pl-pds">"</span>n<span class="pl-pds">"</span></span>, <span class="pl-s"><span class="pl-pds">"</span>;<span class="pl-pds">"</span></span>, <span class="pl-s"><span class="pl-pds">"</span><Leader><span class="pl-pds">"</span></span>, { <span class="pl-smi">remap</span> <span class="pl-k">=</span> <span class="pl-c1">true</span> })
|
|
<span class="pl-smi">vim</span>.<span class="pl-e">keymap</span>.<span class="pl-c1">set</span>(<span class="pl-s"><span class="pl-pds">"</span>n<span class="pl-pds">"</span></span>, <span class="pl-s"><span class="pl-pds">"</span>'<span class="pl-pds">"</span></span>, <span class="pl-s"><span class="pl-pds">"</span><Leader><span class="pl-pds">"</span></span>, { <span class="pl-smi">remap</span> <span class="pl-k">=</span> <span class="pl-c1">true</span> })</pre>
|
|
</div>
|
|
<p>Ground rules:</p>
|
|
<ul>
|
|
<li>
|
|
<p><code><Leader></code> prefix: prefer global keymap</p>
|
|
</li>
|
|
<li>
|
|
<p>
|
|
<code><Space></code> prefix: prefer lsp keymap, for coding of
|
|
course :D
|
|
</p>
|
|
</li>
|
|
<li>
|
|
<p>Native neovim:</p>
|
|
<ul>
|
|
<li><code>gcc</code>: comment/uncomment current line</li>
|
|
<li><code>gc</code>: comment/uncomment selected lines</li>
|
|
<li><code>gx</code>: open file/url under cursor</li>
|
|
<li><code>Q</code>, <code>@</code>: execute last macro</li>
|
|
<li><code>]d</code>, <code>[d</code>: next/previous diagnostic</li>
|
|
<li><code>K</code>: hover</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p>Black hole register:</p>
|
|
<ul>
|
|
<li><code><Leader>d</code>: <code>d</code> without yank</li>
|
|
<li><code><Leader>c</code>: <code>c</code> without yank</li>
|
|
<li><code><Leader>x</code>: <code>x</code> without yank</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p>
|
|
With
|
|
<a href="https://github.com/ibhagwan/fzf-lua">ibhagwan/fzf-lua</a>:
|
|
</p>
|
|
<ul>
|
|
<li><code><Leader>f</code>: find files</li>
|
|
<li><code><Leader>l</code>: find lines</li>
|
|
<li><code><Leader>rg</code>: grep files</li>
|
|
<li><code><Leader>g</code>: git status</li>
|
|
<li>
|
|
With
|
|
<a href="https://github.com/neovim/nvim-lspconfig"
|
|
>neovim/nvim-lspconfig</a
|
|
>
|
|
helps:
|
|
<ul>
|
|
<li><code><Space>s</code>: list lsp symbols</li>
|
|
<li>
|
|
<code><Space>r</code>, <code>gr</code>: list references
|
|
</li>
|
|
<li>
|
|
<code><Space>i</code>, <code>gi</code>: list
|
|
implementation
|
|
</li>
|
|
<li><code><Space>ca</code>: list code action</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p>
|
|
With
|
|
<a href="https://github.com/hrsh7th/nvim-cmp">hrsh7th/nvim-cmp</a>:
|
|
</p>
|
|
<ul>
|
|
<li><code><C-Space></code>: trigger completion</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p>
|
|
With
|
|
<a href="https://github.com/nvim-tree/nvim-tree.lua"
|
|
>nvim-tree/nvim-tree.lua</a
|
|
>, inside nvim-tree:
|
|
</p>
|
|
<ul>
|
|
<li><code><C-n></code>: toggle</li>
|
|
<li><code><Leader>n</code>: locate file</li>
|
|
<li><code>a</code>: create</li>
|
|
<li><code>d</code>: delete</li>
|
|
<li><code>r</code>: rename</li>
|
|
<li><code>x</code>: cut</li>
|
|
<li><code>c</code>: copy</li>
|
|
<li><code>p</code>: paste</li>
|
|
<li><code>U</code>: toggle hidden</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p>
|
|
With
|
|
<a href="https://github.com/tpope/vim-projectionist"
|
|
>tpope/vim-projectionist</a
|
|
>
|
|
</p>
|
|
<ul>
|
|
<li><code>:A</code>: open alternate file</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p>
|
|
With
|
|
<a href="https://github.com/echasnovski/mini.nvim"
|
|
>echasnovski/mini.nvim</a
|
|
>
|
|
</p>
|
|
<ul>
|
|
<li>With mini-git</li>
|
|
<li>
|
|
<code>]C</code>, <code>[C</code>, <code>]c</code>, <code>[c</code>:
|
|
next/previous git change
|
|
</li>
|
|
<li>
|
|
With mini-surround
|
|
<ul>
|
|
<li><code>sa</code>: add surround</li>
|
|
<li><code>sd</code>: delete surround</li>
|
|
<li><code>sr</code>: replace surround</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p>
|
|
With
|
|
<a href="https://github.com/stevearc/conform.nvim"
|
|
>stevearc/conform.nvim</a
|
|
>:
|
|
</p>
|
|
<ul>
|
|
<li><code><Space>f</code>: format code</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p>
|
|
With
|
|
<a href="https://github.com/neovim/nvim-lspconfig"
|
|
>neovim/nvim-lspconfig</a
|
|
>:
|
|
</p>
|
|
<ul>
|
|
<li><code><Space>e</code>: current diagnostic</li>
|
|
<li><code><Space>lr</code>: restart lsp server</li>
|
|
<li><code>gd</code>: go to definition</li>
|
|
<li><code><Space>k</code>, <code>gk</code>: hover</li>
|
|
<li><code><F2></code>: rename</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
<p>
|
|
With
|
|
<a href="https://github.com/github/copilot.vim">github/copilot.vim</a
|
|
>:
|
|
</p>
|
|
<ul>
|
|
<li>
|
|
<code><M-Right></code>: completion, replace <code>Tab</code>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
<div class="markdown-heading">
|
|
<h2 class="heading-element">References / Thanks</h2>
|
|
<a
|
|
id="user-content-references--thanks"
|
|
class="anchor"
|
|
aria-label="Permalink: References / Thanks"
|
|
href="#references--thanks"
|
|
><span aria-hidden="true" class="octicon octicon-link"></span
|
|
></a>
|
|
</div>
|
|
<ul>
|
|
<li>
|
|
vim docs:
|
|
<ul>
|
|
<li>
|
|
<a href="https://moolenaar.net/habits_2007.pdf" rel="nofollow"
|
|
>Seven habits of effective text editing 2.0</a
|
|
>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
neovim official docs:
|
|
<ul>
|
|
<li>
|
|
<a href="https://neovim.io/doc/user/motion.html" rel="nofollow"
|
|
>neovim Motion</a
|
|
>
|
|
</li>
|
|
<li>
|
|
<a href="http://neovim.io/doc/user/tagsrch.html" rel="nofollow"
|
|
>neovim Tagsrch</a
|
|
>
|
|
</li>
|
|
<li>
|
|
<a href="https://neovim.io/doc/user/lua-guide.html" rel="nofollow"
|
|
>neovim Lua-guide</a
|
|
>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
<li>
|
|
Hidden gem:
|
|
<ul>
|
|
<li>
|
|
<a
|
|
href="https://bluz71.github.io/2021/09/10/vim-tips-revisited.html"
|
|
rel="nofollow"
|
|
>Vim Tips (Revisited)</a
|
|
>
|
|
</li>
|
|
<li>
|
|
<a href="https://superuser.com/a/189956" rel="nofollow"
|
|
>How do I reverse selected lines order in Vim?</a
|
|
>
|
|
</li>
|
|
<li>
|
|
<a
|
|
href="https://www.redhat.com/sysadmin/use-vim-macros"
|
|
rel="nofollow"
|
|
>Use Vim macros to automate frequent tasks</a
|
|
>
|
|
</li>
|
|
<li>
|
|
<a
|
|
href="https://dev.to/m4xshen/3-vim-commands-for-blazingly-fast-navigation-between-brackets-55kc"
|
|
rel="nofollow"
|
|
>3 Vim commands for blazingly fast navigation between brackets
|
|
⚡</a
|
|
>
|
|
</li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
|
|
<div>
|
|
Feel free to ask me via
|
|
<a href="mailto:hauvipapro+posts@gmail.com">email</a> or
|
|
<a rel="me" href="https://hachyderm.io/@haunguyen">Mastodon</a>.
|
|
<br />Source code is available on
|
|
<a href="https://github.com/haunt98/posts-go">GitHub</a>
|
|
<a href="https://codeberg.org/yoshie/posts-go">Codeberg</a>
|
|
<a href="https://git.sr.ht/~youngyoshie/posts-go">sourcehut</a>
|
|
<a href="https://gitea.treehouse.systems/yoshie/posts-go">Treehouse</a>
|
|
<a href="https://gitlab.com/youngyoshie/posts-go">GitLab</a>
|
|
</div>
|
|
</body>
|
|
</html>
|