<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" version="2.0">
    <channel>
        
        <title>
            <![CDATA[ Vim - freeCodeCamp.org ]]>
        </title>
        <description>
            <![CDATA[ freeCodeCamp 是一个免费学习编程的开发者社区，涵盖 Python、HTML、CSS、React、Vue、BootStrap、JSON 教程等，还有活跃的技术论坛和丰富的社区活动，在你学习编程和找工作时为你提供建议和帮助。 ]]>
        </description>
        <link>https://www.freecodecamp.org/chinese/news/</link>
        <image>
            <url>https://cdn.freecodecamp.org/universal/favicons/favicon.png</url>
            <title>
                <![CDATA[ Vim - freeCodeCamp.org ]]>
            </title>
            <link>https://www.freecodecamp.org/chinese/news/</link>
        </image>
        <generator>Eleventy</generator>
        <lastBuildDate>Wed, 10 Jun 2026 20:41:07 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/chinese/news/tag/vim/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ Vim 编辑器模式 ]]>
                </title>
                <description>
                    <![CDATA[ 因为 Vim 专注于修改现有的代码，就像编写新的代码一样，所以它被分成几个模式，每个模式都有不同的目的。 正常模式 默认情况下，Vim 以“正常”模式启动。可以通过按 Esc  或 <C-[>  从其他模式进入正常模式。 在正常模式下，按键并不像人们所期望的那样工作。也就是说，它们不会在文档中插入文本；相反，某些按键可以： 移动光标  * h  向左移动一个字符  * j  向下移动一行  * k  向上移动一行  * l  向右移动一个字符 和许多 Vim 命令一样，行的移动可以用数字作前缀，以便一次移动几行：  * 4j  向下移动 4 行  * 6k  向上移动 6 ]]>
                </description>
                <link>https://www.freecodecamp.org/chinese/news/vim-editor-modes-explained/</link>
                <guid isPermaLink="false">63f6ea3b0687e3060be26792</guid>
                
                    <category>
                        <![CDATA[ Vim ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Miya Liu ]]>
                </dc:creator>
                <pubDate>Thu, 23 Feb 2023 04:57:43 +0000</pubDate>
                <media:content url="https://chinese.freecodecamp.org/news/content/images/2023/02/5f9c9ea2740569d1a4ca3e40.jpeg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>原文：</strong> <a href="https://www.freecodecamp.org/news/vim-editor-modes-explained/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">Vim Editor Modes Explained</a>
      </p><p>因为 Vim 专注于修改现有的代码，就像编写新的代码一样，所以它被分成几个模式，每个模式都有不同的目的。</p><h3 id="-">正常模式</h3><p>默认情况下，Vim 以“正常”模式启动。可以通过按 <code>Esc</code> 或 <code>&lt;C-[&gt;</code> 从其他模式进入正常模式。</p><p>在正常模式下，按键并不像人们所期望的那样工作。也就是说，它们不会在文档中插入文本；相反，某些按键可以：</p><h4 id="--1"><strong><strong><strong>移动光标</strong></strong></strong></h4><ul><li><strong><strong><strong><strong>h</strong></strong></strong></strong> 向左移动一个字符</li><li><strong><strong><strong><strong>j</strong></strong></strong></strong> 向下移动一行</li><li><strong><strong><strong><strong>k</strong></strong></strong></strong> 向上移动一行</li><li><strong><strong><strong><strong>l</strong></strong></strong></strong> 向右移动一个字符</li></ul><p>和许多 Vim 命令一样，行的移动可以用数字作前缀，以便一次移动几行：</p><ul><li><strong><strong><strong><strong>4j</strong></strong></strong> </strong>向下移动 4 行</li><li><strong><strong><strong><strong>6k</strong></strong></strong> </strong>向上移动 6 行</li></ul><p>基本的单词移动：</p><ul><li><strong>w</strong> 移动到下一个单词的开头</li><li><strong>b</strong> 移动到上一个单词的开头</li><li><strong>e</strong> 移动到词的末尾</li><li><strong>W</strong> 移动到空白处后的下一个单词的开头</li><li><strong>B</strong> 移动到空白处之前的单词开头</li><li><strong>E</strong> 移动到空白处之前的单词末尾</li></ul><p>行首/行尾移动：</p><ul><li><strong>0</strong> 移动到行首</li><li><strong>$</strong> 移动到行尾</li></ul><h4 id="--2"><strong><strong><strong>操作文本</strong></strong></strong></h4><h4 id="--3"><strong><strong><strong>进入另一个模式</strong></strong></strong></h4><p><strong>正常模式</strong>是人们在使用 Vim 时应该花费大部分时间的地方。记住，这就是 Vim 的与众不同之处。</p><p>在正常模式下，有多种方法可以在一个打开的文件中移动。除了使用光标键移动外，你还可以使用 <code>h</code>（左）、<code>j</code>（下）、<code>k</code>（上）和 <code>l</code>（右）来移动。这对那些不喜欢在修改时离开主行的触摸打字的人特别有帮助。</p><p>你也可以在正常模式下对单个字符进行修改。例如，要替换一个字符，把光标移到它上面，然后按 <code>r</code>，再按你想替换的那个字符。同样地，你可以通过将光标移到它上面并按下 <code>x</code> 来删除单个字符。</p><p>要进行撤销操作，在正常模式下按 <code>u</code>。这将撤销你在正常模式下上一次的修改。如果你想重做（即撤销你的撤销），在正常模式下按 <code>Ctrl+r</code>。</p><h3 id="--4"><strong><strong><strong>插入模式</strong></strong></strong></h3><p>这是第二种最常用的模式，对大多数人来说，这将是最熟悉的行为。一旦进入插入模式，打字就像普通文本编辑器一样插入字符。你可以通过使用正常模式中的插入命令来输入。</p><p>插入命令包括：</p><ul><li><code>i</code> 代表“插入”，这将立即把 Vim 切换到插入模式</li><li><code>a</code> 代表“附加”，它将光标移到当前字符之后并进入插入模式</li><li><code>o</code> 在当前行下插入一个新行，并在新行进入插入模式</li></ul><p>这些命令也有大写的类型：</p><ul><li><code>I</code> 将光标移到行首，进入插入模式</li><li><code>A</code> 将光标移到行尾并进入插入模式</li><li><code>O</code> 在当前行的上方插入一个新行，并在新行上进入插入模式</li></ul><p>在 Vim 中还有很多插入文本的方法，这里就不一一列举了，但这些是最简单的。另外，要注意在插入模式下停留的时间过长；Vim 的设计并不是要一直在插入模式下使用。</p><p>要离开插入模式，返回到正常模式，请按 <code>Esc</code> 或 <code>&lt;C-[&gt;</code>。</p><h3 id="--5"><strong><strong><strong>可视化模式</strong></strong></strong></h3><p>可视化模式是用来对文本进行选择的，类似于用鼠标点击和拖动的行为方式。选择文本可以使命令只适用于所选内容，如复制、删除、替换等。</p><p>要选择文本：</p><ul><li>按 <code>v</code> 键进入可视化模式，这也将标记一个起始选择点</li><li>将光标移到所需的结束选择点；Vim 将高亮选择的文本</li></ul><p>可视化模式也有以下几种变体：</p><ul><li><code>V</code> 进入可视化行模式，这将按行选择文本</li><li><code>&lt;C-V&gt;</code> 进入可视区块模式，这将按区块选择文本；移动光标将对文本进行矩形选择</li></ul><p>要离开可视化模式并返回到正常模式，请按 <code>Esc</code> 或 <code>&lt;C-[&gt;</code>。</p><p>可视化模式实际上有多个子类型：可视化模式、块模式和行模式。</p><ul><li>可视化：如上所述，按 <code>v</code> 键进入</li><li>块：选择任何矩形区域，按 <code>&lt;ctrl&gt;+v</code> 进入</li><li>行：总是选择整行，按 <code>&lt;shift&gt;+v</code> 进入</li></ul><h3 id="--6"><strong><strong><strong>命令模式</strong></strong></strong></h3><p>命令模式有各种各样的命令，可以做一些正常模式不容易做到的事情。要进入命令模式，在正常模式下输入 “:”，然后输入你的命令，该命令应出现在窗口的底部。例如，要进行全局查找和替换，输入 <code>:%s/foo/bar/g</code> 以用 “bar” 替换所有 “foo”。</p><ul><li><code>:</code> 进入命令模式</li><li><code>%</code> 表示跨所有行</li><li><code>s</code> 表示替换</li><li><code>/foo</code> 是查找要替换的内容的正则</li><li><code>/bar/</code> 是用来替换事物的正则</li><li><code>/g</code> 表示全局，否则它每行只执行一次</li></ul><p>Vim 还有一些其他的方法，你可以在帮助文档中读到，<code>:h</code> 或 <code>:help</code>。</p><h3 id="--7"><strong><strong><strong>替换模式</strong></strong></strong></h3><p>替换模式允许你通过直接在上面打字来替换现有文本。在进入这个模式之前，先进入正常模式，把你的光标放在你想替换的第一个字符的上面。然后按 “R”（大写 R）进入替换模式。现在无论你输入什么，都会替换现有的文字。光标会自动移动到下一个字符，就像在插入模式下一样。唯一的区别是，你输入的每一个字符都会替换现有的字符。</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Vim Windows 安装指南——如何在 PC 上 在 PowerShell 中运行 Vim 文本编辑器 ]]>
                </title>
                <description>
                    <![CDATA[ Vim 是一个强大的代码编辑器。它的功能如此强大，以至于 Linux 和 Mac 都默认安装了它。 但如果你使用 Windows 操作系统，你将需要额外安装 Vim。 幸运的是，微软让安装 Vim 和让它在你的 PC 上运行变得非常容易。 如何下载 Vim 你可以直接从 Vim 公司下载最新版本的 Vim 文本编辑器。 他们已经建立了一个特殊的自执行安装程序，引导你完成将 Vim 安装到你的硬盘上正确位置的过程。 如何安装 Vim 请注意，对于 Windows 来说，你将下载一个叫作 gVim 的东西，它是 Vim 的一个版本，包括一个基本的图形用户界面（GUI）。你可以通过下载这个可执行的安装程序来安装它。 当你试图打开该文件时，你会看到一个屏幕截图。因为这是一个 .exe 文件，Windows 会先征求你的同意。 一旦你下载了该文件，你只需要运行它，你会看到一个漂亮的安装向导，就像这样： 当你第一次运行 Vim 安装程序时，你会看到一个向导的屏幕截图他们有一个推荐的 “Typical（典型）”安装。但如果你有一个相当大的硬盘，选择 “Full（完整）”选项，安装所有的 ]]>
                </description>
                <link>https://www.freecodecamp.org/chinese/news/vim-windows-install-powershell/</link>
                <guid isPermaLink="false">63c553c842d274071ebbed8d</guid>
                
                    <category>
                        <![CDATA[ Vim ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Miya Liu ]]>
                </dc:creator>
                <pubDate>Fri, 13 Jan 2023 10:19:00 +0000</pubDate>
                <media:content url="https://chinese.freecodecamp.org/news/content/images/2023/01/5f9c9b34740569d1a4ca2a64.jpeg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>原文：</strong> <a href="https://www.freecodecamp.org/news/vim-windows-install-powershell/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">Vim Windows Install Guide – How to Run the Vim Text Editor in PowerShell on your PC</a>
      </p><p>Vim 是一个强大的代码编辑器。它的功能如此强大，以至于 Linux 和 Mac 都默认安装了它。</p><p>但如果你使用 Windows 操作系统，你将需要额外安装 Vim。</p><p>幸运的是，微软让安装 Vim 和让它在你的 PC 上运行变得非常容易。</p><h2 id="-vim">如何下载 Vim</h2><p>你可以直接从 Vim 公司下载最新版本的 Vim 文本编辑器。</p><p>他们已经建立了一个特殊的自执行安装程序，引导你完成将 Vim 安装到你的硬盘上正确位置的过程。</p><h2 id="-vim-1">如何安装 Vim</h2><p>请注意，对于 Windows 来说，你将下载一个叫作 gVim 的东西，它是 Vim 的一个版本，包括一个基本的图形用户界面（GUI）。你可以通过下载这个可执行的安装程序来安装它。</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2020/05/signal-attachment-2020-05-07-144326_005-1.png" class="kg-image" alt="signal-attachment-2020-05-07-144326_005-1" width="600" height="400" loading="lazy"><figcaption>当你试图打开该文件时，你会看到一个屏幕截图。因为这是一个 .exe 文件，Windows 会先征求你的同意。</figcaption></figure><p>一旦你下载了该文件，你只需要运行它，你会看到一个漂亮的安装向导，就像这样：</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2020/05/signal-attachment-2020-05-07-144326_004.png" class="kg-image" alt="signal-attachment-2020-05-07-144326_004" width="600" height="400" loading="lazy"><figcaption>当你第一次运行 Vim 安装程序时，你会看到一个向导的屏幕截图</figcaption></figure><p>他们有一个推荐的 “Typical（典型）”安装。但如果你有一个相当大的硬盘，选择 “Full（完整）”选项，安装所有的东西也没有什么坏处：</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2020/05/signal-attachment-2020-05-07-144326_003.png" class="kg-image" alt="signal-attachment-2020-05-07-144326_003" width="600" height="400" loading="lazy"><figcaption>Vim 安装程序的截图，你可以选择要安装 Vim 的哪些部分。</figcaption></figure><h2 id="-powershell-vim">如何在 PowerShell 中运行 Vim</h2><p>然后，一旦你安装了 Vim，你应该能够从你的 Windows 命令提示符启动它。</p><p>请注意，从 2020 年起，PowerShell 拥有与 CMD 相同的所有功能，而且还有更多。我建议使用 PowerShell 来处理所有事情。</p><p>你可以通过在开始栏的搜索栏中输入 “powerhell” 从 Windows 菜单栏中打开 PowerShell。</p><p>Windows 会打开 PowerShell，你会得到一个像这样的命令提示：</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2020/05/signal-attachment-2020-05-07-144326_001.png" class="kg-image" alt="signal-attachment-2020-05-07-144326_001" width="600" height="400" loading="lazy"><figcaption>Windows PowerShell 提示符的屏幕截图</figcaption></figure><p>一旦你进入了 PowerShell，要运行 Vim 本身，你所要做的就是输入 “vim” 并按回车键。这将打开 Vim。一旦 Vim 被打开，你应该看到的就是这个：</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2020/05/signal-attachment-2020-05-07-144326_002.png" class="kg-image" alt="signal-attachment-2020-05-07-144326_002" width="600" height="400" loading="lazy"><figcaption>第一次打开 Vim 时的屏幕截图</figcaption></figure><p>恭喜你——你现在已经安装了 Vim。</p><h2 id="-vs-code-vim">如何在 VS Code 中运行 Vim</h2><p>如果你已经在使用 VS Code，并且想获得 Vim 的很多速度而又不失 VS Code 的功能，我有个好消息。可以在 VS Code 中运行类似 Vim 的体验。</p><p>这里有一个 <a href="https://marketplace.visualstudio.com/items?itemName=vscodevim.vim">VS Code 的 Vim 插件</a>，可以帮助你做到这一点。在我写这篇文章的时候，这个插件已经被安装了近 200 万次。</p><h2 id="-vim-2">学习如何正确地使用 Vim</h2><p>Vim 是一个强大的代码编辑器，你需要大量的练习来适应它。</p><p>这里有一些 Vim 教程，确实可以帮助你快速掌握基础知识。</p><p>对于初学者来说，Vim 与其他代码编辑器的一个不同之处在于，Vim有“模式”。<a href="https://www.freecodecamp.org/chinese/news/vim-editor-modes-explained/">这里</a>解释了 Vim 的所有模式，并附有例子。</p><p>Vim 可能令人生畏。有很多东西需要学习。但本指南将告诉你<a href="https://www.freecodecamp.org/news/how-not-to-be-afraid-of-vim-anymore-ec0b7264b0ae/">如何不再惧怕 Vim</a>。</p><p>如果你已经在使用 VS Code 并想完全切换到 Vim，这篇文章将解释<a href="https://www.freecodecamp.org/news/vim-for-people-who-use-visual-studio-code/">如何做到这一点</a>。</p><p>这里是<a href="https://www.freecodecamp.org/news/7-vim-tips-that-changed-my-life/">改变 #100DaysOfCode 创始人 Alex Kallaway 的生活的 7 个 Vim 技巧</a>。在这篇文章中，他不仅解释了这些，还展示了这些技巧的操作演示。</p><h2 id="vim-"><strong>Vim：</strong>学习它，使用它，爱上它</h2><p>自 Bram Moolenaar 创建 Vim 以来的 30 年里，Vim 的影响已经传得很远很广。即使在今天，Vim 项目仍在积极维护并不断改进中。</p><p>这些年来，我遇到了许多坚定使用 Vim 的开发者。</p><p>我希望本指南能帮助你在 Windows 电脑上运行 Vim。我希望我在这里与你分享的这些其他教程能够帮助你在未来几个月内从零基础到熟练使用它。</p><p>关键是要不断练习，不要因为要记住这么多 Vim 的快捷键而感到气馁。最终，所有这些都会成为肌肉记忆，你会从一个文件跳到另一个文件，像个终结者一样敲出代码。</p><p>没有什么感觉能像能够进入一个代码库并立即开始修改而不需要用鼠标或触控板那样酷。这就是 Vim 所承诺并以大量方式实现的力量。</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ 如何退出 Vim——Vim 保存和退出命令教程 ]]>
                </title>
                <description>
                    <![CDATA[ 从我开始编程的第一年起，我就一直在使用 Vim。不管使用什么 IDE/编辑器，Vim 插件总是我安装的第一个插件。 我知道，对于不熟悉 Vim 的人来说，使用 Vim 可能是一种挑战。在这篇文章中，我们将介绍一些基本的话题，比如如何退出（exit） Vim，而不是放弃（quit） Vim。 我还将介绍你可以用来使用相应帮助文档的命令。要做到这一点，首先我们需要按几次 ESC 键，然后运行所提供的命令，例如，:h vim-modes，然后按  Enter。 概述——如何退出 Vim  1. 按一次 ESC 键（有时候是两次）  2. 确保你使用的是英文输入法  3. 下一步取决于当前的状态和你的期望：  * 如果你没有做任何改变，输入 :q，然后按 Enter/return  * 如果你做了一些改变，并希望保留它们，输入 :wq 并按 Enter/return  * 如果你做了一些修改，并希望放弃它们，请输入 :q! 并按 Enter/return 如果你想更详细地了解它是如何工作的，让我们深入了解一下。 什么是 Vim ]]>
                </description>
                <link>https://www.freecodecamp.org/chinese/news/how-to-exit-vim/</link>
                <guid isPermaLink="false">635cdd8173e419079177b63b</guid>
                
                    <category>
                        <![CDATA[ Vim ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Miya Liu ]]>
                </dc:creator>
                <pubDate>Mon, 24 Oct 2022 07:59:00 +0000</pubDate>
                <media:content url="https://chinese.freecodecamp.org/news/content/images/2022/10/exit-vim-image.jpeg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>原文：</strong> <a href="https://www.freecodecamp.org/news/how-to-exit-vim/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">How to Exit Vim – Vim Save and Quit Command Tutorial</a>
      </p><p>从我开始编程的第一年起，我就一直在使用 Vim。不管使用什么 IDE/编辑器，Vim 插件总是我安装的第一个插件。</p><p>我知道，对于不熟悉 Vim 的人来说，使用 Vim 可能是一种挑战。在这篇文章中，我们将介绍一些基本的话题，比如如何退出（exit） Vim，而不是放弃（quit） Vim。</p><p>我还将介绍你可以用来使用相应帮助文档的命令。要做到这一点，首先我们需要按几次 <code>ESC</code> 键，然后运行所提供的命令，例如，<code>:h vim-modes</code>，然后按 <code>Enter</code>。</p><h2 id="-vim"><strong>概述——如何退出 Vim</strong></h2><ol><li>按一次 ESC 键（有时候是两次）</li><li>确保你使用的是英文输入法</li><li>下一步取决于当前的状态和你的期望：</li></ol><ul><li>如果你没有做任何改变，输入 <code>:q</code>，然后按 Enter/return</li><li>如果你做了一些改变，并希望<strong>保留</strong>它们，输入 <code>:wq</code> 并按 Enter/return</li><li>如果你做了一些修改，并希望<strong>放弃</strong>它们，请输入 <code>:q!</code> 并按 Enter/return</li></ul><p>如果你想更详细地了解它是如何工作的，让我们深入了解一下。</p><h2 id="-vim-">什么是 Vim 中的模式？</h2><p>Vim 中有七种基础工作模式和另外七种被认为是基础模式的变种的模式。如果你想知道更多，你可以在 Vim 中运行 <code>:h vim-modes</code> 来阅读文档。</p><p>幸运的是，我们不需要知道所有这些模式就可以开始工作。但有三种模式是我们需要注意的：<code>普通模式</code>（<code>Normal Mode</code>）、<code>插入模式</code>（<code>Insert Mode</code>） 和 <code>命令行模式</code>（<code>Command-line Mode</code>）。</p><h3 id="-vim--1"><strong>什么是 Vim 中的普通模式？</strong></h3><p><code>普通模式</code> 是至关重要的，因为只有在 <code>普通模式</code> 下我们才能运行命令（也有例外，但这不在本文的讨论范围之内）。</p><p>比如，如果我们想阅读 <code>vim-modes</code> 的文档，那么我们必须首先确定我们是在 <code>普通模式</code> 下，然后再输入 <code>:h vim-modes</code>。而进入 <code>Normal Mode</code> 最经典的方式就是按 <code>ESC</code> 键。即使你已经进入了 <code>Normal Mode</code>，按 <code>ESC</code> 也会让你保持在 <code>Normal Mode</code>，所以不用担心。</p><p>这个命令在文档中是这样的：<code>:h Normal</code>, <code>:h mode-switching</code>。</p><h3 id="-vim--2"><strong>什么是 Vim 中的插入模式？</strong></h3><p>你使用 <code>插入模式</code> 来编辑当前文件（在 Vim 中，这通常被称为 <code>buffer</code>）。默认情况下，我们在打开一个文件后就处于 <code>Normal Mode</code>。如果我们需要对当前文件进行修改，首先我们需要切换到 <code>insert Mode</code>。</p><p>最常见的切换方式是在 <code>Normal Mode</code> 下，将光标导航到我们要编辑的地方后按 <code>i</code> 键。</p><p>其实也有很多其他的方法可以进入 <code>Insert Mode</code>，比如 <code>o</code>、<code>O</code>、<code>a</code>、<code>A</code>、<code>I</code> 等等。</p><p>这个命令在文档中是这样的：<code>:h Insert</code>, <code>:h i_&lt;Esc&gt;</code>, <code>:h o</code>, <code>:h O</code>, <code>:h a</code>, <code>:h A</code>, <code>:h I</code>。</p><h3 id="-vim--3"><strong>什么是 Vim 中的命令行模式？</strong></h3><p><code>命令行模式</code>通常是一种“短期”模式，你使用它来运行 “Ex 命令”（不要与<code>普通模式</code>中的“命令”混淆）。</p><p>有趣的事实：Vim 实际上是 <code>Vi Improved</code> 的缩写，它基于另一个名为 <code><a href="https://en.wikipedia.org/wiki/Vi">vi</a></code> 的文本编辑器。<code>vi</code> 基于一个名为 <code><a href="https://en.wikipedia.org/wiki/Ex_(text_editor)">ex</a></code> 的行编辑器。<code>vi</code> 和 <code>ex</code> 都是由 <a href="https://en.wikipedia.org/wiki/Bill_Joy">Bill Joy</a> 开发的。</p><p>对于 macOS 用户来说，另一个有趣的事实是：macOS 上只有 <code>Vim</code>，命令 <code>vi</code> 是 <code>Vim</code> 的符号链接（symlink）。需要注意的是，<code>命令行模式</code>下的 “Ex command” 与<code>普通模式</code>下的 “command” 是不同的。</p><p>你可以在<code>普通模式</code>下输入 <code>:</code> 进入<code>命令行模式</code>。例如，如果你运行上面的命令来查看文档，只要你输入 <code>:</code>，那么你实际上是在使用<code>命令行模式</code>。</p><p>同样，如果你想切换回<code>正常模式</code>，按 <code>ESC</code>。</p><p>这个命令在文档中是这样的：<code>:h Command-line</code>、<code>:h cmdline-lines</code>。</p><h2 id="-vim-1"><strong>如何退出 Vim</strong></h2><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2021/06/image-169.png" class="kg-image" alt="image-169" width="600" height="400" loading="lazy"><figcaption>documentation of <code style="box-sizing: inherit; margin: 0px; padding: 0px 5px 2px; border: 0px; font-style: inherit; font-variant: inherit; font-weight: 400 !important; font-stretch: inherit; line-height: 1em; font-family: &quot;Roboto Mono&quot;, monospace; font-size: 0.8em; vertical-align: baseline; background: var(--gray15);">:h quit</code></figcaption></figure><p>如果你查看一下 <code>:h quit</code> 的文档，会注意到 <code>quit</code> 的前缀是 <code>:</code>。这意味着 <code>quit</code> 是在<code>命令行模式</code>中使用的。</p><p>为了进入<code>命令行模式</code>，首先我们需要确保处于<code>普通模式</code>，然后只需输入 <code>:</code>。现在我们进入了<code>命令行模式</code>，只需输入 <code>quit</code> 并按 <code>Enter</code> 或 <code>return</code>。</p><p>你可能还会注意到 <code>:q</code>，它实际上是 <code>:quit</code> 命令的简写版本。也就是说，我们也可以通过执行 <code>:q</code> 来退出 Vim。</p><p>不过，它提到，“当做出更改且 Vim 拒绝放弃当前 buffer”时，该命令将失败（如果你还记得，buffer 只是打开的文件，没什么特别的）。</p><p>在这种情况下，我们需要使用 <code>:wq</code>，这意味着“写入并退出”。你可以在文档 <code>:h:wq</code> 下找到它。</p><p><code>:x</code> 是另一个与 <code>:wq</code> <strong>几乎相同</strong>的命令。根据 <code>:h:x</code>，它是“类似于 <code>:wq</code>，但只在做出更改时写入”。</p><p>这里的区别在于，无论你是否对其进行了更改，<code>:wq</code> 将保存文件。如果你没有做任何更改，<code>:x</code> 将不会保存文件。这里重要的是文件的修改时间，因为 <code>:wq</code> 会更新修改时间，而 <code>:x</code> 不会。</p><p>有些时候，我们宁愿不保留我们所做的更改。此时，我们需要 <code>:q!</code> 命令。<code>!</code> 通常被称为 “bang”，这使得 <code>q!</code> 就像是“强制退出”。</p><p>请注意，如果使用这种方式，你将丢失对该文件所做的所有更改，而且几乎没有办法恢复它们。</p><h2 id="-vim--4">如何解决退出 Vim 的问题</h2><h3 id="-">如果我不想进入命令行模式怎么办？</h3><p>没问题。在 <code>Normal Mode</code> 下，你也可以按 <code>ZZ</code> 或 <code>ZQ</code> 来退出 Vim。其中 <code>ZZ</code> 与 <code>:x</code> 相同，<code>ZQ</code> 与 <code>:q!</code> 相同。</p><p>在这里，<code>ZZ</code> 和 <code>ZQ</code> 被认为是 <code>Normal Mode</code> 的命令，而 <code>:x</code> 和 <code>:q!</code> 是 Ex 命令。</p><h3 id="-wq-">如果 :wq 失败了怎么办？</h3><p>这是可能的，因为当文件是只读的或者文件名丢失时，<code>:wq</code> 可能会失败。</p><p>请注意，当一个文件是只读的，Vim 不会阻止你打开和编辑该文件。你可能也会发现 <code>:wq!</code> 在那个时候也不能工作。你可能最终会放弃所有用 <code>:q!</code> 进行的修改，然后打开同一文件，以 <code>sudo</code> 为前缀，再做一次同样的修改。</p><p>你可以做的一件事是把这个文件保存在另一个你有写权限的目录下，比如 <code>~</code> 或者甚至是 <code>/tmp</code>，然后把它移回你没有写入权限的目录。</p><p>为了实现这一点，你可以运行 <code>:w ~/my-backup-file</code>，这将把该文件保存在 <code>~</code> 下</p><p>接下来，你可以使用 <code>mv</code> 命令移动这个文件。还要注意，当 Vim 抱怨文件名丢失时，你需要这样做。</p><p>Vim 内部还有另一个解决方案。你可以运行以下命令：<code>:w !sudo tee %</code>。<code>!sudo</code> 表示在 shell 环境中运行 sudo 命令。</p><p>例如，<code>:ls</code> 将列出 Vim 中的所有缓冲区，但是 <code>:!ls</code> 将从 shell 运行 <code>ls</code> 命令并显示结果。<code>tee</code> 从标准输入（又名 <code>stdin</code>）复制到标准输出（又名 <code>stdout</code>）。<code>%</code> 为当前文件名。</p><p>这意味着我们从 shell 环境中使用 <code>sudo</code> 命令，从 Vim 复制当前文件（注意：修改过的版本）的内容，并将修改过的内容重定向到文件（通过使用文件名引用）。</p><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2021/06/image-170.png" class="kg-image" alt="image-170" width="600" height="400" loading="lazy"><figcaption>文件内容更改警告</figcaption></figure><p>你会注意到上面的警告。发生此警告是因为在 shell 环境中更新了文件内容而没有引起 Vim 的注意。所以 Vim 认为这是一个外部变化，并让你知道发生了什么。</p><p>此时只需按 <code>Enter</code>，因为你是有意进行外部更改的。</p><p>你可能还会注意到，修改后的文件内容也显示在警告消息的上方。这是意料之中的，因为它来自标准输出 <code>stdout</code>。如果你不想看到它，你可以执行 <code>:w !sudo tee% &gt;/dev/null</code>，这将丢弃来自 <code>tee</code> 的 <code>stdout</code>。</p><h3 id="--1"><strong>如果我需要强制退出怎么办？</strong></h3><figure class="kg-card kg-image-card kg-width-wide"><img src="https://www.freecodecamp.org/news/content/images/2021/06/image-171.png" class="kg-image" alt="image-171" width="600" height="400" loading="lazy"></figure><p>如果我们尝试按 <code>control + c</code> 退出，Vim 会显示上述信息。但你仍然可以通过在 Windows 上按 <code>Ctrl + Alt + Delete</code> 或者在 macOS 上按 <code>Force Quit...</code> 来解决这个问题。</p><p>下一次，当你试图再次打开同一个文件时，你应该看到这个（这里我用一个名为 <code>foo.txt</code> 的文件作为例子）。</p><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2021/06/image-173.png" class="kg-image" alt="image-173" width="600" height="400" loading="lazy"><figcaption>swap file</figcaption></figure><p>不要惊慌——这是预料之中的事，因为 Vim 正试图帮助你恢复你可能丢失的宝贵修改。</p><p>通过检查该目录，你会发现一个扩展名为 <code>.swp</code> 的文件。这是一个 <code>swap</code> 文件（文档：<code>:h swap-file</code>）。</p><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2021/06/image-174.png" class="kg-image" alt="image-174" width="600" height="400" loading="lazy"><figcaption>swap file .swp</figcaption></figure><p>如果我们按 <code>R</code> 键恢复，我们将看到以下情况：</p><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2021/06/image-177.png" class="kg-image" alt="image-177" width="600" height="400" loading="lazy"><figcaption>.swp recover</figcaption></figure><p>按 <code>Enter</code> 键后，现在你会发现你之前所做的修改又回来了。在你完成恢复过程后，你可以简单地删除 <code>.swp</code> 文件，这样你就不会再看到上面的错误。</p><h2 id="--2">总结</h2><p>在这篇文章中，我们介绍了一些关于 Vim 模式的基本知识以及如何退出 Vim。我们还学习了如何解决退出 Vim 时的常见问题。</p><p>谢谢你阅读本文。谈到 Vim，还有很多东西需要学习。但如果你想了解更多，请随时探索 Vim 的帮助文档。</p> ]]>
                </content:encoded>
            </item>
        
    </channel>
</rss>
