Bagaimana saya bisa menghapus slash atau kata dalam zsh?

18

Perilaku bash

Saya baru saja pindah dari bashke zsh. Pada bash, saya memiliki baris berikut di ~/.inputrc.

"\e\C-?": unix-filename-rubout

Karenanya, Alt+ Backspaceakan menghapus kembali ke garis miring sebelumnya, yang berguna untuk mengubah jalur yang dimasukkan.

Selain itu, bashdefault untuk membuat Ctrl+ w delete ke ruang sebelumnya, yang berguna untuk menghapus seluruh argumen (dengan asumsi mereka tidak memiliki spasi).

Perilaku zsh

Dalam zsh, baik Alt+ Backspacedan Ctrl+ wmelakukan hal yang sama. Mereka berdua menghapus kata sebelumnya, tetapi mereka terlalu liberal dengan apa yang merupakan kata istirahat, menghapus hingga sebelumnya -atau _. Apakah ada cara untuk membuat zshperilaku serupa bash? Jika ini penting, saya telah oh-my-zshmenginstal.

Sparhawk
sumber
1
Apakah Anda ingin mengubah definisi zsh tentang apa yang merupakan kata? Jika demikian: unix.stackexchange.com/questions/48577/… Atau Anda ingin mendefinisikan perintah baru dengan definisi kata yang berbeda?
Gilles 'SO- berhenti menjadi jahat'
@Gilles Saya kira kombinasi keduanya. Dalam bash, saya akan menggunakan dua perintah yang berbeda secara teratur: yaitu menghapus yang terakhir /dan menghapus yang terakhir ``. Mereka memiliki fungsi yang berbeda.
Sparhawk
1
@Gilles Jadi ya, tautan itu berfungsi untuk bashperilaku Alt + Backspace saya-suka, tapi saya masih suka bashperilaku Ctrl + w seperti (berbeda) -yaitu, hapus ke ruang terakhir.
Sparhawk

Jawaban:

14

Sunting: Hasil google berikutnya setelah pertanyaan Anda adalah ini dengan solusi yang sama: zsh: membuat ALT + BACKSPACE berhenti di karakter non-alfanumerik

Jawaban ini disediakan oleh /nick FoHdari #zsh di freenode.

backward-kill-dir () {
    local WORDCHARS=${WORDCHARS/\/}
    zle backward-kill-word
}
zle -N backward-kill-dir
bindkey '^[^?' backward-kill-dir

Dengan cara ini Anda dapat menggunakan ctrl+wuntuk menghapus kata (dalam istilah vim) dan alt+bkspcuntuk menghapus kata

JunkMechanic
sumber
Cemerlang! Terima kasih telah meluangkan waktu untuk menyelidiki dan menjawab.
Sparhawk
Re Google: kecuali saya menanyakan pertanyaan saya sembilan bulan yang lalu, dan mereka menanyakannya kurang dari sebulan yang lalu.
Sparhawk
1
waktu hanyalah seorang pembangun sosial! .. tapi serius, poin yang adil.
JunkMechanic
19

Pertanyaan serupa diajukan di sini: zsh: berhenti mundur-kill-word pada pembatas direktori

dan solusi yang bisa diterapkan diberikan: tambahkan pengaturan ini ke zshrc Anda:

autoload -U select-word-style
select-word-style bash
Thomas Dickey
sumber
Terima kasih atas jawabannya. Namun, tidak satu pun dari jawaban itu yang cocok untuk saya. (Secara khusus, yang Anda kutip tidak membuat perubahan.) Mungkin, itu karena saya telah oh-my-zshmenginstal. Bagaimanapun, ini tampaknya tidak membahas dua fungsi berbeda dan ikatan kunci sesuai pertanyaan saya. (Dan jika pertanyaan saya adalah apakah itu penipuan, maka itu harus ditutup sebagai penipuan. Yang bukan.)
Sparhawk
1
Anda perlu mengubah variabel WORDCHARS. Di zsh itu mudahvared WORDCHARS
Jshura
Itu hanya akan menjadi duplikat jika kami mencocokkannya dengan pertanyaan yang dijawab di forum ini .
Thomas Dickey
@ThomasDickey Oh ya, maaf, saya tidak melihat saya menukar situs SE.
Sparhawk
@Jshura Tidak, sesuai pertanyaan, saya ingin dua fungsi berbeda, yang dimungkinkan pada bash.
Sparhawk
5

Memperluas jawaban JunkMechanic , saya menginginkan itu

  • pintasan zsh yang ada ( CtrlW, Ctrldan Ctrl) berfungsi seperti pada default zsh
  • Altpintas berbasis ( AltW, Altdan Alt) bekerja sama, tapi "berbutir halus", misalnya hingga yang terdekat/

Inilah yang saya gunakan sekarang:

# Alt+Backspace
backward-kill-dir () {
    local WORDCHARS=${WORDCHARS/\/}
    zle backward-kill-word
}
zle -N backward-kill-dir
bindkey '^[^?' backward-kill-dir


# Alt+Left
backward-word-dir () {
    local WORDCHARS=${WORDCHARS/\/}
    zle backward-word
}
zle -N backward-word-dir
bindkey "^[[1;3D" backward-word-dir

# Alt+Right
forward-word-dir () {
    local WORDCHARS=${WORDCHARS/\/}
    zle forward-word
}
zle -N forward-word-dir
bindkey "^[[1;3C" forward-word-dir
nh2
sumber