Vim 中的智能换行

2024-02-22

我一直想知道 Vim 是否有能力智能换行代码,以便它保持与缩进的行相同的缩进。我在其他一些文本编辑器(例如电子文本编辑器)上注意到了它,并发现它可以帮助我更轻松地理解我正在查看的内容。

例如而不是

<p>
    <a href="http://www.example.com">
        This is a bogus link, used to demonstrate
an example
    </a>
</p>

它会显示为

<p>
    <a href="somelink">
        This is a bogus link, used to demonstrate
        an example
    </a>
</p>

该功能已被2014年6月25日实施 http://article.gmane.org/gmane.editors.vim.devel/46204如补丁 7.4.338。随后有几个补丁完善了该功能,最后一个是 7.4.354,所以这就是您想要的版本。

:help breakindent
:help breakindentopt

下面摘录自 vim 帮助:

'breakindent'     'bri'   boolean (default off)
                          local to window
                          {not in Vi}
                          {not available when compiled without the |+linebreak|
                          feature}
        Every wrapped line will continue visually indented (same amount of
        space as the beginning of that line), thus preserving horizontal blocks
        of text.

'breakindentopt' 'briopt' string (default empty)
                          local to window
                          {not in Vi}
                          {not available when compiled without the |+linebreak|
                          feature}
        Settings for 'breakindent'. It can consist of the following optional
        items and must be seperated by a comma:
                  min:{n}     Minimum text width that will be kept after
                              applying 'breakindent', even if the resulting
                              text should normally be narrower. This prevents
                              text indented almost to the right window border
                              occupying lot of vertical space when broken.
                  shift:{n}   After applying 'breakindent', wrapped line
                              beginning will be shift by given number of
                              characters. It permits dynamic French paragraph
                              indentation (negative) or emphasizing the line
                              continuation (positive).
                  sbr         Display the 'showbreak' value before applying the 
                              additional indent.
        The default value for min is 20 and shift is 0.

与此相关的还有showbreak设置,这将以您指定的字符作为您的班次金额的后缀。

配置示例

" enable indentation
set breakindent

" ident by an additional 2 characters on wrapped lines, when line >= 40 characters, put 'showbreak' at start of line
set breakindentopt=shift:2,min:40,sbr

" append '>>' to indent
set showbreak=>>   

行为注意事项

如果您不指定sbr选项,任意showbreak附加到缩进的任何字符。去除sbr从上面的例子中会产生4个字符的有效缩进;通过该设置,如果您只想使用showbreak没有额外的缩进,指定shift:0.

您还可以给出负偏移,这将产生拖动的效果showbreak字符和换行文本放回到任何可用的缩进空间中。

