【问题标题】:Select forward and backward to arbitrary string in neovim在neovim中选择向前和向后到任意字符串
【发布时间】:2018-05-19 12:29:32
【问题描述】:

我正在学习使用 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 文档,这与我想做的类似,但仅适用于特定字符。


编辑:如果存在多个,则仅选择当前部分也很重要。 IE。使用以下文件,

#!/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。也欢迎对我的情况采取另一种方法。

【问题讨论】:

    标签: vim ipython vi neovim


    【解决方案1】:

    您可以使用搜索模式:

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

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

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

    这将:

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

    【讨论】:

    • 这肯定是朝着正确的方向发展!遗憾的是,它不适用于包含多个代码段的文件。我将更新 OP 以澄清此要求。
    【解决方案2】:

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

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

    总的来说,

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

    确实有效,尽管在折叠打开和关闭时会出现一些恼人的屏幕闪烁。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-12
      • 2014-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-23
      • 1970-01-01
      相关资源
      最近更新 更多