【问题标题】:Remove messy leading whitespace in Vim on Mac OS X在 Mac OS X 上删除 Vim 中凌乱的前导空格
【发布时间】:2009-07-11 23:23:29
【问题描述】:

我正在从网站 matplotlib 复制代码并粘贴到 Mac OS X 终端中的 Vim 编辑器中:

pylab_examples example code: ellipse_demo.py

虽然这在BBEdit 中运行良好:

`from pylab import figure, show, rand
from matplotlib.patches import Ellipse

NUM = 250

ells = [Ellipse(xy=rand(2)*10, width=rand(), height=rand(), angle=rand()*360)
        for i in xrange(NUM)]

fig = figure()
ax = fig.add_subplot(111, aspect='equal')
for e in ells:
    ax.add_artist(e)
    e.set_clip_box(ax.bbox)
    e.set_alpha(rand())
    e.set_facecolor(rand(3))

ax.set_xlim(0, 10)
ax.set_ylim(0, 10)

show()

也就是说,所有代码都正确对齐。在 Vim 中是这样的:

from pylab import figure, show, rand
from matplotlib.patches import Ellipse

NUM = 250

ells = [Ellipse(xy=rand(2)*10, width=rand(), height=rand(), angle=rand()*360)
        for i in xrange(NUM)]

            fig = figure()
            ax = fig.add_subplot(111, aspect='equal')
            for e in ells:
                    ax.add_artist(e)
                        e.set_clip_box(ax.bbox)
                            e.set_alpha(rand())
                                e.set_facecolor(rand(3))

                                ax.set_xlim(0, 10)
                                ax.set_ylim(0, 10)

                                show()

如何解决这种烦人的情况?是否与 Mac 上不同的回车/换行约定有关?

【问题讨论】:

    标签: macos vim


    【解决方案1】:

    在粘贴文本之前使用:set paste 命令。这会关闭自动缩进以及其他可能干扰粘贴的内容。要恢复正常运行,请使用:set nopaste

    【讨论】:

    • 那么我不知道该建议什么。您所描述的正是:set paste 命令旨在解决的问题。每当我遇到同样的问题时,我都会使用它,它对我有用。
    • 关闭我之前的评论。在伦敦的夜晚显然为时已晚!得到它的工作。谢谢格雷格很好的一个。
    【解决方案2】:

    或者使用:r!pbpaste -- 将pbpaste 命令的输出(恰好是当前的粘贴缓冲区)插入到当前行下;无需纠结模式等。

    【讨论】:

    • 使用外部命令太过分了,因为有 :put 和 "+p 做同样的事情。
    • 不在 OS X 中;请参阅我对您的回答的评论。
    【解决方案3】:

    如果需要,您可以使用cat(1)

    $ cat > newfile.py
    Paste the code here, then press Ctrl-D for EOF.
    Make sure to type EOF on an otherwise empty line
    or bad things will happen to your children.
    $ vi newfile.py
    

    应该可以。

    【讨论】:

    • 我推荐 :set paste 版本,尤其是现在我知道了,但是在我开始发帖的时候我不知道它对你有用,所以我发布了它以防万一。
    • 我过去一直使用这种方法,但是在了解了“设置粘贴”之后我可能也会切换。
    【解决方案4】:

    除了已经提到的:set paste 命令,您还可以随时使用"+p 将剪贴板的内容粘贴到当前位置。我没有在 Mac OS X 上使用过 Vim,但我确信这仍然有效。在 Linux 上,"*p 用于选择剪贴板,"+p 用于复制和粘贴剪贴板;在 Windows 上,它们都指向系统剪贴板。 "+p 起初是一个有点奇怪的命令,但是一旦你习惯了使用这种类型的命令,它就会变得非常快。或者,您可以使用 :put + 来做同样的事情。

    :help quote
    :help put
    :help :put
    :help registers
    

    【讨论】:

    • 在 OS X 上这似乎不起作用;当我测试它时,+ 寄存器没有从系统剪贴板中提取,只是从 vi 的内部寄存器中提取。我尝试了vivim,在xterm 和Apple 的本机Terminal.app 中运行; :r!pbpaste 有效,vi 的寄存器集成无效。
    • macVim是这样,但我觉得不是vim命令行中的+寄存器
    【解决方案5】:

    如果您使用的是 emacs,那将是 M-x mark-whole-bufferM-x indent-region 的简单问题。

    【讨论】:

    • 与流行的看法相反,“使用其他东西”很少能解决问题。
    • 谢谢 jrockway 哈哈。遗憾的是,每行的缩进会逐渐变大,所以没有帮助,否则我会使用 Vim 的
    • 而且,正如我们所见,由于他使用的是 Vim,所以就像 :set paste 一样简单。
    • 我错过了关于粘贴的部分。在这种情况下,它可以正常工作。
    • Vim 也有一个自动缩进功能(例如 gg=G),但这对 python 代码不一定有帮助,因为 emacs 或 Vim 不可能知道一行的缩进级别python 代码(除非它是紧跟在以 ':' 结尾的行之后的行)。
    猜你喜欢
    • 2015-07-29
    • 1970-01-01
    • 2014-03-04
    • 2010-11-28
    • 1970-01-01
    • 1970-01-01
    • 2011-10-21
    • 1970-01-01
    • 2011-04-08
    相关资源
    最近更新 更多