Her zaman kullanın: macun ayarlayın, İyi bir fikir mi?


19

Terminal vim'de pano verilerinin yapıştırılması genellikle kod girintisini bozar. :set pasteGirintiyi kullanıp kullanmadığımı biliyordum kırık değil. Yine de, verileri yapıştırdıktan sonra :set nopastetekrar yapmalıyım ? Ya ben yapmazsam, hangi problem gelir?


Kendin için denemeye ne dersin? Veya belgeleri mi okuyorsunuz ?
Haziran'da romainl

1
Ayrıca, "Kodu terminal penceresine vim'e yapıştırma" yanıtımdaki "Basamalı Yapıştır Modu" konusuna da bakın stackoverflow.com/a/7053522/754997 . Terminal öykünücünüz destekliyorsa, terminale metin yapıştırdığınızda Vim'e yapıştırma moduna otomatik olarak geçmesini / çıkmasını söylemesi için ayarlama yapabilirsiniz.
Chris Page

1
@romainl Her iki setin de her zaman set macunu (+ - nopaste) ve 2) rtfm-ing (OP gibi düşük veya orta seviye kullanıcı olarak) kullanmanın olumsuz sonuçları olup olmadığını görmeye çalışmayı ve beklemeyi oldukça makul buluyorum. , seçeneklerle ilgili deneyim sahibi olanlara sormaktan daha az faydalıdır. Burada sormak daha akıllı bir yaklaşım gibi görünüyor ve bunu belgelemek başkalarına yardımcı olacaktır.
belacqua

Yanıtlar:


5

Diğerlerinin yazdığı gibi, 'yapıştırma' setinden ayrılmak istemezsiniz. Sadece iyi bir terminal emülatörü ve düzgün bir şekilde derlenmiş ve yapılandırılmış bir şekilde vim, 'yapıştır'ı değiştirmeniz gerekmediğini belirtmek istedim. Xterm veya GNOME Terminal gibi iyi bir terminal emülatörüne, X11 özelliğine sahip vim'e ve 'fare' seçeneğinin 'a' olarak ayarlanmış olması gerekir. Daha sonra vimfareyle yapıştırdığınızda "bilecek" ve sizin için "yapıştır" seçeneğini etkin bir şekilde ayarlayıp kaldıracaktır.

vimX11 özelliğine sahip olmanın bir yolu gvim, -vseçenekle çalıştırmak veya bir takma ad oluşturmaktır,

alias vim='gvim -v'

Sonra koy

set mouse=a

~ / .vimrc.


Mouse = a ayarladığımda, metni kopyalayamıyorum. "Kopyala" seçeneği, sağ tıklama menüsünde ve uygulama menüsünde grileşir.
Lee Daniel Crocker

@LeeDanielCrocker: CopyBazı metinler seçilmedikçe grileşir veya hiç görünmez. Kopyalanacak metni nasıl seçiyorsunuz?
garyjohn

Sadece fare ile. Bilginize, "y" iyi çalışıyor ... metni sorar ve sistem klavyesine kopyalar. Sadece çalışmayan menüler. Fare "r" olarak ayarlanırsa, menüler çalışır, ancak fare satır numaralarını içerir. Sonuç olarak, mouse = a ile yaşayabilirim, sadece kopyalamak yerine çekmeyi hatırlamak zorundayım.
Lee Daniel Crocker

7

Bu gönderi en sevdiğim cevaba sahip, https://coderwall.com/p/if9mda/automatically-set-paste-mode-in-vim-when-pasting-in-insert-mode

Temel olarak Ekle modunda başlar ve farenizle Ctrl + Shift + V veya sağ tıklama macunu kullanırsanız, Vim bunun bir terminalden geldiğini algılar ve otomatik olarak yapıştırma modunu ayarlar, sonra bir kez bitirir, böylece yeniden eşlenen anahtarları kaybetmezsiniz (ham veri yazdığı için yapıştırma modunda çalışamaz) ve işiniz bittiğinde tekrar "aklı başında" duruma geri dönersiniz.

Sadece vim için (.vimrc'nize koyun)

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'i Tmux altında kullanıyorsanız (yine de .vimrc'ye girer)

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"Satırlardan birinin klavye macunu kısayolunu algıladığını varsayıyorum ? Bu farklı kısayol göz önüne alındığında mac için de işe yarıyor mu?
doub1ejack

@ doub1ejack Bunlar, terminaliniz Xterm anahtar kodlarını desteklediği ve Mac'te sorunsuz çalışması için Vim'e aktardığı sürece, nasıl adlandırıldıklarını (yani 2004h bir macun başlangıcı) değil, Xterm kaçış dizilerini algılıyor.
dragon788

Aman Tanrım. kahramanımsın. Ben öyle yazdım: nopaste'yi birçok g'd kez ayarlayın.
maxwell

3

Romainl'nin önerdiği gibi, belgeler 'paste'seçeneği ayarlamanın diğer birkaç seçeneği devre dışı bıraktığını açıklar ve kesinlikle daha sonradan sizin için sorunlara yol açacağını göreceksiniz. Bu nedenle bir 'pastetoggle'seçenek var. Görmek:

:help 'paste'
:help 'pastetoggle'

1

Eğer bir şey varsa, anlamı olmalı. Çok yararlı olan vim belgelerine iyi bir göz atmalısınız.

  :help 'paste'
  :help 'pastetoggle'

Bir kez okuduktan sonra şunu isteyebilirsiniz:

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

Umarım bu gönderiyi faydalı bulursunuz :)


1

Vim'e yapıştırdığınızda IIRC, aslında tüm bu karakterleri kendiniz yazdığınızı düşünüyor. Bu nedenle, otomatik girinti açıksa, sizin için bir şeyler girintili olacaktır, ancak yapıştırılan metin genellikle zaten girinti içerir, bu nedenle girinti gerçekten "dağıtılır". Yapıştırma moduna geçmek otomatik girinti gibi öğeleri kapatır.

Yazarken otomatik girintiyi seviyorsanız, yapıştırma işlemini tamamladıktan sonra tekrar nopaste olarak değiştirmelisiniz. Deneyin ve yapıştırma modunda tüm girintileri manuel olarak nasıl yapmanız gerektiğini not edin.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.