首页 > 解决方案 > 如何在 Vim 中的 Matlab 等两行之间进行选择?

问题描述

在 Matlab 中,有一种方法可以在两个预定义的类型标记之间选择代码。我想使用##作为块标记在 Python 上复制相同的东西。例如,假设光标在Block 2变量上y1

## Block 1
import numpy as np
import matplotlib.pyplot as plt


## Block 2
x = np.linspace(0, np.pi*4, 100)

y1 = np.sin(x)  # <== My cursor is here
y2 = np.cos(x)  
y3 = np.tan(x)

## Block 3
for i in range(5):
    print(i)
plt.plot(x, y)
plt.show()

我想将以下块拉入我的寄存器

## Block 2
x = np.linspace(0, np.pi*4, 100)

y1 = np.sin(x)  # <== My cursor is here
y2 = np.cos(x)  
y3 = np.tan(x)

================================================

编辑1:我已经搜索了整个stackoverflow,但找不到任何人问类似的问题。其中大部分是如何在python中选择函数或类。我知道这是可能的,因为我找到了一个可以执行此操作的插件wmvanvliet/jupyter-vim(有关它的工作视频,请参见自述文件中的第一件事)。但它是完整的 REPL,它使我的启动时间增加了 200 毫秒。

我确信有一个简单的 vim 方法可以做到这一点。我就是找不到

标签: pythonmatlabvimneovim

解决方案


您可以使用

/^##找到块的开始和结束位置。

如果您的光标在中间,您可以使用N转到上一个点击(即块的开头),按v进入视觉模式,然后点击n转到下一个块的开始。由于您不想拉下一个块开始,因此您需要向上移动一行k(还有其他方法,但这很好用,因为无论如何您在块之间都有一个空行)。

把它们放在一起:

/^##<CR>Nvnk

将选择光标所在的块。

如果输入的字符太多,您可以将其制成函数或宏。是一个关于如何将命令放在宏中的很好的教程。如果我们想创建一个宏并将其保存在寄存器 b 中(我猜是为了块?),我们可以这样做

qb/^##<CR>Nvnkq

并使用 执行宏@b


推荐阅读