自动缩进:smartindent 和 indentexpr

2024-04-06

当我编辑 Python 文件时,例如:

def my_func():
    print('Something')
    <-- CURSOR IS HERE

我想通过输入添加评论#,该行会自动重新缩进到该行的开头:

def my_func():
    print('Something')
#<-- CURSOR IS HERE

我发现这是一个效果smartindent选项,所以要修复它,我只需运行:set nosi(或者在我的 .vimrc 中禁用它)。

但在 Vim 的帮助下,:h 'smartindent',您可以阅读以下内容:

当 'cindent' 打开或设置 'indentexpr' 时,设置 'si' 无效。

But my indentexpr选项设置为以下内容:

:set indentexpr?
indentexpr=GetPythonIndent(v:lnum)

我当然应该避免使用smartindent根本没有选项,因为它看起来是一个旧功能,并且设计为仅适用于 C 风格语言;

但我想知道为什么smartindent考虑到帮助中写的内容,当我编辑 python 文件时确实有一些效果吗?


是的,它的行为确实与您解释的方式相同。

就我而言:echo GetPythonIndent(v:lnum)回报-1

:h indentexpr有以下文字解释该行为。

 The expression must return the number of spaces worth of indent. It
 can return "-1" to keep the current indent (this means 'autoindent' is
 used for the indent).

正如我们设定的si,它接管ai.

Now :h si建议解决方法:

:inoremap # X^H#

where ^H is entered as Ctrl + V Ctrl + H

我相信您会得到比所提供的解决方案更好的解决方案

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

