Mengkonfigurasi VIM untuk menyalin dan menempelkan pintasan keyboard dari buffer sistem di Ubuntu?

14

Bagaimana cara mengkonfigurasi VIM untuk menggunakan Ctrl- cuntuk menyalin dan Ctrl- vmenempel dari buffer sistem di Ubuntu?

wonea
sumber
Bolehkah saya menyarankan menggunakan Cream? cream.sourceforge.net Ini adalah varian dari vim yang dirancang khusus untuk pengguna yang tidak merasa nyaman dengan cara kerja vim.
Benteng

Jawaban:

16

Perilaku default di MS Windows: -

Ini adalah excert dari file mswin.vim: -

" CTRL-X and SHIFT-Del are Cut
vnoremap <C-X> "+x
vnoremap <S-Del> "+x

" CTRL-C and CTRL-Insert are Copy
vnoremap <C-C> "+y
vnoremap <C-Insert> "+y

" CTRL-V and SHIFT-Insert are Paste
map <C-V>       "+gP
map <S-Insert>      "+gP

cmap <C-V>      <C-R>+
cmap <S-Insert>     <C-R>+

" Pasting blockwise and linewise selections is not possible in Insert and
" Visual mode without the +virtualedit feature.  They are pasted as if they
" were characterwise instead.
" Uses the paste.vim autoload script.

exe 'inoremap <script> <C-V>' paste#paste_cmd['i']
exe 'vnoremap <script> <C-V>' paste#paste_cmd['v']

imap <S-Insert>     <C-V>
vmap <S-Insert>     <C-V>

" Use CTRL-Q to do what CTRL-V used to do
noremap <C-Q>       <C-V>

dan script paste.vim yang diperlukan untuk mode blok cut / paste: -

    " Vim support file to help with paste mappings and menus
" Maintainer:   Bram Moolenaar <[email protected]>
" Last Change:  2006 Jun 23

" Define the string to use for items that are present both in Edit, Popup and
" Toolbar menu.  Also used in mswin.vim and macmap.vim.

" Pasting blockwise and linewise selections is not possible in Insert and
" Visual mode without the +virtualedit feature.  They are pasted as if they
" were characterwise instead.  Add to that some tricks to leave the cursor in
" the right position, also for "gi".
if has("virtualedit")
  let paste#paste_cmd = {'n': ":call paste#Paste()<CR>"}
  let paste#paste_cmd['v'] = '"-c<Esc>' . paste#paste_cmd['n']
  let paste#paste_cmd['i'] = 'x<BS><Esc>' . paste#paste_cmd['n'] . 'gi'

  func! paste#Paste()
    let ove = &ve
    set ve=all
    normal! `^
    if @+ != ''
      normal! "+gP
    endif
    let c = col(".")
    normal! i
    if col(".") < c " compensate for i<ESC> moving the cursor left
      normal! l
    endif
    let &ve = ove
  endfunc
else
  let paste#paste_cmd = {'n': "\"=@+.'xy'<CR>gPFx\"_2x"}
  let paste#paste_cmd['v'] = '"-c<Esc>gix<Esc>' . paste#paste_cmd['n'] . '"_x'
  let paste#paste_cmd['i'] = 'x<Esc>' . paste#paste_cmd['n'] . '"_s'
endi

sumber
3
Untuk pengguna windows yang secara tidak sengaja SEO di sini (OP adalah Ubuntu), tambahkan source $VIMRUNTIME/mswin.vimdi bagian atas file _vimrc Anda. Adakah yang funky yang mencegah Anda untuk berhasil memasukkan file di Linux juga?
ruffin
1
@ruffin Memeriksa sumber yang akan Anda lihat jika pernyataan untuk UNIX, jadi pembuatnya juga mempertimbangkan penggunaan mswin.vimLinux di bawahnya.
RoliSoft
Pengaturan C-Vuntuk menempelkan akan memecah mode entri karakter khusus: vim.wikia.com/wiki/…
g33kz0r
0

Ini hanya minimal, dengan asumsi sebagian besar pengaturan default **:

:behave mswin
:set clipboard=unnamedplus
:smap <Del> <C-g>"_d
:smap <C-c> <C-g>y
:smap <C-x> <C-g>x
:imap <C-v> <Esc>pi
:smap <C-v> <C-g>p
:smap <Tab> <C-g>1> 
:smap <S-Tab> <C-g>1<
  • baris 1: membuat shift + panah memilih teks (dan melakukan lebih banyak *)

  • baris 2: menjadikan "+ (dan" *) register default (gui / papan klip istilah)

  • baris 3,4,5,6: membuat Ctrl-x / c / v Potong / Salin dan Tempel

  • baris 7,8: membuat pilihan indent / outdent TAB / SHIFT + TAB

Perhatian: *** [: set] ting dapat mengubah perilaku ini dan bahwa banyak penyesuaian mungkin diperlukan untuk memenuhi kebutuhan Anda, seperti yang saya katakan, minimal. * [: behave] mengubah banyak ting [: set] membaca dokumen.

osirisgothra
sumber
0

Peta Ctrl-V untuk menjalankan perintah sistem yang mengambil clipboard sistem dan melemparkannya ke dalam register, dan menempelkannya ke layar di bawah kursor:

vmap <C-c> y:call system("xclip -i -selection clipboard", getreg("\""))<CR>:call system("xclip -i", getreg("\""))<CR>
nmap <C-v> :call setreg("\"",system("xclip -o -selection clipboard"))<CR>p

Sumber: http://vim.wikia.com/wiki/In_line_copy_and_paste_to_system_clipboard

Eric Leschinski
sumber
1
Ini tidak perlu rumit. Anda dapat memetakan ke "+ y dan" + p
FliiFe