【问题标题】:Vim copy line and comment out old lineVim 复制行并注释掉旧行
【发布时间】:2016-08-17 13:48:02
【问题描述】:

我正在尝试在 Vim 中实现相同的目标。

Duplicate line and comment out old one

基本上我想抽行,注释掉旧行,粘贴新行,并将光标保持在新行的开头并以插入模式结束。

例如:

def func (param)

将变为:

//def func (param)
def func (param)

我为它录制了一个宏,将它放入.vimrc,我正在通过@y使用它

" copy-and-comment-line macro
" yank line, comment out original line, move cursor at the begining
" of copied line and end in insert mode
let @y='yypkui//kdklkl'

(我不确定它是否适合您,因为它包含无法打印的 ~@ 字符,代码块不会显示)

宏可以工作,但是 vim 中是否有一个内置命令可以实现相同的功能?

【问题讨论】:

  • 你的宏有什么问题?
  • @romainl 实际上没什么,虽然我只是认为这是 vim 用户中更常见的操作,因此可能会有比我录制的宏更优雅(更短且更易读)的击键集。跨度>
  • 宏不需要可读,它比任何不存在的通用解决方案都要快。

标签: vim


【解决方案1】:

这个映射应该为你做:

nnoremap YOURKEY YI//<esc>p
  • 光标将位于粘贴的行上。
  • YOURKEY 替换为您喜欢的一个(或多个)键
  • 注意,此答案仅适用于您的示例 //style 评论。如果您希望它成为通用解决方案,则必须构建一个函数,在此函数中检查文件类型,并决定应使用哪种注释样式。到目前为止还没有好的内置解决方案,但是您可以检查 NERDCommentervim-commentary 插件以了解它们是如何实现这一点的,或者您可以安装其中一个(或类似的插件)并在您的映射。

【讨论】:

  • 是的,如果这是您碰巧正在使用的语言的注释语法,那就太好了。但是,如果您使用 Python 或 shellscripts(例如),所有这一切都会插入一个语法错误.
  • @Two-BitAlchemist 答案基于 OP 的代码。我没有说它适用于各种“评论风格”
  • 这里没有语言标签,链接的问题与语言无关,实际上 vim 本身与语言无关,这被列为“示例”。无论如何,如果我发现了这个问题,这个解决方案对我不起作用。
  • @aragaer 你应该仔细检查一下,p 就在那里,在 map 命令的末尾。
  • @kent 感谢您的彻底回答,它就像一个魅力!除了一件小事——粘贴后它不会进入插入模式。但是YI//&lt;esc&gt;pi 可以解决问题。
猜你喜欢
  • 2013-11-12
  • 1970-01-01
  • 2015-03-17
  • 2015-12-23
  • 1970-01-01
  • 1970-01-01
  • 2013-03-25
  • 2017-02-28
  • 1970-01-01
相关资源
最近更新 更多