自动缩进:smartindent 和 indentexpr 的相关文章

  • 如何让 git 在 vi​​m 中显示更改,就像 hg 使用 hgeditor 脚本那样?

    Mercurial 的一个有趣的功能是能够查看将在 vim split 中提交的更改 请参阅VIM 中的 DiffsInCommitMessage https www mercurial scm org wiki DiffsInCommit
  • 使用新文件名保存文件:附加到现有文件名

    有没有一种简单的方法 在 VIM 中 使用当前名称加上附加短语保存当前打开的文件 即 来自 home affert type vim data folder file1 txt 然后将文件另存为 data folder file1 txt
  • Vim:用字符填充行

    如何在一行或多行末尾重复添加字符 将行填充到特定列 例如 x 代表第 40 列 不是该行上的字符 并且文本后没有空格或制表符 line one x line two x line three x line eleventy billion
  • 如何在vim中每隔几行添加一行

    我想使用 vim 编辑器在文件 大约 1000 行 中每 3 行添加一行 有人可以帮我吗 谢谢 艾丽莎 有一个 vim 特定的正则表达式可以做到这一点 s n n n 0 r g s 是 vim ex 命令来替换整个文件 n 是包含行尾的一
  • 使用 Webpack 波形符别名时通过 Vim 中的“gf”解析 JavaScript 模块

    我是使用波浪号的 Vue js 项目的新成员 模块导入中的符号 如 import WhateverApi from api whatever 项目存储库包含所有类型的文件 Vagrant 机器 Laravel 后端应用程序 配置文件和 Vu
  • Vim NerdCommenter:在 vimrc 中添加新文件类型

    有没有办法在 vimrc 中为 NerdCommenter 定义新的文件类型注释 它已经可以工作了 但是如果我可以将其直接放入 vimrc 中 备份配置会更容易 Thanks NERDCommenter 能够解析commentstring选
  • 如何在会话自动加载的同时在 vim 中打开文件?

    我在 vimrc 中有以下代码 可以在 vim 启动时自动保存 加载会话 Session saving Automatically save rewrite the session when leaving Vim augroup leav
  • 有没有办法用 Vim 自动重新格式化大括号?

    我想重新格式化一些代码 如下所示 if cond foo to if cond foo 由于这是C代码 所以我一直在看cindent cinoptions与使用 但它似乎不处理多行规则 我一直在看formatoptions与使用gq 而且似
  • Vim langmap 中断插件 (bépo)

    我正在使用 b po 键盘映射 http bepo fr http bepo fr 并寻求完美的 vim 映射 So far I used a long list of noremap http bepo fr wiki Vim B C3
  • Vimscript 检查当前缓冲区是否有未保存的更改

    我目前已设置状态行 使其在插入模式下为橙色 否则为白色 如果文件有任何未保存的更改 我想让它在我回到正常模式时变成另一种颜色 因为我经常在兔子洞里走一会儿 想知道为什么我的更改没有生效 小 还不够打我的脸 我找不到任何以 buf 开头且看起
  • 以 Vim 的 -o - 模式打开 Grep 输出中的文件

    如何将文件列表放入 Vim 的 o 模式 我有一个文件列表作为 Grep 的输出 我运行失败 1 grep il sid vim o 2 grep il sid xargs vim o 3 grep il sid xargs vim 4 v
  • 带有 Viper 和 Vimpulse 的 Emacs 缺少哪些 Vim 功能?

    Emacs 的一些重要功能在 Vim 中是缺失的 例如 comint 模式 并且没有脚本 插件可以替代它们 与 Emacs 相比 Vim 也有一些优点 例如模式编辑和通常更好的默认快捷键 然而 Viper 模式让我两者兼而有之 Vimpul
  • 禁用 VIM 中的警告?

    有没有办法禁用 VIM 中的警告 特别是 当文件从只读变为可写时 我想禁用警告 12 我有一个脚本可以打开文件进行编辑 但 vim 认为文件已更改并发出警告 Thanks 我的 vimrc 中有以下内容 你应该只需要第二个 它将消息回显到状
  • Vim errorformat:在消息字符串中包含部分表达式

    使用vim的errorformat语法 有没有办法使用部分消息来过滤结果 例如 除了错误本身之外 某些链接器错误没有任何明确的内容将它们区分为线路上的错误 path to foo cpp 42 undefined reference to
  • :set 选项的显示值

    如果你不给 colorscheme一个参数 然后它显示 vim 当前使用的颜色方案的名称 vim 中是否有类似的方法来显示是否设置了选项或如果选项的值不是布尔值则设置为什么 例如 如果我想知道是否autoindent已设置或者我想知道的值t
  • Vim 脚本中的“reduce”函数

    Vim 脚本有一些非常基本的函数式编程工具 It has map and filter 但据我所知它缺乏reduce 功能 Reduce https en wikipedia org wiki Fold 28higher order fun
  • 在Vim函数中获取不带文件扩展名的文件名

    我想在Vim中获取不带文件扩展名的文件名 我在我的中编写了以下函数 vimrc文件来编译并运行Java程序 function JAVA RUN javac M endfunction map
  • Ubuntu 上的 Vim:文本渲染错误,奇怪地重复和消失

    不久前我在 ubuntu 12 04 上安装了 vim 有时 当我在代码上运行光标 使用键盘 而不是鼠标 时 文本会消失 就好像渲染字符时出现问题一样 当我再次运行光标时 它通常会重新出现 这似乎是随机发生的 但通常足以让人恼火 为了更清楚
  • 在 Vim 中隐藏所有(不)匹配的行

    是否可以在 vi 或 Vim 中显示 隐藏所有匹配行 不突出显示 而只显示那些行 例如 我有一个带有单词单词的文本ERROR 如何让它只显示包含以下内容的行ERROR以及如何只显示线条而不显示ERROR 有解决办法吗不删除所有匹配的行然后撤
  • 使用模糊搜索在 Vim 中打开文件

    我正在寻找一种方法 使 Vim 能够通过模糊搜索文件名来打开文件 基本上 我希望能够定义一个项目一次 然后有一个快捷方式 它可以为我提供一个输入文件名的位置 并且如果有任何字母匹配 则将进行匹配 这种功能存在于我见过的大多数编辑器中 但我一

