Вставка в vim текста из клипбоарда


ramok аватар

ramok - Posted on 24 Июнь 2007

Знакомая картина?

Да-да, я просто пытался вставить текст в vim из внешнего клипбоарда, и получается такая нехорошая лесенка из текста. Думаю всем кто использует vim известна эта проблема. Дело в том что vim не умеет распознавать текст который вы копируете из клипбоарда и тот который вводите из клавиатуры, и поэтому пытается его отформатировать.

Если решать эту проблему в лоб, то существует vi-way решение, использование команды vi :r (read) и внешней программы, например cat

:r !cat
вводим тут сколько хотим текста
или вставляем из клипбоарда
ввод заканчиваем ctrl-d
^D

Но согласитесь, такое решение для повседневной жизни вряд ли приемлемо (хотя я и умудрялся пользоваться
им долгие годы). И оно все еще остается актуальным, если вы работаете на vim который настраивали не вы.

В vim существует специальный режим "Вклейки" (так как режим Вставки уже существует со времен vi Ж:-)
Он отличается тем что в нем отключено множество "умных" опций, которые делают редактирование более простым, но при вставке могут приводить к проблемам. Полный список отключаемых опций можно посмотреть по в помощи vim (:h paste).
Этот режим можно включать/выключать/инвертировать командами.

:set paste
:set nopaste
:set invpaste

Но тут возникает проблема в том что эти команды нельзя для удобства повесить на какую нибудь клавишу, так как в режиме Вклейки, кроме всего прочего :map клавиши не работают. Поэтому существует специальная команда, которой можно указать клавишу, которая будет включать/выключать режим Вклейки.

Рекомендую вставить это в ваш ~/.vimrc

set pastetoggle=<F5>

Как видно текст вставил.. вклеился хорошо Ж:-) Красным эллипсом выделена надпись указывающая что активен режим вклейки.

PS
как дополнительная возможность этого режима - вы можете вставлять значение клавиш на которых есть map

ВложениеРазмер
vi-set-nopastetoggle.jpg85.81 кб
vi-set-nopastetoggle-small.jpg19.74 кб
vi-set-pastetoggle-small.jpg20.78 кб
vi-set-pastetoggle.jpg77.71 кб
5
Ваша оценка: Ничего Рейтинг: 5 (1 vote)

А я решил с помощью:
:set noautoindent

А я что то не очень понял как вставлять выделенный текст в режиме вклейки :(

Цитата:

из внешнего клипбоарда,

то есть возможностями терминала:

Надо сказать, что не очень понятно, зачем такие сложности. Да, конечно, если например выделить мышкой в терминале некоторое количество кода, а потом в режиме вставки vim-а кликнуть на средней кнопки мыши, то да, Вы правды - форматирование съедет при nopaste. Однако, почему бы не воспользоваться командами "*gP и "+gP - они прекрасно решают эту проблему и нет необходимости переключать paste туда-сюда. Эти комбинации можно удобно забайндить на любимые клавиши для вставки.

клипборды бывают разные, всякие разнообразные Ж:-)
если пользоватся vim исключительно под иксами - тогда "*gP и "+gP отличный типс.
но я например часто использу vim на других машинах через ssh.
и так же часто пользусь возможностями screen для копирования/вставки.
в этом случает "* и "+ никак помочь не могут..

--
Signature invent in progress 23% #.........

Спасибо, часто с этим раньше мучался )

Отправить комментарий

Google Friend Connect (leave a quick comment)
loading...
Содержание этого поля является приватным и не предназначено к показу.