选定字符串的换行

Wrapping of selected string

我想为所选行的换行创建热键。理想情况下,它应该像这个例子一样工作:

  1. 选择的字符串:“:include => [:profile => :user]”
  2. 按下 F6 键
  3. 所选字符串应修改为"lambda {{ :include => [:profile => [:user]] }}"

我实施了以下解决方案:

 nmap <F6> :%s/<C-r>+/lambda {{ <C-r>+ }}/gc

但这不起作用,因为所选行不包含转义元素“]”,因此“%s”找不到行。我使用 vim-gnome。 您可以建议哪些解决方案?

简单的解决方案是

xnoremap <F6> slambda{{ <c-r>" }}<esc>

还有老方法(不改变未命名寄存器,但也不兼容redo

xnoremap <F6> <esc>`>a}}<esc>`<ilambda {{<esc>

然后,也是插件。使用我的lh-brackets,它将被定义为

Brackets! lambda\ {{ }} -trigger=<F6> -insert=0

(确实还有很多要敲的,不过它也可以生成普通模式和插入模式的映射)

surround.vim plugin是一个广泛使用的环绕文字插件。可自定义(但不支持功能键,只能"normal"个字母):

:let g:surround_108 = "lambda {{ \r }}"

有了这个,您可以用 sl 包围所选文本(108 是小写字母 l 的代码),也可以通过 ys{motion}l 在正常模式下使用。