在neovim

时间:2018-05-19 12:29:32

标签: vim ipython vi neovim

我正在学习使用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。对我的情况采取另一种方法也是受欢迎的。

2 个答案:

答案 0 :(得分:1)

您可以使用搜索模式:

/\v(#\$\%)@<=%(.|\n|\r){-}(#\$\%)@=

这将匹配#$%的两个实例之间的文本。然后在光标下选择匹配使用:

nnoremap <leader>s mm/\v(#\$\%)@<=%(.\|\n\|\r){-}(#\$\%)@=<cr>'mgn

这将:

  1. 标记光标位置(mm
  2. 搜索模式(/\v(#\$\%)@<=%(.\|\n\|\r){-}(#\$\%)@=<cr>
  3. 返回标记位置('m
  4. 选择匹配的模式(gn

答案 1 :(得分:0)

我找到了一个我最满意的解决方案。它要求代码部分被定义为基于标记的折叠/部分,这大约是我一直使用折叠的方式。

如果我在一个折叠中并按za将其关闭然后C-c C-c将段落发送到vim-slime,则会发送整个折叠,无论内部换行符如何。根据需要,光标返回命令末尾的上一个位置。

总的来说,

nmap <leader>s za<C-c><C-c>za 

可以解决问题,尽管在折叠打开和关闭时会出现一些恼人的屏幕闪烁。