随机推荐

  • 如何为 AVVideoComposition 设置透明背景?

    Update 我为回答这个问题添加了 50 点声誉赏金 我有一个应用程序需要将一些视频和照片放在一起以创建电影 我正在使用 AVMutableComposition 来实现这一点 为了能够指示它如何合成视频 我必须使用 AVMutableV
  • 如何在类中使用静态/辅助方法?

    我正在写一个Fraction类 我正在尝试使用gcd a b 在初始化时Fraction目的 但是 当我尝试这样做时 如果没有Fraction部分Fraction gcd a b 我用了 staticmethod在这里 但它绝对没有任何作用
  • 如何在一个 UITextView (Xcode) 中拥有两种字体?

    我想在一个 UITextView 中制作两种字体样式 我该怎么做 来自类参考 http developer apple com library IOS documentation UIKit Reference UITextView Cla
  • Linux中分配特定地址

    我想在Linux进程中的特定地址分配一块内存 实际上我想做一些类似的事情 我会有进程号 每个进程都会调用库 由我编写 中的初始化函数 该函数将在进程的地址空间中分配一些内存 它将存储进程相关信息 这将由每个进程完成 一旦分配了该内存 程序就
  • YouTube 可以嵌入 Android 应用程序吗? WebOS 或黑莓怎么样?

    是否可以在 Android 操作系统内播放 YouTube 视频而无需启动单独的 YouTube 播放器 WebOS 或黑莓怎么样 在 iPhone 上 我可以使用 WebView 和嵌入的 YouTube 代码来完成此操作 并且我正在权衡
  • 页面刷新时角度“无法获取”路线

    我的 Angular 应用程序中有一个搜索功能 执行时会点击我的 API 来获取结果 然后使用以下命令重定向用户 location url 一切都很好 直到我尝试重新加载结果页面 当我这样做时 我得到一个Cannot GET search
  • 需要文件而不执行代码?

    这里我有两个文件 file rb def method puts This won t be outputted end puts This will be outputted main rb require file 运行 main rb
  • 从 IP 地址获取主机名 iOS 10

    我需要获取主机名 从 IP 地址 我能够获取连接到我的设备网络的所有设备的 IP MAC 地址 但是主机名总是返回 nil 我曾尝试使用下面的代码片段来检索主机名 但它在我的网络中总是返回 nil 代码片段 1 NSString getHo
  • MYSQL - 从大表中的第二行选择数据

    我有一个外部第3方程序将数据库实时导出到mysql 我想显示数据以进行报告 所以 我无法更改结构 因为它是实时同步的 表结构是这样的 ID Date Transaction 12 2012 11 01 200 12 2012 11 02 2
  • Android sdk 中缺少 Cordova gradle 包装器

    我在 windows7 x64 上 安装了今天最新的稳定版本的 android sdk studio 通过 android studio 捆绑包 因为它现在显然是一起发货的 我已经正确配置了环境变量 如您在上面看到的 这是我发出以下命令时得
  • 在 Rails 服务器日志中查看 Resque 日志输出

    我在 Puma 服务器上有一个 Rails 4 应用程序 其中 Resque Resque Scheduler 正在运行后台作业 我想知道的是如何将两个 Resque 工作人员的日志输出合并到我的服务器日志中 或者 这是不可能的 我如何查看
  • 在本地 WiFi 网络上服务 Django 项目

    I used python manage runserver 0 0 0 0 8000 启动服务器 以便我可以从 wifi 网络上的其他计算机访问该项目 但是当我在另一台计算机上浏览到 internet ipaddress 8000 时 该
  • 适用于 iOS 的 Facebook SDK:未显示 FBSDKShareDialog

    我是 iOS 新手 我想分享一个使用 Facebook SDK for iOS 的链接 我的代码如下 IBAction func shareVoucherUsingFacebook sender UIButton print Faceboo
  • CompletableFuture 已完成,但有异常

    CompletableFuture completedFuture https docs oracle com javase 9 docs api java util concurrent CompletableFuture html co
  • 为什么这个 random() 分布看起来不对称?

    编辑 这是使用 Google Chrome 36 我正在摆弄 html5 画布 生成随机分布在立方体内的点并将其投影到 2D 画布上 令人惊讶的是 结果看起来一点也不对称 我怀疑 Javascript 的 Math random 让我失望了
  • 如何让log4j记录到文件并打印到控制台

    我可以将日志发送到控制台 但似乎无法将其发送到日志文件 这是我的properties file log4j rootLogger DEBUG LOG stdout log4j appender stdout org apache log4j
  • 在cmake中make install后进行后处理

    我正在尝试在 make install 末尾制作可执行文件的副本 我需要做类似的事情 cp bin prog bin prog1 我已将以下内容添加为 CMakelists txt 中的最后一行 install CODE execute p
  • 如何禁用默认视频播放器的画中画模式

    当用户尝试在我的应用程序中播放视频时 如何在 iPad 上的 iOS9 中使用 Swift 禁用画中画按钮 模式 默认 AVPlayerLayers 不会使用画中画 除非您使用AV画中画控制器 https developer apple c
  • 如何创建 DOM 构造函数的实例?

    当我尝试创建 DOM 的 HTMLElement 实例时 var oElement new HTMLElement 它抛出 类型错误 非法构造函数 为什么我们不能实例化 DOM 的构造函数 有办法做到吗 谢谢 要使用 Javascript
  • 自动缩进:smartindent 和 indentexpr

    当我编辑 Python 文件时 例如 def my func print Something lt CURSOR IS HERE 我想通过输入添加评论 该行会自动重新缩进到该行的开头 def my func print Something