vim 中按名称对函数进行排序

2023-12-08

Vim 可以使用“sort”命令对行进行排序。我想使用 vim 对源代码中的函数进行排序。 例如: 前

def a():
    pass
def c():
    pass
def b():
    pass

after:

def a():
    pass
def b():
    pass
def c():
    pass

我可以这样做吗?


对于这样的事情:

def a():
    stmt1

    stmt2
def b():
    stmt3

Or C:

void a()
{
    stmt1;

    stmt2;
}

void b()
{
    stmt3;
}

您需要足够的语义知识来确定 stmt1 和 stmt2 之间的空白仍然是a.

对于 python,这意味着您需要提前阅读以找到第一行既不是空白也不是缩进的行。您还需要考虑嵌套缩进(当函数是类或模块的一部分并且def已经缩进)。

对于 C,您需要提前阅读直到匹配的结束大括号 - 这意味着您需要考虑嵌套大括号。

有一个关于 C++ 的类似主题尚未得到解答:在 C++ 代码中自动按字母顺序对函数进行排序

我相信这在一般情况下并不简单,你最好使用yacc或其他一些语义解析器。您还可以手动添加开始和结束标记,并执行类似于 kev 建议的操作。

MaRkNeXt
def a():
    stmt1

    stmt2
MaRkNeXt
def b():
    stmt3
MaRkNeXt

然后是这样的:

:%s/$/$/
:g/^MaRkNeXt/,/MaRkNeXt/-1join!
:%sort
:%s/\$/\r/g
:g/MaRkNeXt/d
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

vim 中按名称对函数进行排序 的相关文章

随机推荐

  • 在 ajax/jquery 调用的 success 函数之外使用变量

    我有以下代码 var test ajax type GET url views person controller php actor person action checkAge data age value success functi
  • WPF:实现 MediaPlayer 音频/视频搜索器

    我目前正在使用 WPF 开发 MP3 播放器 在 WPF 应用程序中 MediaPlayer基本上 我想实现一个随着当前播放的歌曲一起移动的歌曲搜索器 我已经实现了一个歌曲滑块 来自萨莎 巴伯的申请 并且当用户手动拖动导引头时它会起作用 例
  • Docker 从 ubuntu 绝对路径 COPY

    我的 dockerfile 中有以下行 COPY root url net volumes persistent url root usr share nginx html 当我尝试使用 docker compose 构建图像时 我得到了
  • SSRS 报告中没有数据

    我在 SSRS 报告上有一个 tablix 它从存储过程中获取数据 当不存在数据时 我试图向用户显示一条消息 例如 此报告没有数据 我可以通过在 NoRowsMessage 中指定此消息来轻松完成此操作Tablix 的属性 但我想显示 ta
  • html css 内容中的特殊字符,使用 attr()

    相关代码笔 http codepen io anon pen ocptF 编辑 codepen 使用 Jade 因此搞乱了一些事情 在开始这个问题时我并没有意识到这一点 本质上 我认为 CSS attr 会逐字复制 HTML 属性 但事实并
  • 2 个向量中所有点之间的欧氏距离

    如果我有两个长度为 M 和 N 的一维数组 计算所有点之间的欧几里得距离 结果为 NxM 数组 的最有效方法是什么 我正在尝试用 Numpy 解决这个问题 但我对它还很陌生 所以我有点卡住了 目前我正在这样做 def get distanc
  • 正确的 JavaScript 运算符优先级表是什么?

    如果我在 Firefox 上运行以下代码 则会收到错误消息 new Number toString But 根据MDN new Number应该先评估 所以我认为该表不正确 让我们来看看at MSDN 表格上方写着运算符是从左到右计算的 但
  • 有没有办法替换 JSON 值并同时将其设置为 '' ?

    我有一个 JSON 字段 如下所示 header C value 1 header D value 2 header E value 3 我想更改 JSON 值标头的名称并将其设置为 但我只能更改该值 UPDATE Files SET Co
  • 如何从另一个页面关闭模态表单

    document ready function create user button click function dialog form load test html dialog modal true 我有两页 从第一页开始 我想使用
  • bootstrap 3确认删除cakephp中的模式

    你好 我有一个记录表 其中每一行都有一个删除链接 你会发现 cakephp 的删除操作 public function delete id if this gt request gt is get throw new MethodNotAl
  • 对数组进行排序而不重写键

    我有一个如下所示的数组 arr 0 gt Int 2 1 gt Array 2 gt Array 3 gt Array 我已经使用 usort 对其进行排序 usort arr function a b if a prop b prop r
  • JProgressBar不更新,找不到线索

    干得好 现在我只想知道为什么如果我在 while 循环中添加下面的 System out println 指令 进度会显示在 Gui 中的 cmd 和 Pgbar 上 while progress lt 99 System out prin
  • React useEffect无限循环获取数据axios

    我用这段代码陷入了无限循环 我一直在尝试其他帖子中的一些解决方案 但它们不起作用 locationAddress是一个地址数组 我正在尝试使用 Google Maps Geocode API 获取坐标 const reducer state
  • 当应用程序处于后台或被终止时 FCM onMessageReceived() 未调用

    当应用程序处于后台或被杀死时 onRecive onMessageReceived 不会被调用 我只在通知中收到 json 下面是我的服务类 public class AppFireBaseMessagingService extends
  • 从 std::multimap<> 中删除项目后,我可以继续使用迭代器吗? [复制]

    这个问题在这里已经有答案了 即使在调用 multimap erase 之后 我还可以继续使用 multimap 迭代器吗 例如 Blah iterator iter for iter mm begin iter mm end iter if
  • 运行 casperjs 的多个实例

    我需要同时运行 3 个 url 请求 我想到运行 3 个 casper 实例 每个实例获取一个 url 作为一个简单的例子 我尝试了 2 个实例 var casper require casper create casper start h
  • HashMap 通过考虑它们的值来映射整数数组

    鉴于以下代码 我得到null 我想要的是 1234 但我希望有一个可以将键视为相等的映射 如果int 是相等的 而不是认为int 我该怎么办呢 HashMap
  • Spring - 用新的属性文件值替换 bean 属性值

    我有一个属性文件 并使用 Spring 属性占位符 将值设置为 Spring bean 现在 该属性文件可以在运行时修改 有没有办法用这个新修改的属性值刷新 Spring bean 的属性 特别是 我有很多单例豆 我怎样才能用新值刷新它们
  • 将字符串转换为日期时间 dd/MM/yyyy hh:mm:ss tt

    我怎样才能转换这个7 3 2015 12 40 02 PM转换为具有格式的日期时间 dd MM yyyy hh mm ss tt 我已经这样做了 BreackEndTime DateTime ParseExact configViewMod
  • vim 中按名称对函数进行排序

    Vim 可以使用 sort 命令对行进行排序 我想使用 vim 对源代码中的函数进行排序 例如 前 def a pass def c pass def b pass after def a pass def b pass def c pas