vim - 有什么简单的方法可以在 Vim 的 ruby​​ 中切换 "do/end"和 "{}"吗?

标签 vim textmate ruby macvim

有什么简单的方法可以在 Vim 的 ruby​​ 中切换“do/end”和“{}”吗?

(TextMate 使用 ^{ 完成此操作。)

最佳答案

你必须要么使用 searchpair(),要么使用 %(只要安装了 matchit,并且当你在开始/结束时),然后标记两个位置,测试它是文本还是括号,最后更新这两行。

nnoremap <buffer> <c-x>{ :call <sid>ToggleBeginOrBracket()<cr>

let s:k_be = [ 'begin', 'end' ]
function! s:ToggleBeginOrBracket()
  let c = lh#position#char_at_mark('.')
  if c =~ '[{}]'
    " don't use matchit for {,}
    exe 'normal! %s'.s:k_be[1-(c=='}')]."\<esc>``s".s:k_be[(c=='}')]."\<esc>"
  else
    let w = expand('<cword>')
    if w == 'begin'
      " use mathit
      normal %
      exe "normal! ciw}\<esc>``ciw{\<esc>"
    elseif w == 'end'
      " use mathit
      normal %
      exe "normal! ciw{\<esc>``ciw}\<esc>"
    else
      throw 'Cannot toggle block: cursor is not on {, }, begin, nor end'
    endif
  endif
endfunction

lh#position#char_at_mark() 的定义 here .

PS:这绝对是一个 SO 问题,因为它结合了 ruby​​ 上下文和高级 vim 脚本。

关于vim - 有什么简单的方法可以在 Vim 的 ruby​​ 中切换 "do/end"和 "{}"吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3090701/

相关文章:

vim - 如何通过 viewdoc 插件在 Vim 中使用 pman 和自定义帮助文件?

vim - 检查vimrc中是否安装了病原体

正则表达式替换 sublime 中替换中包含部分匹配的值?

Ruby 2.0p0 和 XMLRPC::Client

php - ruby 在性能基准测试中是否比 Php 慢

regex - gvim搜索使用正则表达式匹配多个字符

vim - 无法在 vim 中自动格式化 go (golang) 代码

javascript - 在 Sublime Text 2 中创建 javascript 函数 stub 的快捷方式

Django - Mac OSX 工作流程 - 有关高效开发方法的问题

ruby - 调用super的super方法