Вставка в vim текста из клипбоарда
Знакомая картина?
Да-да, я просто пытался вставить текст в 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.jpg | 85.81 кб |
| vi-set-nopastetoggle-small.jpg | 19.74 кб |
| vi-set-pastetoggle-small.jpg | 20.78 кб |
| vi-set-pastetoggle.jpg | 77.71 кб |
- 14037 просмотров




А я решил с помощью:
:set noautoindent
А я что то не очень понял как вставлять выделенный текст в режиме вклейки :(
то есть возможностями терминала:
Надо сказать, что не очень понятно, зачем такие сложности. Да, конечно, если например выделить мышкой в терминале некоторое количество кода, а потом в режиме вставки vim-а кликнуть на средней кнопки мыши, то да, Вы правды - форматирование съедет при nopaste. Однако, почему бы не воспользоваться командами "*gP и "+gP - они прекрасно решают эту проблему и нет необходимости переключать paste туда-сюда. Эти комбинации можно удобно забайндить на любимые клавиши для вставки.
клипборды бывают разные, всякие разнообразные Ж:-)
если пользоватся vim исключительно под иксами - тогда "*gP и "+gP отличный типс.
но я например часто использу vim на других машинах через ssh.
и так же часто пользусь возможностями screen для копирования/вставки.
в этом случает "* и "+ никак помочь не могут..
--
Signature invent in progress 23% #.........
Спасибо, часто с этим раньше мучался )
Отправить комментарий