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