<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Vim on HanGR的碎碎念</title><link>https://han-gr.github.io/tags/vim/</link><description>Recent content in Vim on HanGR的碎碎念</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><lastBuildDate>Mon, 21 Feb 2022 00:00:00 +0000</lastBuildDate><atom:link href="https://han-gr.github.io/tags/vim/index.xml" rel="self" type="application/rss+xml"/><item><title>Vim快捷键</title><link>https://han-gr.github.io/p/2022-02-21-vim%E5%BF%AB%E6%8D%B7%E9%94%AE/</link><pubDate>Mon, 21 Feb 2022 00:00:00 +0000</pubDate><guid>https://han-gr.github.io/p/2022-02-21-vim%E5%BF%AB%E6%8D%B7%E9%94%AE/</guid><description>&lt;img src="https://han-gr.github.io/" alt="Featured image of post Vim快捷键" /&gt;&lt;h2 id="全局"&gt;全局
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;:help keyword - 打开关键字帮助&lt;/li&gt;
&lt;li&gt;:saveas file - 另存为&lt;/li&gt;
&lt;li&gt;:close - 关闭当前窗口&lt;/li&gt;
&lt;li&gt;K - 打开光标所在单词的 man 手册页&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="光标"&gt;光标
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;h - 左移光标&lt;/li&gt;
&lt;li&gt;j - 下移光标&lt;/li&gt;
&lt;li&gt;k - 上移光标&lt;/li&gt;
&lt;li&gt;l - 右移光标&lt;/li&gt;
&lt;li&gt;H - 移动到当前页面顶部&lt;/li&gt;
&lt;li&gt;M - 移动到当前页面中间&lt;/li&gt;
&lt;li&gt;L - 移动到当前页面底部&lt;/li&gt;
&lt;li&gt;w - 移动到下个单词开头&lt;/li&gt;
&lt;li&gt;W - 移动到下个单词开头(单词含标点)&lt;/li&gt;
&lt;li&gt;e - 移动到下个单词结尾&lt;/li&gt;
&lt;li&gt;E - 移动到下个单词结尾(单词含标点)&lt;/li&gt;
&lt;li&gt;b - 移动到上个单词结尾&lt;/li&gt;
&lt;li&gt;B - 移动到上个单词结尾(单词含标点)&lt;/li&gt;
&lt;li&gt;% - 跳转到匹配的成对字符（默认支持 ()、{}、[]，更多见 :h matchpairs）&lt;/li&gt;
&lt;li&gt;0 - 移动到行首&lt;/li&gt;
&lt;li&gt;^ - 移动到行首的非空白符&lt;/li&gt;
&lt;li&gt;$ - 移动到行尾&lt;/li&gt;
&lt;li&gt;g_ - 移动到行内最后一个非空白符&lt;/li&gt;
&lt;li&gt;gg - 移动到文件第一行&lt;/li&gt;
&lt;li&gt;G - 移动到文件最后一行&lt;/li&gt;
&lt;li&gt;5G - 移动到第五行&lt;/li&gt;
&lt;li&gt;fx - 移动到字符 x 下次出现的位置&lt;/li&gt;
&lt;li&gt;tx - 移动到字符 x 下次出现的位置的前一个字符&lt;/li&gt;
&lt;li&gt;Fx - 跳转到字符 x 上一次出现的位置&lt;/li&gt;
&lt;li&gt;Tx - 跳转到字符 x 上一次出现位置的后一个字符&lt;/li&gt;
&lt;li&gt;; - 重复上一次 f/t/F/T 的查找跳转&lt;/li&gt;
&lt;li&gt;, - 反向重复上一次 f/t/F/T 的查找跳转&lt;/li&gt;
&lt;li&gt;} - 移动到下一个段落 (当编辑代码时则为函数／代码块)&lt;/li&gt;
&lt;li&gt;{ - 移动到上一个段落 (当编辑代码时则为函数／代码块)&lt;/li&gt;
&lt;li&gt;zz - 移动屏幕使光标居中&lt;/li&gt;
&lt;li&gt;Ctrl + e - 屏幕向下滚动一行（光标不动）&lt;/li&gt;
&lt;li&gt;Ctrl + y - 屏幕向上滚动一行（光标不动）&lt;/li&gt;
&lt;li&gt;Ctrl + b - 向后滚动一屏&lt;/li&gt;
&lt;li&gt;Ctrl + f - 向前滚动一屏&lt;/li&gt;
&lt;li&gt;Ctrl + d - 向前滚动半屏&lt;/li&gt;
&lt;li&gt;Ctrl + u - 向后滚动半屏&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Tip 命令前追加数字表示命令的重复次数, 比如 4j 表示向下移动四行&lt;/p&gt;
&lt;h2 id="插入模式---插入追加文本"&gt;插入模式 - 插入/追加文本
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;i - 从光标前开始插入字符&lt;/li&gt;
&lt;li&gt;I - 从行首开始插入字符&lt;/li&gt;
&lt;li&gt;a - 从光标后开始插入字符&lt;/li&gt;
&lt;li&gt;A - 从行尾开始插入字符&lt;/li&gt;
&lt;li&gt;o - 在当前行之下另起一行, 开始插入字符&lt;/li&gt;
&lt;li&gt;O - 在当前行之上另起一行, 开始插入字符&lt;/li&gt;
&lt;li&gt;ea - 从当前单词末尾开始插入&lt;/li&gt;
&lt;li&gt;Esc - 退出插入模式&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="编辑"&gt;编辑
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;r - 替换当前字符&lt;/li&gt;
&lt;li&gt;J - 将下一行合并到当前行&lt;/li&gt;
&lt;li&gt;gJ - 将下一行合并到当前行（中间不插入空格）&lt;/li&gt;
&lt;li&gt;gwip - 重新排版/自动换行当前段落&lt;/li&gt;
&lt;li&gt;cc - 清空当前行, 然后进入插入模式&lt;/li&gt;
&lt;li&gt;c$ - 从光标位置开始, 修改当前行&lt;/li&gt;
&lt;li&gt;ciw - 修改（替换）整个单词&lt;/li&gt;
&lt;li&gt;cw - 从光标位置开始, 修改单词&lt;/li&gt;
&lt;li&gt;s - 删除当前字符, 然后进入插入模式&lt;/li&gt;
&lt;li&gt;S - 清空当前行, 然后进入插入模式 (同cc)&lt;/li&gt;
&lt;li&gt;xp - 当前字符后移&lt;/li&gt;
&lt;li&gt;u - 撤销&lt;/li&gt;
&lt;li&gt;Ctrl + r - 重复&lt;/li&gt;
&lt;li&gt;. - 再次执行上个命令&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="选择文本可视化模式"&gt;选择文本（可视化模式）
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;v - 进入可视化模式, 移动光标高亮选择, 然后可以对选择的文本执行命令(比如y-复制)&lt;/li&gt;
&lt;li&gt;V - 进入可视化模式(行粒度选择)&lt;/li&gt;
&lt;li&gt;o - 切换光标到选择区开头/结尾&lt;/li&gt;
&lt;li&gt;Ctrl + v - 进入可视化模式(矩阵选择)&lt;/li&gt;
&lt;li&gt;O - 切换光标到选择区的角&lt;/li&gt;
&lt;li&gt;aw - 选择当前单词&lt;/li&gt;
&lt;li&gt;ab - 选择被 () 包裹的区域(含括号)&lt;/li&gt;
&lt;li&gt;aB - 选择被 {} 包裹的区域(含花括号)&lt;/li&gt;
&lt;li&gt;ib - 选择被 () 包裹的区域(不含括号)&lt;/li&gt;
&lt;li&gt;iB - 选择被 {} 包裹的区域(不含花括号)&lt;/li&gt;
&lt;li&gt;Esc - 退出可视化模式&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="可视化模式命令"&gt;可视化模式命令
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&amp;gt; - 向右缩进&lt;/li&gt;
&lt;li&gt;&amp;lt; - 向左缩进&lt;/li&gt;
&lt;li&gt;y - 复制&lt;/li&gt;
&lt;li&gt;d - 剪切&lt;/li&gt;
&lt;li&gt;~ - 大小写切换&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="寄存器"&gt;寄存器
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;:reg - 显示寄存器内容&lt;/li&gt;
&lt;li&gt;&amp;ldquo;xy - 复制内容到寄存器 x&lt;/li&gt;
&lt;li&gt;&amp;ldquo;xp - 粘贴寄存器 x 中的内容&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Tip 寄存器被存储在 ~/.viminfo 中, 在下次重启vim时仍会加载Tip 寄存器 0 存储上一次复制的值&lt;/p&gt;
&lt;h2 id="标记"&gt;标记
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;:marks - 标记列表&lt;/li&gt;
&lt;li&gt;ma - 设置当前位置为标记 a&lt;/li&gt;
&lt;li&gt;`a - 跳转到标记 a 的位置&lt;/li&gt;
&lt;li&gt;y`a - 复制当前位置到标记 a 的内容&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="宏"&gt;宏
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;qa - 录制宏 a&lt;/li&gt;
&lt;li&gt;q - 停止录制宏&lt;/li&gt;
&lt;li&gt;@a - 执行宏 a&lt;/li&gt;
&lt;li&gt;@@ - 重新执行上次执行的宏&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="剪切-复制-粘贴"&gt;剪切, 复制, 粘贴
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;yy - 复制当前行&lt;/li&gt;
&lt;li&gt;2yy - 复制 2 行&lt;/li&gt;
&lt;li&gt;yw - 复制当前单词&lt;/li&gt;
&lt;li&gt;y$ - 复制, 从光标位置到行末&lt;/li&gt;
&lt;li&gt;p - 在光标后粘贴&lt;/li&gt;
&lt;li&gt;P - 在光标前粘贴&lt;/li&gt;
&lt;li&gt;dd - 剪切当前行&lt;/li&gt;
&lt;li&gt;2dd - 剪切 2 行&lt;/li&gt;
&lt;li&gt;dw - 剪切当前单词&lt;/li&gt;
&lt;li&gt;D - 剪切, 从光标位置到行末&lt;/li&gt;
&lt;li&gt;d$ - 剪切, 从光标位置到行末 (同D)&lt;/li&gt;
&lt;li&gt;x - 剪切当前字符&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="退出"&gt;退出
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;:w - 保存&lt;/li&gt;
&lt;li&gt;:w !sudo tee % - 使用 sudo 保存当前文件&lt;/li&gt;
&lt;li&gt;:wq or :x or ZZ - 保存并退出&lt;/li&gt;
&lt;li&gt;:q - 退出(修改未保存时警告)&lt;/li&gt;
&lt;li&gt;:q! or ZQ - 不保存强制退出&lt;/li&gt;
&lt;li&gt;:wqa - 保存并退出所有标签页/窗口&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="查找替换"&gt;查找/替换
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;/pattern - 查找pattern&lt;/li&gt;
&lt;li&gt;?pattern - 向上查找pattern&lt;/li&gt;
&lt;li&gt;\vpattern - pattern 中的非字母数字字符被视为正则表达式特殊字符 (不需转义字符)&lt;/li&gt;
&lt;li&gt;n - 查找下一个&lt;/li&gt;
&lt;li&gt;N - 查找上一个&lt;/li&gt;
&lt;li&gt;:%s/old/new/g - 替换全部&lt;/li&gt;
&lt;li&gt;:%s/old/new/gc - (逐个)替换&lt;/li&gt;
&lt;li&gt;:noh - 移除搜索结果的高亮显示&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="多文件搜索"&gt;多文件搜索
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;:vimgrep /pattern/ {file} - 在多个文件中搜索 pattern
e.g. :vimgrep /foo/ **/*&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;:cn - 移动至下一个&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;:cp - 移动至上一个&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;:copen - 打开搜索结果列表&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="多文件"&gt;多文件
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;:e file - 新建缓冲区打开 filename&lt;/li&gt;
&lt;li&gt;:bnext or :bn - 切换到下个缓冲区&lt;/li&gt;
&lt;li&gt;:bprev or :bp - 切换到上个缓冲区&lt;/li&gt;
&lt;li&gt;:bd - 关闭缓冲区&lt;/li&gt;
&lt;li&gt;:ls - 列出所有打开的缓冲区&lt;/li&gt;
&lt;li&gt;:sp file - 新建缓冲区打开 filename 并水平分割窗口&lt;/li&gt;
&lt;li&gt;:vsp file - 新缓冲区打开 filename 并垂直分割窗口&lt;/li&gt;
&lt;li&gt;Ctrl + ws - 水平分割窗口&lt;/li&gt;
&lt;li&gt;Ctrl + ww - 在窗口间切换&lt;/li&gt;
&lt;li&gt;Ctrl + wq - 关闭窗口&lt;/li&gt;
&lt;li&gt;Ctrl + wv - 垂直分割窗口&lt;/li&gt;
&lt;li&gt;Ctrl + wh - 切换到右侧窗口&lt;/li&gt;
&lt;li&gt;Ctrl + wl - 切换到左侧窗口&lt;/li&gt;
&lt;li&gt;Ctrl + wj - 切换到下侧窗口&lt;/li&gt;
&lt;li&gt;Ctrl + wk - 切换到上侧窗口&lt;/li&gt;
&lt;/ul&gt;</description></item></channel></rss>