当我将代码粘贴到 vim 中时,如何保持代码格式为原始源?

当我将代码粘贴到 vim 中时,如何保持代码格式为原始源?

当我从网页上复制一些代码并粘贴到 Vim 中时,发现它变得很乱,像梯子一样:

xxxxxx
   xxxxxx
      xxxxxx
         xxxxxxxxxx

由于它经常这样混乱,我想也许我的有问题.vimrc,所以我把它粘贴在下面:

set number
set nocompatible
set nowritebackup
set noswapfile
syntax on
filetype indent on
filetype plugin on
filetype on
set background=light
set autoindent
set smartindent
set tabstop=4
set shiftwidth=4
set showmatch
set guioptions=T
set fileencodings=utf-8,prc
set ruler
set incsearch
map gs :%s
set t_Co=256
:colorscheme evening
filetype plugin indent on

通常我在 Vim 中编写 python,因此正确的缩进至关重要。

答案1

先做这个:

:set paste

然后:

:set nopaste

答案2

http://vim.wikia.com/wiki/Toggle_auto-indenting_for_code_paste

切换代码粘贴的自动缩进

背景

如果您使用 Vim 命令粘贴文本,则不会发生任何意外情况。只有当您从其他应用程序粘贴时,并且您没有使用 Vim 的 GUI 版本时,才会出现问题。在控制台或终端版本的 Vim 中,没有从其他应用程序粘贴文本的标准程序。相反,终端可能会通过将文本插入键盘缓冲区来模拟粘贴,因此 Vim 认为文本已由用户输入。在每一行结束后,Vim 可能会移动光标,以便下一行以与上一行相同的缩进开始。但是,这会更改粘贴文本中已有的缩进。

粘贴切换

将以下内容放入你的 vimrc 中(更改为你想要的任何键):

set pastetoggle=<F2>

要从另一个应用程序粘贴:

  • 启动插入模式。
  • 按 F2(切换“粘贴”选项)。
  • 使用您的终端从剪贴板粘贴文本。
  • 按 F2(关闭‘粘贴’选项)。

然后粘贴文本的现有缩进将被保留。

您不必先启动插入模式,但如果您处于正常模式并且具有 F2 的映射,则该映射将应用,并且“pastetoggle”功能将不起作用。

有些人喜欢通过以下 vimrc 替代方案在状态行中显示的视觉反馈:

nnoremap <F2> :set invpaste paste?<CR>
set pastetoggle=<F2>
set showmode

第一行设置映射,以便在正常模式下按 F2 将反转“粘贴”选项,然后显示该选项的值。第二行允许您在插入模式下按 F2 来打开和关闭“粘贴”。第三行允许显示插入模式下是否打开“粘贴”。

答案3

自动缩进功能正在困扰着你。

set autoindent
set smartindent

尝试在剪切和粘贴代码时禁用它们,然后在完成后再次启用它们。

答案4

实现这一目标所需的最少努力是(可以投入.vimrc):

:set paste

然后粘贴您的代码。

相关内容