Cara memilih semua instance dari variabel dan mengedit nama variabel di Sublime

428

Jika saya memilih variabel (bukan sembarang string) dalam kode saya, semua contoh lain dari variabel itu mendapatkan stroke (garis putih) di sekitarnya:

masukkan deskripsi gambar di sini

Apakah ada pintasan keyboard yang memungkinkan saya memilih semua contoh variabel dan mengeditnya sekaligus?


Hal yang Saya Mencoba:

D,, Kdan Uizinkan saya memilihnya satu per satu, tetapi saya harus secara manual mengecualikan kecocokan string non-variabel:

masukkan deskripsi gambar di sini

Dan menggunakan CtrlGcukup memilih semua kecocokan string:

masukkan deskripsi gambar di sini

Jelas, Sublime mampu membedakan antara pencocokan variabel dan string. Apakah tidak ada cara untuk memilih hanya pencocokan variabel?

Oskar Persson
sumber

Jawaban:

604
  1. Masukkan kursor ke dalam variabel.

    Catatan: kuncinya adalah memulai dengan pilihan kosong. Jangan sorot; cukup letakkan kursor Anda di sana.

kursor teks pada variabel

  1. Tekan Dsesuai kebutuhan. Tidak di Mac? Gunakan CtrlD.

lebih banyak contoh variabel yang disorot

Tidak bekerja Coba lagi, pastikan untuk memulai dengan tidak ada yang dipilih .

Lebih banyak perintah:

Temukan Semua: CtrlG memilih semua kejadian sekaligus. Tidak di Mac?AltF3

Undo Selection: U langkah mundur. Tidak di Mac?CtrlU

Lompati Cepat Berikutnya: KD melompati kejadian berikutnya. Tidak di Mac?CtrlKCtrlD

Sublime Documents

Nolan Amy
sumber
14
Apa itu ⌘, bagaimana Anda melakukan ini pada keyboard non-MAC?
Bjarke Freund-Hansen
6
setidaknya di ST3 Anda dapat melakukan Ctrl-⌘-G tanpa perintah ⌘-D lainnya. Sayangnya sangat salah label dalam menu!
watsonic
30
Ini tidak menjawab pertanyaan awal OP. Dia secara khusus bertanya variable (not just any string). Ini hanya memilih semua kemunculan string.
Betjamin Richards
17
@BetjaminRichards Pastikan Anda tidak memilih (menyoroti) variabel. Cukup gerakkan kursor ke variabel dan kemudian tekan ⌘D. Kebetulan, ini adalah masalah yang saya miliki dengan jawaban MattDMo ( stackoverflow.com/a/16844924/483520 ).
Nolan Amy
2
@MuhammadUmer Apa pun yang cocok dengan kata itu, dengan mempertimbangkan batasan. Bukan pencarian variabel yang benar, tetapi jauh lebih baik daripada pencocokan string sederhana.
Nolan Amy
135

Saya tahu pertanyaannya adalah tentang Mac, tapi saya sampai di sini mencari jawaban untuk Ubuntu, jadi saya kira jawaban saya bisa berguna bagi seseorang.

Cara mudah untuk melakukannya: AltF3.

elaRosca
sumber
10
masih memilih semua yang ada di dalamnya.
user1767754
1
Jawaban ini untuk pertanyaan: stackoverflow.com/q/12162047/2270563 . Namun di sini pertanyaannya berbeda. Untuk memilih hanya variabel daripada semua kecocokan.
Ram
4
@ user1767754 Jika Anda tidak ingin memilih semua yang ada foodi dalamnya, jangan pilih yang dulu foo. Alih-alih, cukup tempatkan kursor di kata foolalu Alt-F3. Voila
Anwar
Jawaban ini salah. Ini akan memilih semua contoh foobukan hanya yang disorot.
André C. Andersen
Tidak berfungsi di KDE, jadi saya baru saja menambahkan {"keys": ["alt + d"], "command": "find_all_under"} ke file binding kunci: Preferensi >Indikasi Kunci. alt + d tampaknya tidak bertentangan dengan apa pun di sana.
user1985553
47

Meskipun banyak upaya, saya belum menemukan cara bawaan atau bantuan plugin untuk melakukan apa yang Anda coba lakukan. Saya sepenuhnya setuju bahwa itu harus dimungkinkan, karena program ini dapat membedakan foodari buffoonketika Anda pertama kali menyorotnya, tetapi tampaknya tidak ada yang tahu cara melakukannya.


Namun, berikut adalah beberapa kombo kunci yang berguna untuk memilih kata-kata dalam Sublime Text 2:

CtrlG- memilih semua kemunculan kata saat ini ( AltF3di Windows / Linux)

D- memilih turunan berikutnya dari kata saat ini ( CtrlD)

  • K, D- melewatkan instance saat ini dan melanjutkan untuk memilih yang berikutnya ( CtrlK, CtrlD)
  • U- "soft undo", kembali ke pilihan sebelumnya ( CtrlU)

E, H- menggunakan pilihan saat ini sebagai bidang "Temukan" di Temukan dan Ganti ( CtrlE, CtrlH)

