GNU/Linux >> Belajar Linux >  >> Linux

Apakah Mungkin Menemukan Vim/tmux Yang Filenya Terbuka?

Saya menggunakan tmux di tempat kerja sebagai IDE saya. Saya juga menjalankan vim dalam berbagai panel tmux dan akan cukup sering menjadi latar belakang proses (atau sebagai alternatif saya hanya menutup jendela – saya telah mengonfigurasi vim untuk tidak menghapus buffer terbuka saat jendela ditutup). Sekarang saya punya masalah, karena file yang ingin saya edit terbuka di salah satu sesi vim saya yang lain tetapi saya tidak tahu yang mana.

Apakah mungkin untuk mengetahui yang mana, tanpa melalui semua jendela dan panel saya secara manual? Dalam kasus khusus saya, saya tahu bahwa saya tidak mengeditnya dengan vim ~/myfile.txt karena ps aux | grep myfile.txt tidak mengembalikan apa pun.

Jawaban yang Diterima:

Itu tidak memberitahuku segalanya , tapi saya menggunakan fuser ~/.myfile.txt.swp yang memberi saya PID sesi vim. Menjalankan ps aux | grep <PID> Saya dapat mengetahui sesi vim mana yang saya gunakan, yang memberi saya petunjuk tentang jendela mana saya membukanya.

Berkat inspirasi Giles dan sedikit ketekunan dan keberuntungan, saya mendapatkan perintah berikut:

⚘ (FNAME="/tmp/.fnord.txt.swp"; tmux switch -t $(tmux list-panes -a -F '#{session_name}:#{window_index}.#{pane_index} #{pane_tty}' | grep $(ps -o tty= -p $(lsof -t $FNAME))$ | awk '{ print $1 }'))

Untuk menjelaskan fungsinya:

(FNAME="/tmp/.fnord.txt.swp";

Ini membuat subkulit dan menyetel FNAME sebagai variabel lingkungan. Sebenarnya tidak perlu – Anda bisa mengganti $FNAME dengan nama file sendiri, tetapi itu membuat pengeditan menjadi lebih mudah. Sekarang, bekerja dari dalam ke luar:

lsof -t $FNAME

Ini menghasilkan hanya PID dari proses yang membuka file.

ps -o tty= -p $(...)

Ini menghasilkan pts dari PID yang kami temukan menggunakan lsof .

tmux list-panes -a -F '#{session_name}:#{window_index}.#{pane_index} #{pane_tty}'

Ini menghasilkan daftar panel entri seperti session:0.1 /dev/pts/1 . Bagian pertama adalah format yang disukai tmux untuk target, dan bagian kedua adalah pts

| grep $(...)$

Ini memfilter daftar panel kami – $ . yang tertinggal jadi itu hanya akan cocok dengan satu kita peduli. Saya menemukan itu secara tidak sengaja karena saya memiliki pts/2 dan pts/22 , jadi ada dua cocok, ups!

| awk '{ print $1 }'

Ini menghasilkan session:0.1 bagian dari output panel, yang cocok untuk diteruskan ke tmux switch -t .

Ini harus bekerja di seluruh sesi serta panel, sehingga memfokuskan panel yang berisi file swap Anda.

Terkait:Hapus baris header tambahan dari file, kecuali untuk baris pertama?
Linux
  1. Cara Menemukan File Terlama Di Pohon Direktori Di Linux

  2. Bagaimana Cara Menghapus File Yang Nama Filenya Memiliki Karakter Non-cetak?

  3. Alternatif Untuk 'dd' Yang Tidak Memotong File?

  1. Bagaimana Menemukan Jenis File Img Dan Memasangnya?

  2. Bagaimana Perintah Xdg-open Mengetahui Aplikasi Yang Digunakan Untuk Membuka File?

  3. Pergi ke Awal atau Akhir File di Vim [Kiat Singkat]

  1. Apa perintah unix untuk mengetahui file yang dapat dieksekusi yang sesuai dengan perintah yang diberikan?

  2. Bagaimana menemukan pengelola file default?

  3. Bagaimana cara memuat ulang file konfigurasi tmux yang telah menentukan beberapa sesi?