当指定一个min值,如果终端宽度较窄,则移位量将被压缩,但是showbreak字符始终被保留。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Vim 中的智能换行 的相关文章

  • 移动相邻选项卡以进行拆分?

    有没有一种简单的方法可以将 Vim 中的相邻选项卡作为拆分移动到当前窗口 While looking around I reached a mailing list discussion where someone said it s th
  • Sublime Text 换行和提交消息

    我使用 Sublime Text 3 作为我的默认 Git 提交消息编辑器 我尝试遵循 Git 约定 对每行字符数进行严格限制 第一行 50 个 其余行 72 个 目前 我已经按照这些间隔设置了指南以供视觉参考 但是我希望 ST 自动为我插
  • 如何在 vim 中覆盖 ~/.vim 和 ~/.vimrc 路径(但不能覆盖其他路径)?

    假设我有一个所有 vim 配置的 tarball 通常在 vim 中的所有内容 插件 自动加载 颜色 所有这些东西 和一个 vimrc 文件 我将其提取到某个目录中 所以在我所在的目录 PWD 中 有一个 vim 文件夹和一个 vimrc
  • 如何让 vim 很好地对齐三元 ?: 运算符?

    我喜欢使用三元 运算符编写代码 如下所示 std string result input empty createNewItem processInput input 我如何配置vim 以便在输入后按回车键createNewItem 缩进下
  • vim 的 @@ 变量是什么?

    我知道通过输入 我执行最后一个 命令 但谁能解释一下什么 是在下面的代码中 在 vim 帮助文件中找到 function CountSpaces type let sel save selection let reg save if a 0
  • Vim 状态栏预测/完成?

    昨天我玩了一些 vim 脚本 并设法对我目前正在输入的内容进行一些超出状态栏的预测 通过循环 请参阅屏幕截图 灰色 黄色条 问题是 我不记得我是如何得到它或找到我用于 vim 魔法的代码片段 我记得它非常简单 它要么是文档中的示例 要么是我
  • Vim:领导不工作

    当尝试使用时vim latexsuite的映射 使用的是Leader不工作 nmap n
  • VIM:可用的快捷方式?

    我在 vim 中使用了许多快捷方式 其他快捷方式由插件使用 有时我想为新命令添加快捷方式 但事后请注意该快捷方式已被使用 有没有办法查看 VIM 中所有可用快捷键的列表 所有 ctrl shift alt 快捷键 Type help ind
  • gvim中的鼠标输入

    标准鼠标输入可以在 vim 中自定义吗 在我的例子中是 vim 插件也是可以接受的选择 我特别感兴趣的是 覆盖 双击某个单词 这样 gvim 就不仅仅是突出显示该单词 而是进行搜索 从而突出显示文件中该单词的所有实例 我在其他编辑器中看到过
  • 如何在 IdeaVIM 中配置 Vim 的 Ctrl + N 和 Ctrl + P 补全?

    在Vim中我们可以使用Ctrl N or Ctrl P完成代码补全 如何在 IdeaVim for IntelliJ 中配置它 Alt and Alt Shift 既可以在普通 IntelliJ 中工作 也可以在安装了 IdeaVim 的情
  • gVim 和 gVim easy 有什么区别?

    这个问题是不言自明的 但经过一个小时的搜索 我还没有找到任何资源可以解释其中的差异 在对两者进行了一些研究后 发现 gVim 和 gVim easy 是相同的 gVim Easy 启动并锁定在插入模式 您输入的每个字符都像简单的记事本一样打
  • git commit 保存 vim 文件时出错

    我正在遵循简单的 git 指南nettuts 简易 git 指南 http net tutsplus com tutorials other easy version control with git 我在我的中初始化了一个空的 git 实
  • PyGTK TreeView 中的自动换行

    如何在 PyGTK TreeView 中自动换行文本 gtk TreeView 中的文本是使用 gtk CellRendererText 渲染的 文本换行归结为在单元格渲染器上设置正确的属性 为了让文本换行 您需要设置wrap width单
  • Vim ":source %" 命令导致错误 (E499)

    Stack Overflow vim 用户大家好 我最近发现自己花了相当多的时间在学校的计算机科学实验室编写代码 我在无数的linux系统上配置过vim 从来没有遇到过这个错误 E499 Empty file name for or onl
  • 如何在 Vim 中创建带有控件和功能键的映射?

    我想要一个映射来快速退出所有缓冲区 以便在我对大量文件进行 vimdiff 时使用 事实证明 Control 和功能键在一起具有很好的安全性 这样我就不会不小心按下这个组合 无意中离开 Vim 我尝试了以下映射 map
  • Vim:设置 ctag 很困难。子目录中的源代码在项目根目录中看不到标签文件

    我今天试图在 Vim 上设置 丰富的 ctags 但很难让它正常工作 我在命令行上使用以下命令生成 ctags 文件 cd myproj ctags R 这会将标签文件放在 myproj 根目录中 然而 当我处理位于根目录中的源代码时 Vi
  • Windows 上 gnu make 的 libintl3 和 libiconv2 在哪里,需要在 MinGW 上用 ruby​​ 编译 vim

    我正在尝试为 Windows 运行 gnu make 但它无法运行 因为libint3 dll没找到 果然 http gnuwin32 sourceforge net packages make htm http gnuwin32 sour
  • 按文件类型设置 Vim 空白首选项

    在我的工作中 我需要遵循房屋风格进行缩进 如下所示 编码 html 和 ruby 时有 2 个空格 编码 javascript 时使用制表符 建议使用 tabwidth 4 为每个文件类型指定不同的空白首选项的最佳方法是什么 方法有很多 但
  • vim 脚本“input()”函数不需要用户按 Enter 键

    我想让用户调用我的函数 然后让该函数请求用户输入 但我不希望用户在输入 input 函数所需的字母后必须输入 enter 例如 用户应该能够键入 h j k l 等单字母命令 并且键入的每个字母都会在我的函数中循环 直到用户键入 x 退出
  • 如何在 NERDTree 中显示隐藏文件(以句点开头)?

    我怎样才能使NERDTree https github com scrooloose nerdtree显示以 a 开头的文件 时期 我有一个名为 hgignore在项目目录中 如果我使用 NERDTree 浏览到该目录 该文件不会显示在树中

