【问题标题】:Adding erb wrap to surround.vim将erb wrap添加到surround.vim
【发布时间】:2013-05-25 22:27:40
【问题描述】:

我正在尝试编辑我的环绕.vim 文件,以映射一个用于添加 erb 标签的快捷键。这是我指的stackoverflow帖子:

VIM: insert empty ERB tags

我正在使用这个 VIM 包 https://github.com/spf13/spf13-vim,其中包括 Surround.vim

stackoverflow 帖子上的答案说有一个文件位于“~/.vim/after/ftplugin/erb.vim”

由于我使用的是捆绑包,因此我的文件结构不同,因此我仔细研究并找到了这个 "~/.vim/bundle/vim-surround/plugin/surround.vim"

该文件显示了以下代码部分:(完整代码在此处https://gist.github.com/lando2319/5650746 的要点上)

  elseif exists("b:surround_".char2nr(newchar))
    let all    = s:process(b:surround_{char2nr(newchar)})
    let before = s:extractbefore(all)
    let after  =  s:extractafter(all)
  elseif exists("g:surround_".char2nr(newchar))
    let all    = s:process(g:surround_{char2nr(newchar)})
    let before = s:extractbefore(all)
    let after  =  s:extractafter(all)
  elseif newchar ==# "p"
    let before = "\n"
    let after  = "\n\n"
  elseif newchar ==# 's'
    let before = ' '
    let after  = ''
  elseif newchar ==# ':'
    let before = ':'
    let after = ''

如果我理解正确,我需要将下面的代码添加到这个文件的某个地方到我的环绕.vim 文件中,我相信在第 151 行左右。

let b:surround_{char2nr('=')} = "<%= \r %>"
let b:surround_{char2nr('-')} = "<% \r %>"

到目前为止,我尝试将它添加到几个地方,然后在 VIM 中关闭并重新打开一个文件,然后 "cntl-s, =" 到目前为止没有运气。有什么建议吗?

【问题讨论】:

  • 任何需要您在其中插入一些自己的代码的插件都是一个糟糕的插件。我认为您需要对surround.vim 进行的任何自定义都应该在您的vimrc 文件中进行。
  • 很高兴知道,我打开了我的 .vimrc 文件,我看到:我试图添加它,但似乎什么也没发生
  • 顺便说一下,把SPF13降下来。一开始感觉很好,但只会减慢你的学习速度。

标签: ruby-on-rails vim erb


【解决方案1】:

创建文件~/.vim/after/ftplugin/erb.vim 并添加以下行:

let b:surround_{char2nr('=')} = "<%= \r %>"
let b:surround_{char2nr('-')} = "<% \r %>"

另一种方法是使用autocmd 来激活环绕映射。我更喜欢使用~/.vim/after/ 目录,而不是使用特定于文件类型的设置来混淆我的~/.vimrc

【讨论】:

  • 这需要我创建文件夹 ftplugin 和文件 erb.vim,无论如何我这样做重新启动了我的终端,在 vim 中打开了一个新文件,点击“Ctrl-s,-”并没有任何反应.
  • 这里的神奇词是终端。 &lt;c-s&gt; 将激活大多数终端上的流量控制。您应该改用&lt;c-g&gt;s 的替代映射。所以&lt;c-g&gt;s=在你的情况下。打开您的 erb 文件并尝试一下。要验证是否设置了周围变量,请使用以下命令::echo exists('b:surround_61')。如果 = 周围变量设置正确,这应该返回 1。注意:char2nr('=') 是 61。
  • WORKS s- 和 s=(或 ctrl-g,s,- 和 ctrl-g,s,=)这就是我要找的东西,谢谢。这是一次重要的 VIM 学习经历。
【解决方案2】:

不,您不应该将这两行添加到插件的 (surround.vim) 源代码中。您应该将它们添加到您的 vimrc 中。

如果您希望您的- and = 在您进行环绕时对所有文件类型执行&lt;% \r %&gt;&lt;%= \r %&gt;,(例如yss-yss=)。

你只需添加

let g:surround_{char2nr('=')} = "<%= \r %>"
let g:surround_{char2nr('-')} = "<% \r %>"

到你的 vimrc。请注意它们是全局变量(带有g: 前缀)。

如果您只想让您自定义的- and = 用于特定文件类型,您可以创建一个autocmd 并设置缓冲区范围变量(使用b:,与您问题中的两行相同)

我不熟悉红宝石世界。假设你想使用的文件类型是erb,你可以在你的vimrc中:

fun! AutoCmd_ERB()
        "do some other settings/mappings for your ERB, if you have
        "......
        "the customized surrounding :
        let b:surround_{char2nr('=')} = "<%= \r %>"
        let b:surround_{char2nr('-')} = "<% \r %>"
endf
autocmd FileType erb call AutoCmd_ERB()

【讨论】:

  • 感谢您的回复。这是我以github.com/spf13/spf13-vim/blob/3.0/.vimrc 开头的.vimrc 文件使用“Ctrl-s, =”对吗?不知道为什么它不起作用。
  • 要么重新获取 vimrc 文件,要么关闭并启动 vim。插入模式下的ctrl-s 是一个实验性功能,我不使用它,因为我主要在终端上工作。您可以只打开一个 erb 文件,然后在任何一行按 yss-(普通模式)查看发生了什么。
  • &lt;c-g&gt;s 将在终端中激活插入模式。我更喜欢通过stty -ixon 在我的~/.bashrc 文件中禁用流量控制。这让我可以使用&lt;c-s&gt;
  • yss 在当前行上运行。尝试ys 跟随动议。喜欢ys$-ysiw-。请通过:h surround阅读环绕文档@
【解决方案3】:

欢迎使用 Vim,我想!

永远不要编辑插件源文件,总是错的。

当您需要自定义设置时,您的 vimrc 文件就是它发生的地方。输入:h vimrc-intro 了解更多信息。

对于 surround.vim,文档说明

以下添加了 PHP 文件中“-”(ASCII 45)的潜在替换。 (...) 回车会被原文替换。

autocmd FileType php let b:surround_45 = "<?php \r ?>"

这意味着您需要将以下条目添加到您的 vimrc 文件中。出于您的目的,这意味着您需要添加行

autocmd FileType erb let b:surround_{char2nr('=')} = "<%= \r %>"
autocmd FileType erb let b:surround_{char2nr('-')} = "<% \r %>"

到你的 vimrc 文件。您的 vimrc 文件位于 ~/.vimrc(或 $HOME\_vimrc,如果您在 Windows 上)。

重新启动 Vim,您就可以开始工作了。

【讨论】:

    【解决方案4】:

    如果它对任何人有帮助,对我来说,在我将 ~/.vim/after/ftplugin 中的名称从“erb.vim”更改为“eruby.vim”后它就起作用了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多