如何在Vim中的Matlab之类的两行之间进行选择?

问题描述

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

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()

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

编辑1:我在整个stackoverflow上进行了搜索,但是找不到有人问类似的问题。多数是如何在python中选择函数或类。我知道这是有可能的,因为我找到了一个可以执行此操作的插件wmvanvliet/jupyter-vim(有关工作原理的视频,请参见自述文件的第一件事)。但这是对REPL的全面介绍,它使我的启动时间增加了200ms。

我敢肯定有一种简单的vim方法可以做到这一点。我只是找不到

解决方法

您可以使用

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

如果光标位于中间,则可以使用N转到上一个匹配点(即,块的开头),按v进入可视模式,然后点击{{ 1}}转到下一个块开始。由于您不希望拉动下一个块的开始,因此需要使用n向上移动一行(还有其他方法,但是这样做很有效,因为无论如何在块之间都有一个空行)。 / p>

将它们放在一起:

k

将选择光标所在的块。

如果要键入的字符太多,则可以将其设置为函数或宏。 Here是一个很好的教程,介绍了如何将命令组合到一个宏中。如果我们想制作一个宏并将其保存在寄存器b中(我想是用于代码块),我们可以做

/^##<CR>Nvnk

并使用qb/^##<CR>Nvnkq 执行宏。