随机推荐

  • React Native 中的旋转动画

    我需要用一个图像创建一个动画 该图像将围绕另一个图像旋转 我已经尝试使用类似问题的建议 例如围绕另一个圆制作一个圆的动画 https stackoverflow com questions 55667722 animate a circle
  • TFS 2017 是否能够将构建定义导出和导入到远程服务器中?

    我们在内部服务器上安装了 Team Foundation Server 2017 我们在沙箱环境中构建 NET 代码 但希望能够手动或远程推送新的构建定义或更新 到我们的客户端 生产服务器 自动化的方式 是的 您可以在 TFS 2017 中
  • 在不知道键的情况下解析 json

    我试图在不知道 json 格式的键和结构的情况下解析 java 中的 json 并将该数据保存到 hashmap 中 我如何循环遍历整个 json 格式并将键和值存储到 hashmap 中 id 12345 value 123 person
  • 原始“null”和 Java 8

    我知道处理的最佳实践null原语是使用盒装包装器 例如Integer代替int 正如这里所讨论的 原始数据类型为 Null https stackoverflow com questions 11047276 null for primit
  • dartlang 和 dartdap 库以及与活动目录的连接

    我一直在为 Dart 寻找一个好的 ldap 库来连接 Microsoft Active Directory 我找到了 dartdap 但我似乎无法让它工作 我 100 确信我的 CN 和密码是正确的 因为我可以使用 lpap 浏览器连接到
  • 剪切 HTML 标签并再次包装 HTML 标签第 1 部分 [重复]

    这个问题在这里已经有答案了 我尝试转换以下字符串 p string b bold em italic string em also bold b p 到这个字符串 p string p b bold b em italic string e
  • Parse 中的主要错误:[PFUser currentUser] 死锁

    Parse 社区已多次提出通过解析后台调用因线程争用而导致 PFUser 死锁的问题 但 Parse 选择不处理框架中的这个巨大错误 有谁知道这个问题的解决方法 关于此问题的其他明显报告 https developers facebook
  • 如何在android中将数据库文件附加到电子邮件中?

    您好 我正在尝试通过附加数据库发送电子邮件 我收到邮件 但没有附加以下是我的代码 谁能帮我 尝试 String host smtp gmail com String from email protected cdn cgi l email
  • 如何在 JavaFX 中的 TextField 中强制进行双输入?

    如何确保用户仅输入双精度值在给定的文本字段中 我找到了一个整数的解 https stackoverflow com questions 7555564 what is the recommended way to make a numeri
  • django 查询集中的两个或多个 __in 过滤器

    我有这个查询 query select from products where productnr supplier id in s product list 其中 Product list 如下所示 OB520 3 RH402 20 我如
  • 谷歌地图建筑风格

    有什么方法可以像 openlayer 那样在 google 地图中设置建筑物的样式吗 http workshops opengeo org openlayers intro vector style html http workshops
  • 无法使用传入消息调用侦听器方法,并且 ConsumerRecord 的 Backoff 未耗尽

    下面是我的 kafka 侦听器的方法定义 如果有效负载接收到 null 或空字符串 我想我会遇到以下错误 您能帮忙吗 KafkaListener topics kafka consumer topic name reservation gr
  • URL 重写包括尾部斜杠(如果不存在)

    我有这个RewriteRule上班 RewriteBase my path RewriteCond REQUEST FILENAME f RewriteCond REQUEST FILENAME d RewriteRule my path
  • 可以将 NSManagedObject 移动到另一个 NSManagedContext 吗?

    我有两个 NSManagedContext 一个父级和一个子级 用于并发 指定如下 self managedObjectContext NSManagedObjectContext alloc initWithConcurrencyType
  • Schema.org 开放时间

    我正在尝试为 openinghours 创建 schema org 定义 该定义在 Google 的丰富摘要测试工具中进行验证 通过此标记 我想定义商店每周一的营业时间为 11 00 22 00
  • AngularJS:非标准属性上的 ng-src 行为?

    我正在使用 在我的应用程序中集成媒体播放器适合所有人的视频 http v4e thewikies com 生成器 如果浏览器不支持 HTML5 播放器会回退到 Flashvideo and audio我必须建立一个object元素与para
  • 计算xml文件中元素的数量

    首先我参考了这篇文章如何获取 XML 或 XElement 变量中的特定元素计数 https stackoverflow com questions 8764510 how to get specific element count in
  • 选择框内的 HTML

    我想知道是否可以将一个项目分成选择框中的两行 我的选择框的值之一是两个长以适合我的 div 不 这是不可能的 您可以考虑使用 javascript 小部件 例如this http sharebrain info brainpicks scr
  • 关闭mysql不安全语句警告

    我正在使用日志错误将警告 错误写入文件 当我执行 INSERT IGNORE SELECT 语句时 它只是继续写入此警告消息 120905 3 01 23 Warning Unsafe statement written to the bi
  • Vim 中的智能换行

    我一直想知道 Vim 是否有能力智能换行代码 以便它保持与缩进的行相同的缩进 我在其他一些文本编辑器 例如电子文本编辑器 上注意到了它 并发现它可以帮助我更轻松地理解我正在查看的内容 例如而不是 p a href http www exam