MattDMo
sumber
6
Tetapi goresan hanya muncul di sekitar kemunculan nama variabel , sementara ⌘+Dtindakan pada semua kemunculan string. Sebagai contoh, jika saya sorot foo, luhur luar biasa membelai semua variabel foo, tetapi bukan string foodalam eject_buffoonfungsi saya . Namun menggunakan kombo kunci di atas, saya dipaksa untuk secara manual ⌘+Kkeluar dari string yang cocok untuk menghindari eject_bufbarnfungsi. Pasti ada cara yang lebih baik!
Nolan Amy
@Nolan - jangan ragu untuk bertanya dan melihat apakah ada yang punya saran. Salah satu solusi yang mungkin adalah memilih foo_(foo dan spasi setelahnya) atau _foo_(spasi sebelum dan sesudah) dan kemudian menggunakan ⌘-Datau Ctrl-⌘-D.
MattDMo
7
Saya benar-benar berpikir ini adalah pertanyaan yang diajukan OP. Dia secara khusus mengatakan " variabel " (bukan "wilayah teks" atau "string") dan " stroke " (tidak "menyoroti"). Dan pertanyaan ini bukan duplikat dari stackoverflow.com/questions/12162047/… - yang dikatakan "sorot pilihan". Juga, tentu saja, foosering muncul sebagai(foo) , _foo,, (foo,, dan _foo}, sehingga _foo_cukup memuaskan.
Nolan Amy
21

Ini berhasil untuk saya. Letakkan kursor Anda di awal kata yang ingin Anda ganti, lalu

CtrlK, CtrlD, CtrlD...

Itu harus memilih sebanyak kata kata yang Anda suka, maka Anda bisa mengetik penggantinya.

hobs
sumber
1
Ini adalah jawaban yang berhasil bagi saya selain untuk jawaban yang telah disebutkan. Bagus!
Akash
Ini tidak menjawab pertanyaan.
MD004
@ MD004 Bagaimana?
hobs
@ hobs Pertanyaannya adalah bagaimana "memilih semua contoh itu" sekaligus . Saya akan mengakui frasa pertanyaan dalam judul adalah ambigu, tetapi kemudian dalam pos OP menjelaskan solusi Anda dan mengatakan bahwa ini "memilih mereka satu-per-satu, tetapi saya harus secara manual mengecualikan pencocokan string non-variabel "Yang tidak memuaskan. Btw, contoh skenario di mana ini tidak memuaskan adalah ketika ada, katakanlah, 1000 kemunculan kata yang ingin Anda ganti, dalam hal ini memilihnya secara manual bukanlah suatu pilihan.
MD004
1
Ahh, begitu. Terima kasih. Sekarang saya mengerti mengapa jawaban yang diterima jauh lebih baik untuk situasi OP dan contoh 1000-kemunculan Anda.
hobs
12

Ajaibnya adalah, Anda harus mulai dengan pilihan kosong, jadi letakkan kursor Anda di depan kata / karakter yang ingin Anda pilih banyak dan tekan Ctrl+ D.

pengguna1767754
sumber
2
Ini adalah jawaban untuk variabel karakter tunggal. Untuk variabel lain, Anda bisa meletakkan kursor di mana saja di dalam variabel untuk memulai.
manish_s
Ini berfungsi untuk saya di Sublime 3 dan merupakan cara paling sederhana untuk melakukannya jika Anda ingin membatasi perubahan ke area yang lebih kecil seperti di dalam suatu fungsi yang bertentangan dengan keseluruhan file. Command-D untuk macOS, tentu saja.
Ryan H.
10

Bagi saya, ini adalah kesalahan terbesar di Sublime. Alt+ F3sulit dijangkau / diingat, dan Ctrl+ Shift+ Gtidak masuk akal mengingat Ctrl+ Dadalah "tambah instance berikutnya ke pilihan".

Tambahkan ini ke Ikatan Kunci Pengguna Anda (Preferensi> Ikatan Kunci):

{ "keys": ["ctrl+shift+d"], "command": "find_all_under" },

Sekarang Anda dapat menyorot sesuatu, tekan Ctrl+ Shift+ D, dan itu akan menambahkan setiap contoh lain dalam file ke pilihan.

Travis Heeter
sumber
1
Ini adalah satu-satunya jawaban yang benar-benar menjawab pertanyaan awal!
kmundnic
Masih memilih string dan komentar
Wassadamo
4

Ini disebutkan oleh @watsonic bahwa dalam Sublime Text 3 pada Mac OS, dimulai dengan seleksi yang kosong , hanya G( AltF3pada Windows) melakukan trik, bukan D+ Gdi Sublime Text 2.

Franklin Yu
sumber
4

Seperti kata user1767754, kuncinya di sini adalah untuk tidak membuat pilihan pada awalnya.

Cukup tempatkan kursor di dalam nama variabel, jangan klik dua kali untuk memilihnya. Untuk variabel karakter tunggal, tempatkan kursor di bagian depan atau akhir variabel untuk tidak membuat pilihan apa pun pada awalnya.

Sekarang terus tekan Cmd+ Duntuk pemilihan variabel berikutnya atau Ctrl+ Cmd+ Guntuk memilih semua variabel sekaligus. Ini secara ajaib akan memilih hanya variabel.

manish_s
sumber
0

Untuk berjaga-jaga jika ada orang lain yang tersandung pada pertanyaan ini sambil mencari cara untuk mengganti string di beberapa file, itu adalah Command+ Shift+F

Jay
sumber