34

Когда я копирую некоторый код с веб-страниц и вставляю его в 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

Обычно я пишу Python в VIM. И помощь будет принята с благодарностью.

4 ответа4

48

Сделайте это раньше:

:set paste

Затем после:

:set nopaste
16

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

Переключить авто-отступ для вставки кода

Фон

Если вы используете команды Vim для вставки текста, ничего неожиданного не происходит. Проблема возникает только при вставке из другого приложения и только тогда, когда вы не используете версию Vim с графическим интерфейсом. В консольной или терминальной версии 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 в режиме вставки, чтобы включать и выключать «вставку». Третья строка отображает, включена ли функция «вставить» в режиме вставки.

2

Это автоиндент, который связывается с вами.

set autoindent
set smartindent

Попробуйте отключить их, когда вы вырезаете и вставляете свой код, а затем включите их снова, когда вы закончите.

-2

Наименьшее количество усилий для достижения этого (может быть вложено в .vimrc):

:set paste

Затем вставьте свой код.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .