posisi kursor setelah menempel di vi / vim

11

Satu hal yang selalu mengganggu saya dalam vi / vim :

Jika saya "menarik" (alias "menyalin") beberapa teks, lalu pindah ke tempat lain dalam file dan melakukan "tempel", kursor saya tetap di awal teks yang baru saja saya tempel. Ini berbeda dari apa yang dilakukan kebanyakan editor modern, yaitu meletakkan kursor di akhir teks yang saya tempel.

Misalnya, dengan asumsi "salin penyangga" berisi kata "luar biasa" yang ingin saya tempel setelah kata "an" dalam frasa:

This is an editor

Di, misalnya gedit , setelah tempel:

This is an awesome editor
                  ^ Cursor is here

Dalam vi :

This is an awesome editor
           ^ Cursor is here

Dapatkah saya mengubah vi untuk bertindak seperti (misalnya) gedit dalam hal ini?

JoelFan
sumber
Apa yang lebih aneh lagi, pada daftar dengan versi Vim saya: jika teks yang ditarik ke atas lebih dari satu baris, maka kursor dibiarkan di awal teks yang ditempelkan, jika tidak dibiarkan di akhir teks yang ditempelkan.
Alexey
maaf, setidaknya
Alexey

Jawaban:

12

Dalam vim, gunakan gpdan gPbukannya pdan Puntuk meninggalkan kursor setelah teks yang disisipkan. Jika Anda ingin menukar ikatan, masukkan baris berikut di .vimrc:

noremap p gp
noremap P gP
noremap gp p
noremap gP P

Anehnya, di vim, pdan Pmeninggalkan kursor pada karakter yang disisipkan terakhir untuk buffer karakter, bahkan dalam mode yang kompatibel.

Saya tidak tahu bagaimana cara mengubahnya di versi vi lainnya.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
1
Saya pikir "vi" biasanya benar-benar "vim" di sebagian besar distro, kan?
JoelFan
@ JoelFan: Kebanyakan distro Linux yang tidak tertanam, mungkin. Di tempat lain, tidak. Jika Anda baik-baik saja dengan solusi vim saja, jangan membawa vi ke dalam permainan: 99% dari konfigurasi vim tidak dalam vi dasar.
Gilles 'SO- stop being evil'
Wah tentang "nvi"? Saya bingung tentang semua perbedaan vi. Saya kebanyakan diinvestasikan dalam debian dan ubuntu
JoelFan
1
@ JoelFan: nvi adalah vi yang cukup mendasar, bertujuan untuk kompatibilitas dengan implementasi asli dan tidak lebih. Jika Anda hanya tertarik pada instalasi desktop atau server tempat Anda dapat menginstal program dengan mudah, Anda dapat menganggap vim tersedia. Keakraban dengan implementasi yang lebih rendah hanya berguna pada server yang terkunci dan perangkat yang disematkan.
Gilles 'SO- stop being evil'
1
Saya menggunakan "vi" kebanyakan untuk server, di mana saya dapat menginstal sesuatu, ya
JoelFan
0

Saya cukup yakin ini sesuai desain. Jika Anda menempel menggunakan "p" (huruf kecil P), itu seharusnya menempel setelah posisi atau garis saat ini. Namun, jika Anda menempel menggunakan "P" (huruf P), maka itu ditempelkan sebelum posisi atau garis saat ini. Jika perilaku yang Anda inginkan adalah kursor berada di akhir teks yang baru Anda tempel, coba biasakan menggunakan "P" alih-alih "p".

Saya yakin jika Anda menggali cukup dalam, Anda bisa menemukan resep vim untuk diletakkan di .vimrc Anda yang akan selalu memindahkan kursor ke akhir pasta Anda, bahkan jika Anda menggunakan "p".

SethG
sumber
2
Pmeninggalkan kursor di awal teks yang ditempel di vi (setidaknya di nvi dan per POSIX).
Gilles 'SANGAT berhenti menjadi jahat'
p dan P mempengaruhi posisi insert sehubungan dengan teks di sekitarnya. mereka tidak mempengaruhi posisi kursor itu sendiri yang selalu pada posisi yang sama relatif terhadap teks yang dimasukkan.
eMBee