Завжди використовуйте: встановити пасту, це гарна ідея?


19

У терміналі vim вставлення даних буфера обміну часто псує відступ коду. Я просто знав, якщо я використовую :set pasteвідступ не порушений. Хоча після вставки даних я повинен зробити це :set nopasteще раз? Що робити, якщо я цього не роблю, яка проблема виникає?


А як спробувати на собі? Або читати документацію ?
romainl

1
Дивіться також "Режим вставки з дужкою" у моїй відповіді на "Вставка коду у вікно термінала у vim" stackoverflow.com/a/7053522/754997 . Якщо ваш емулятор терміналу підтримує його, ви можете домовитись про те, щоб він повідомив Vim автоматично переходити в режим / з режиму вставки, коли ви вставляєте текст у термінал.
Кріс Пейдж

1
@romainl Я вважаю цілком правдоподібним те, що обидва 1) намагаються і чекають, щоб побачити, чи є негативні наслідки завжди використання встановленої пасти (+ - nopaste), і 2) rtfm-ing (як користувача нижчого або проміжного рівня, як ОП) , є менш корисними, ніж запитувати тих, хто має досвід використання цих варіантів. Просити тут здається розумнішим підходом, і документувати це допоможе іншим.
белакква

Відповіді:


5

Як писали інші, ви не хочете залишати "вставити" набір. Я просто хотів зазначити, що при хорошому емуляторі терміналу та правильно складеному та налаштованому vimвам не потрібно змінювати "вставити". Вам потрібен хороший емулятор терміналу, такий як xterm або GNOME Terminal, vim із включеною функцією X11 та опцією 'миша', встановленою на 'a'. Тоді ви vimбудете "знати", коли ви вставляєте мишу, і ефективно встановить і скасує для вас опцію "вставити".

Один з способів отримати vimза допомогою функції X11 є запуск gvimз -vопцією або створити псевдонім,

alias vim='gvim -v'

Потім ставлять

set mouse=a

у вашому ~ / .vimrc.


Коли я встановлюю мишу = a, я не можу копіювати текст. "Копіювати" виділяється сірим кольором у меню правої кнопки миші та в меню програми.
Лі Даніел Крокер

@LeeDanielCrocker: Copyбуде сірим або зовсім не видно, якщо не буде обрано якийсь текст. Як ви вибираєте текст для копіювання?
garyjohn

Просто з мишкою. FYI, "y" чудово працює ... янь текст і копіює його на системну клавіатуру. Це просто меню, яке не працює. Якщо для миші встановлено значення "r", то меню працює, але миша включає в себе номери рядків. Так що в цілому, я можу жити з мишею = a, мені просто не забудьте тягнути замість копії.
Лі Даніел Крокер

7

У цій публікації є моя улюблена відповідь, https://coderwall.com/p/if9mda/automatically-set-paste-mode-in-vim-when-pasting-in-insert-mode

В основному, якщо ви запускаєтесь в режимі "Вставка" і використовуєте клавішу Ctrl + Shift + V або клацніть правою кнопкою миші мишкою, Vim виявляє, що це прийшов з терміналу, і автоматично встановлює режим вставки, а потім знімає його після завершення, щоб не втратити перезаписані ключі (яка не може працювати в режимі вставки, тому що вона записує необроблені дані), і ви повернетесь до "нормального" стану, коли це буде зроблено.

Для просто vim (помістити у свій .vimrc)

let &t_SI .= "\<Esc>[?2004h"
let &t_EI .= "\<Esc>[?2004l"
inoremap <special> <expr> <Esc>[200~ XTermPasteBegin()

function! XTermPasteBegin()
  set pastetoggle=<Esc>[201~
  set paste
  return ""
endfunction

Якщо ви використовуєте vim під Tmux (все ще надходить у .vimrc)

function! WrapForTmux(s)
  if !exists('$TMUX')
    return a:s
  endif

  let tmux_start = "\<Esc>Ptmux;"
  let tmux_end = "\<Esc>\\"

  return tmux_start . substitute(a:s, "\<Esc>", "\<Esc>\<Esc>", 'g') . tmux_end
endfunction

let &t_SI .= WrapForTmux("\<Esc>[?2004h")
let &t_EI .= WrapForTmux("\<Esc>[?2004l")

function! XTermPasteBegin()
  set pastetoggle=<Esc>[201~
  set paste
  return ""
endfunction

inoremap <special> <expr> <Esc>[200~ XTermPasteBegin()

Я припускаю, що один із let &t_SI .= "\<Esc>[?xxxxx"рядків виявляє ярлик клавіатури? Чи працює це для Mac, якщо враховувати різні ярлики?
сумневу1ejack

@ sum1ejack Це фактично виявлення послідовностей виходу Xterm, а не те, як вони викликалися (тобто 2004h - це вставка встань), якщо ваш термінал підтримує клавіші Xterm і передає їх Vim, він повинен добре працювати на Mac.
dragon788

О Боже мій. ти мій герой. Я набрав так: встановити nopaste стільки g'd разів.
Максвелл

3

Як запропонував romainl, у документації пояснюється, що встановлення 'paste'параметра вимикає кілька інших варіантів, і ви, безсумнівно, виявите, що швидше, ніж пізніше це стане причиною для вас проблем. З цієї причини є 'pastetoggle'варіант. Побачити:

:help 'paste'
:help 'pastetoggle'

1

Якщо щось існує, воно повинно мати своє значення. Ви повинні добре переглянути документацію vim, яка дуже корисна.

  :help 'paste'
  :help 'pastetoggle'

Прочитавши, можливо, вам захочеться цього:

" Toggle paste mode
"   (prefer this over 'pastetoggle' to echo current state)
nmap <leader>p :setlocal paste! paste?<cr>

Сподіваюсь, Ви вважаєте, що це повідомлення корисне :)


1

IIRC, коли ви вставляєте vim, він по суті вважає, що ви все самі символи ввели. Отже, якщо ввімкнено автоматичний відступ, він буде містити відступ для вас, але вставлений текст зазвичай містить відступи вже, так що відступ дійсно "заплутався". Перехід у режим вставки вимикає такі елементи, як автоматичне відступ.

Якщо вам подобається автоматичний відступ під час введення тексту, вам слід переключити його назад на нопасте після вставки. Спробуйте і зазначте, як потрібно робити всі відступи вручну в режимі вставки.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.