Vim: Pindahkan kursor ke posisi terakhirnya

251

Apakah mungkin dalam (g) Vim untuk memindahkan kursor ke posisi sebelumnya (saat dalam mode normal)? Sesuatu untuk berputar-putar dalam daftar posisi kursor sebelumnya akan ideal. Tetapi juga hanya untuk beralih ke lokasi terakhir sudah cukup (sesuatu seperti cd -di bash dengan direktori).

Ini sedikit demonstrasi:

line |1| <- cursor position
line 2
line 3
line 4

Dan misalkan saya lakukan 2j, begini caranya sekarang:

line 1
line 2
line |3| <- cursor position
line 4

Sekarang saya ingin menekan sesuatu (selain yang 2kjelas) untuk kembali ke posisi pertama dan mungkin ke posisi sebelumnya.

Idan K
sumber

Jawaban:

409

Cara tercepat adalah dengan memukul:

''

(dua apostrof) atau:

``

(dua backticks). Perhatikan bahwa perbedaannya adalah bahwa backtick pergi ke lokasi yang sama pada baris, sedangkan tanda kutip pergi ke awal baris. Pada keyboard Inggris, apostrof lebih mudah diakses, jadi saya cenderung menggunakannya. Ada banyak tanda berguna seperti ini, lihat :help mark-motions.

Untuk beberapa gerakan lain ( 2jmenurut saya), ada juga daftar lompatan yang memungkinkan Anda menavigasi bolak-balik di antara sejumlah gerakan. CtrlOdan CtrlIlakukan navigasi ini, tetapi lihat :help jump-motionsuntuk informasi lebih lanjut.

DrAl
sumber
3
sebenarnya tidak ada yang berperilaku persis seperti yang saya harapkan tetapi saya kira tidak ada hal lain yang tersedia.
Idan K
1
@Idan K - bagaimana `` (double backtick) tidak memberi Anda apa yang Anda inginkan? (Kecuali untuk aspek "sejarah").
Dan
3
@ Dan: jika saya mencobanya pada contoh di atas maka saya melihat perilaku ini: Saya berdiri di baris 1, lalu tekan jdua kali berturut-turut (sekarang saya di baris 3) kemudian menekan backtick ganda sampai ke saya baris 1 dan saya berharap untuk pindah ke jalur 2.
Idan K
2
Saya pikir Anda harus pindah (2j atau sesuatu), kemudian mengedit (atau melakukan tindakan apa pun untuk memodifikasi teks) kemudian gunakan '' untuk kembali ke posisi sebelumnya. Itu tidak logis untuk menggunakan "2j", tidak melakukan apa pun dan kembali ke posisi sebelumnya
Asenar
8
@IdanK Jumplist hanya diperbarui (yaitu posisi kursor sebelumnya direkam) ketika Anda menggunakan "lompatan," yang sebenarnya (saya pikir) perintah gerak apa pun selain i j k lgerakan. (Daftar lengkap, dari dokumen bantuan, adalah "'"', "`", "G", "/", "?", n", "N", "%", "(", ")", "[[", "]]", "{", "}", ":s", ":tag", "L", "M", H" and the commands that start editing a new file.) Jadi tidak, ini tidak akan "membatalkan" 2jatau serupa, tetapi itu akan bekerja untuk hampir semua hal lain. Ini masuk akal karena 2jet al. sudah memiliki inversi sederhana ( 2k, dll), sedangkan yang lain tidak.
Kyle Strand
61

Anda juga dapat menggunakan g;dan g,untuk bergerak maju dan mundur dalam daftar lokasi edit sebelumnya .

Di Keyboard Non-AS

Pada tata letak keyboard Swiss dan Jerman saya, mengetik secara ;tidak nyaman mengharuskan menggunakan Shifttombol. Oleh karena itu, saya didefinisikan g-sebagai alias yang lebih nyaman untuk g;di $MYVIMRC:

" Map g- as an alias for g;
nnoremap g- g;
Serge Stroobandt
sumber
Meskipun saya sangat suka ini, hanya akan melompat di antara perubahan dalam satu file. Jika Anda mengedit buffer 1, kemudian mengedit buffer 2, itu tidak akan melompat kembali ke buffer 1.
thouliha
39

Mengapa tidak ada yang menemukan masalah dengan jawaban DrAl ? The ''atau ``tidak akan memecahkan masalah asli posting ini! Kedua perintah ini tidak akan berfungsi untuk beberapa gerakan kursor seperti 2j, setidaknya untuk saya. Ini akan membuat pemula untuk lebih bingung.

Perilaku ''atau ``, dan CtrlIatau CtrlOdidasarkan pada daftar lompatan. The 2jtidak akan menyimpan perubahan posisi ke dalam daftar lompatan sehingga perintah ini tidak akan bekerja untuk 2j.

''atau ``beralih antara posisi terakhir dan posisi saat ini. CtrlIdan CtrlObekerja melalui sejarah daftar lompatan.

g;dan g,bergerak melalui posisi edit, yang juga sangat sering digunakan.

ZhaoGang
sumber
1
Terima kasih telah menunjukkan ini! Saya ingin tahu, apa yang akan bekerja untuk kasus-kasus seperti 2jitu?
33

Kanan dari bantuan (: bantuan lompatan):

: ju [mps] Cetak daftar lompatan (bukan perintah gerak). {not in Vi} {tidak tersedia tanpa | + jumplist | fitur}

                          *jumplist*

Lompatan diingat dalam daftar lompatan. Dengan perintah CTRL-O dan CTRL-I Anda dapat pergi ke posisi kursor sebelum melompat yang lebih lama, dan kembali lagi. Dengan demikian Anda dapat naik dan turun daftar. Ada daftar lompatan terpisah untuk setiap jendela. Jumlah maksimum entri ditetapkan pada 100. {tidak tersedia tanpa | + jumplist | fitur}

Facundo Casco
sumber