11

我使用 tab 键在 Vim 中缩进我的 python 代码,但是每当我复制和粘贴一个块时,Vim 都会用 4 个空格替换每个 tab,这会引发IndentationError

我尝试:set paste按照相关问题中的建议进行设置,但没有区别

其他网站建议粘贴“无表格”代码并使用可视化编辑器重新缩进,但这在涉及大块时会带来麻烦

是否有任何设置可以应用于 vim 以维护复制/粘贴选项卡?

感谢您对此的任何帮助:)

编辑:

我正在使用标准的 gnome 终端技术(ctrl+shift+c / 鼠标等)在 vim 中复制和粘贴

我的 .vimrc 是:

syntax on
set ts=4
if has("terminfo")
let &t_Co=8
let &t_Sf="\e[3%p1%dm"
let &t_Sb="\e[4%p1%dm"
else
let &t_Co=8
let &t_Sf="\e[3%dm"
let &t_Sb="\e[4%dm"
endif

我查了一下 ts -> 将制表位设置为 n 以进行文本输入,但不知道什么值会保持制表符

4

4 回答 4

7

查看:h tabstop所有选项以及它们如何相互作用。

如果您更喜欢标签,这些是很好的设置:

set tabstop=4
set shiftwidth=4
set noexpandtab

使用这些设置,您点击<Tab>并获得<Tab>.

如果您更喜欢空格,这些是很好的设置:

set tabstop=4
set shiftwidth=4
set expandtab

使用这些设置,您点击<Tab>并获得<Space><Space><Space><Space>.

无论您选择什么,都不应使用终端键绑定进行复制/粘贴。在 Vim 中,你应该用or来“拉”y和“放” ;可选地使用特定的寄存器,例如/来拉动/放入/从系统剪贴板的内容中提取/粘贴或/拉动/粘贴到/从系统剪贴板中(如果您的 Vim 是使用剪贴板支持构建的)。pP"ay"ap@a"+y"+p

作为旁注,您应该使用设置的长格式名称,因为它们比短名称更具可读性。你未来的自己会感谢你。

于 2012-09-25T15:05:59.580 回答
5

罗马人说什么。此外,还有一些我觉得有用的其他设置。这是我的 .vimrc 的摘录:

set autoindent " always set autoindenting on"
set smartindent " use smart indent if there is no indent file"
set tabstop=4 " <tab> inserts 4 spaces"
set softtabstop=4 " <BS> over an autoindent deletes 4 spaces."
set smarttab " Handle tabs more intelligently"
set expandtab " Use spaces, not tabs, for autoindent/tab key."
set shiftwidth=4 " an indent level is 4 spaces wide."
set shiftround " rounds indent to a multiple of shiftwidth"

在 vim 中,输入:h <setting>这些设置以了解更多关于它们的作用,

于 2012-09-25T16:36:47.447 回答
5

我正在单击鼠标中键粘贴到终端 vim 实例中。我的 vimrc 中有这个:

set tabstop=2           " (ts)
set softtabstop=2       " (sts) Turned off with 0
set shiftwidth=2        " (sw)  Used for autoindent, and << and >>
set expandtab           " (et)  Expand tabs to spaces

我跑了

:set paste
:set noexpandtab

vim 保留了源文本中的选项卡。在不覆盖我的expandtab设置的情况下,vim 会自动扩展源文本中的选项卡。

于 2015-03-24T17:23:15.387 回答
2

首先,确保您的缩进设置代表您喜欢的样式,正如 romainl 在他的回答中所显示的那样。

如果您必须从 Vim 外部粘贴代码(例如从另一个终端选择),该:retab!命令可以将空格固定到 Tabs;对于粘贴的文本,具有适当范围的完整命令将是

:'[,']retab!

或者,您可以尝试使用命令进行粘贴,该"*]p命令会自动使缩进适应光标位置(请参阅 参考资料:help ]p)。

于 2012-09-25T15:46:14.973 回答