Cara menonaktifkan "cd otomatis" di zsh dengan oh-my-zsh

29

Googling ini tidak menunjukkan hasil apa pun. Inilah yang saya maksud: Saya memiliki file biner bernama xdi jalur saya (bukan folder saat ini, tetapi di dalam PATH), dan juga folder dengan nama yang sama di direktori kerja saat ini. Jika saya mengetik x, saya ingin biner dieksekusi, tetapi ia memasukkannya ke dalam folder itu. Bagaimana cara saya memperbaikinya?

Gabi Purcaru
sumber

Jawaban:

46

Tiga pertanyaan itu dalam satu ;-)

Opsi AUTO_CD dan bagaimana menemukannya

Pertama-tama opsi yang Anda cari adalah AUTO_CD. Anda dapat dengan mudah menemukannya dengan melihat ke atas man zshoptions. Gunakan fungsi pencarian pager Anda, biasanya Anda menekan /dan memasukkan kata kunci. Dengan nAnda melompat ke kejadian berikutnya. Ini akan memunculkan berikut ini:

[..]
   Changing Directories
       AUTO_CD (-J)
              If  a  command is issued that can't be executed as a normal command, and the command is the name of a directory, perform the cd command to that directory.
[..]

Opsi dapat dibatalkan menggunakan unsetopt AUTO_CD.

Mematikan dengan benar

Anda menggunakan oh-my-zsh yang digambarkan sebagai

"Kerangka kerja berbasis komunitas untuk mengelola konfigurasi zsh Anda" Termasuk 120+ plugin opsional (rail, git, OSX, hub, capistrano, brew, semut, macports, dll), ...

Jadi hal selanjutnya adalah mencari tahu, cara mengaktifkan / menonaktifkan opsi sesuai dengan framework.

File readme.textile menyatakan bahwa cara yang lebih disukai untuk mengaktifkan / menonaktifkan plugins adalah entri di .zshrc Anda: plugins=(git osx ruby) Cari tahu plugin mana yang menggunakan opsi AUTO_CD. Seperti yang ditemukan dari manual itu dapat dipanggil melalui -J switch atau AUTO_CD. Karena oh-my-zsh tersedia di github, mencarinya akan muncul file lib/theme-and-appearance.zsh. Jika Anda tidak ingin menonaktifkan seluruh plugin "tema-dan-penampilan", masukkan a unsetopt AUTO_CD.zshrc Anda. Jangan memodifikasi file oh-my-zsh secara langsung, karena jika Anda memperbarui kerangka kerja, perubahan Anda akan hilang.

Mengapa executable tidak dipanggil secara langsung

Pertanyaan ketiga Anda adalah bagaimana mengeksekusi biner secara langsung: Anda harus mengeksekusi file biner Anda melalui path, misalnya dengan awalan ./seperti pada ./do-something. Ini adalah semacam fitur keamanan dan tidak boleh diubah. enggan mencolokkan stik USB, memasangnya dan melihatnya ls. Jika ada executable yang dipanggil lsyang menghapus direktori home Anda, semuanya akan hilang, karena ini akan menimpa urutan $ PATH Anda.

Jika Anda memiliki perintah yang Anda panggil berulang kali, mengatur alias di .zshrc Anda akan menjadi solusi umum.

echox
sumber
4
Terima kasih banyak! Apa yang saya butuhkan adalah unsetopt auto_cdbaris (saya secara eksplisit menyebutkan bahwa executable berada di jalur saya; namun, penjelasannya mungkin membantu pengguna lain mencari tahu).
Gabi Purcaru
Terima kasih atas jawaban yang saksama dan memberikan perincian tentang bagaimana Anda menemukan informasi (sehingga membantu orang lain menemukan informasi seperti ini di masa mendatang).
trailing slash
2
Paragraf terakhir Anda tidak masuk akal. OP bertanya tentang biner dalam PATHvariabel lingkungan mereka yang ingin mereka diutamakan daripada autocd. Ini tidak ada hubungannya dengan ketidakmampuan skrip shell untuk menjalankan executable dari path tanpa menentukan salah satu ./atau /.
Qix
Tautan pertama ke readme tidak berfungsi. Ini dia. Lebih jauh, libdirektori OMZ tidak ada hubungannya dengan. pluginsMengenai pertanyaan dan seperti yang Anda katakan, perintah yang benar adalah unsetopt.
Timo