我使用tab键在Vim中缩进我的python代码,但每当我复制并粘贴一个块时,Vim会用4个空格替换每个选项卡,这会引发IndentationError
我尝试按照相关问题的建议设置:set paste
,但没有区别
其他网站建议粘贴“tabless”代码并使用可视化编辑器进行重新缩进,但是这涉及到大块的麻烦
我是否可以将任何设置应用于vim以维护复制/粘贴标签?
感谢您对此有任何帮助:)
修改
我使用标准的gnome-terminal技术(ctrl + shift + c / mouse等)在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
我抬头看着那个 - >将制表位设置为n以进行文本输入,但不知道哪个值将维护制表符
答案 0 :(得分:6)
请参阅: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内部,您应该使用y
“拽”并使用p
或P
“放”;可选择使用"ay
/ "ap
之类的特定注册来对@a
或"+y
/ "+p
的内容进行抽取/放置,以便将其粘贴/粘贴到/从系统剪贴板(如果您的Vim是使用剪贴板支持构建的)。
作为旁注,您应该使用设置的长格式名称,因为它们比短序列更具可读性。你未来的自我会感谢你。
答案 1 :(得分:5)
What romainl said。此外,还有一些我认为有用的其他设置。以下是我的.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>
以详细了解他们的操作,
答案 2 :(得分:2)
首先,确保您的缩进设置代表您喜欢的样式,正如romainl在答案中所示。
如果必须从Vim外部粘贴代码(例如,从另一个终端选择),:retab!
命令可以将空格固定到Tabs;对于粘贴的文本,具有适当范围的完整命令将是
:'[,']retab!
或者,您可以尝试使用"*]p
命令粘贴,该命令会自动调整缩进到光标位置(请参阅:help ]p
)。
答案 3 :(得分:2)
我在中间点击粘贴到终端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会自动展开源文本中的标签。