![当我将代码粘贴到 vim 中时,如何保持代码格式为原始源?](https://linux22.com/image/1237349/%E5%BD%93%E6%88%91%E5%B0%86%E4%BB%A3%E7%A0%81%E7%B2%98%E8%B4%B4%E5%88%B0%20vim%20%E4%B8%AD%E6%97%B6%EF%BC%8C%E5%A6%82%E4%BD%95%E4%BF%9D%E6%8C%81%E4%BB%A3%E7%A0%81%E6%A0%BC%E5%BC%8F%E4%B8%BA%E5%8E%9F%E5%A7%8B%E6%BA%90%EF%BC%9F.png)
当我从网页上复制一些代码并粘贴到 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
然后粘贴您的代码。