Select 在 neovim 中向前和向后到任意字符串
Select forward and backward to arbitrary string in neovim
我正在学习使用tmux+neovim+ipython作为科学pythonIDE,主要用于数据处理和制图。
为了让我可以轻松地重新运行一段代码,我怎样才能创建一个从光标位置向前和向后 select 到某个任意标记的快捷方式?。例如。如果标记设置为 #$%
并且我的光标位于以下行中的 ¶
,
#$%
x = bigarray[:, 0]
y = bigarray[:, 1]
scalar = 1.5¶
y = y * scalar
axis1.plot(x, y)#$%
我想进入正常模式,输入 <leader>s
,然后 selected:
x = somearray[:, 0]
y = somearray[:, 1]
scalar = 1.5
y = y * scalar
axis1.plot(x, y)
我找到了 vim 的 object-select 文档,这与我想做的类似,但只适用于特定字符。
编辑:同样重要的是,如果存在多个,则只有当前部分被 selected。 IE。使用以下文件,
#!/usr/bin/env python3
#$%
section_1()¶
#$%
stuff_not_in_a_section
#$%
section_2()
#$%
<leader>s
必须 select 只有 section_1()
编辑 2:使用不同的 beginning/ending 符号也可以,例如{{{
和 }}}
的默认折叠标记。
我认为与 vim-slime 的组合,它向 ipython 发送一个 selection,以及一个匹配的 set foldmarker
,将使 neovim 成为一个很好的选择IDE。也欢迎对我的情况采取另一种方法。
您可以使用搜索模式:
/\v(#$\%)@<=%(.|\n|\r){-}(#$\%)@=
这将匹配 #$%
的两个实例之间的文本。然后select光标下的匹配使用:
nnoremap <leader>s mm/\v(#$\%)@<=%(.\|\n\|\r){-}(#$\%)@=<cr>'mgn
这将:
- 标记光标位置(
mm
)
- 搜索模式 (
/\v(#$\%)@<=%(.\|\n\|\r){-}(#$\%)@=<cr>
)
- Return 到标记位置 (
'm
)
- Select 匹配模式 (
gn
)
我找到了一个我最满意的解决方案。它要求将代码部分定义为基于标记的 folds/sections,这大概就是我一直使用折叠的方式。
如果我在折叠内并按 za
将其关闭然后 C-c C-c
将段落发送到 vim-slime,则发送整个折叠,无论内部如何换行符。根据需要将光标 returns 移动到命令末尾的上一个位置。
所以总共
nmap <leader>s za<C-c><C-c>za
虽然在折叠打开和关闭时会出现一些恼人的屏幕闪烁,但还是有效果的。
我正在学习使用tmux+neovim+ipython作为科学pythonIDE,主要用于数据处理和制图。
为了让我可以轻松地重新运行一段代码,我怎样才能创建一个从光标位置向前和向后 select 到某个任意标记的快捷方式?。例如。如果标记设置为 #$%
并且我的光标位于以下行中的 ¶
,
#$%
x = bigarray[:, 0]
y = bigarray[:, 1]
scalar = 1.5¶
y = y * scalar
axis1.plot(x, y)#$%
我想进入正常模式,输入 <leader>s
,然后 selected:
x = somearray[:, 0]
y = somearray[:, 1]
scalar = 1.5
y = y * scalar
axis1.plot(x, y)
我找到了 vim 的 object-select 文档,这与我想做的类似,但只适用于特定字符。
编辑:同样重要的是,如果存在多个,则只有当前部分被 selected。 IE。使用以下文件,
#!/usr/bin/env python3
#$%
section_1()¶
#$%
stuff_not_in_a_section
#$%
section_2()
#$%
<leader>s
必须 select 只有 section_1()
编辑 2:使用不同的 beginning/ending 符号也可以,例如{{{
和 }}}
的默认折叠标记。
我认为与 vim-slime 的组合,它向 ipython 发送一个 selection,以及一个匹配的 set foldmarker
,将使 neovim 成为一个很好的选择IDE。也欢迎对我的情况采取另一种方法。
您可以使用搜索模式:
/\v(#$\%)@<=%(.|\n|\r){-}(#$\%)@=
这将匹配 #$%
的两个实例之间的文本。然后select光标下的匹配使用:
nnoremap <leader>s mm/\v(#$\%)@<=%(.\|\n\|\r){-}(#$\%)@=<cr>'mgn
这将:
- 标记光标位置(
mm
) - 搜索模式 (
/\v(#$\%)@<=%(.\|\n\|\r){-}(#$\%)@=<cr>
) - Return 到标记位置 (
'm
) - Select 匹配模式 (
gn
)
我找到了一个我最满意的解决方案。它要求将代码部分定义为基于标记的 folds/sections,这大概就是我一直使用折叠的方式。
如果我在折叠内并按 za
将其关闭然后 C-c C-c
将段落发送到 vim-slime,则发送整个折叠,无论内部如何换行符。根据需要将光标 returns 移动到命令末尾的上一个位置。
所以总共
nmap <leader>s za<C-c><C-c>za
虽然在折叠打开和关闭时会出现一些恼人的屏幕闪烁,但还是有效果的。