بسم الله الرحمن الرحيم

Pendahuluan

Saya memerlukan fungsi dimana setiap file yang sudah pernah di buka, kemudian saya meninggalkan posisi cursor pada baris dan kolom tertentu, maka saat file tersebut dibuka kembali, saya menginginkan cursor masih berada pada posisi yang sama.

Hal ini dengan mudah dapat dilakukan oleh plugin bernama:

  1. restore_view.vim
  2. restoreview

This is plugin for automatically restore one file’s cursor position and folding information after restart vim.

Permasalahan

Saya menggunakan plugin lightline untuk menghandle statusline.

Nah, kedua plugin ini pasti menggunakan :loadview untuk me-load folding secara ototmatis ketika file dibuka.

Dampak dari penggunaan :loadview terhadap lightline adalah, statusline active tidak dapat berpindah secara otomatis.

Apabila terdapat dua buffer, maka statusline yang aktif hanya buffer yang terakhir. Sedangkan buffer sebelumnya menjadi inactive.

Maka dari itu saya memilih untuk tidak menggunakan kedua plugin tersebut. Karena fitur yang saya perlukan hanya “restore cursor position”.

Pemecahan Masalah

Cukup tambahkan konfigurasi berikut ini pada .vimrc.

Kita akan menggunakan bantuan viminfo agar dapat mengingat marks.

Tanda " akan mengingat posisi cursor di dalam buffer saat kita keluar (delete buffer/keluar vim).

FILE$HOME/.vimrc
1
2
3
4
5
" restore cursor position when opening file
autocmd BufReadPost *
    \ if line("'\"") > 1 && line("'\"") <= line("$") |
    \   execute "normal! g`\"" |
    \ endif

Kira-kira begini penjelasannya,

Jika tanda " mengandung nilai X line number lebih dari 1 dan tidak lebih dari line number dari baris terakhir di dalam file, maka posisi cursor akan di bawa ke baris X tersebut.

Nah, dengan begini, cursor akan tetap berada pada posisi terakhir ketika file atau buffer ditutup.


gambar_1

Gambar 1 - NeoVim (kiri), Vim (kanan), Posisi kursor berada di baris 59

Kalau teman-teman menggunakan Vim, kalian dapat melihan informasi yang disimpan pada .viminfo.

Kalau teman-teman menggunakan NeoVim, kalian dapat melihat informasi yang disimpan pada ShaDa File yang berada di ~/.local/share/nvim/shada/main.shada.

gambar_2

Gambar 2 - Data disimpan pada ShaDa file di NeoVim (kiri), Data disimpan pada .viminfo pada Vim (kanan)

Pertanyaan

Apa itu ShaDa File?

If you exit Vim and later start it again, you would normally lose a lot of information.

The ShaDa file can be used to remember that information, which enables you to continue where you left off. Its name is the abbreviation of SHAred DAta because it is used for sharing data between Neovim sessions.

Referensi

  1. github.com/mhinz/vim-galore#restore-cursor-position-when-opening-file
    Diakses tanggal: 2020/03/27

  2. StackOverflow - How to make vim restore last cursor position for CURRENT buffer?
    Diakses tanggal: 2020/07/11

  3. neovim.io/doc/user/starting.html#shada
    Diakses tanggal: 2020/07/11

  4. vim.fandom.com/wiki/Using_marks
    Diakses tanggal: 2020/07/11


Penulis

bandithijo

My journey kicks off from reading textbooks as a former Medical Student to digging bugs as a Software Engineer – a delightful rollercoaster of career twists. Embracing failure with the grace of a Cat avoiding water, I've seamlessly transitioned from Stethoscope to Keyboard. Armed with ability for learning and adapting faster than a Heart Beat, I'm on a mission to turn Code into a Product.

- Rizqi Nur Assyaufi

d98d8237fef8f1017d0be931b6e291341cbe6ca8