# \<C-W\> deletes all texts up to the beginning, not a word, in REPL

**URL:** https://discourse.julialang.org/t/c-w-deletes-all-texts-up-to-the-beginning-not-a-word-in-repl/56662
**Category:** General Usage
**Tags:** repl
**Created:** [March 7, 2021, 8:28am UTC](https://discourse.julialang.org/t/c-w-deletes-all-texts-up-to-the-beginning-not-a-word-in-repl/56662 "2021-03-07T08:28:13Z")
**Posts on this page:** 14
**Page:** 1

<div class="post-metadata">

### Author: ![iHany](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ihany/32/18151_2.png) [@iHany](https://discourse.julialang.org/u/iHany)
#### Post date: [March 7, 2021, 8:28am UTC](https://discourse.julialang.org/t/c-w-deletes-all-texts-up-to-the-beginning-not-a-word-in-repl/56662/1 "2021-03-07T08:28:13Z")

</div>

I think that `<C-W>` in JuliaREPL should remove text a word at once, not all texts up to the beginning.

Is there any way to configure it as I want?

Note: I’m using OhMyREPL.

```nohighlight
Julia Version 1.5.3
Commit 788b2c77c1 (2020-11-09 13:37 UTC)
Platform Info:
  OS: macOS (x86_64-apple-darwin18.7.0)
  CPU: Apple M1
  WORD_SIZE: 64
  LIBM: libopenlibm
  LLVM: libLLVM-9.0.1 (ORCJIT, westmere)

```

---

<div class="post-metadata">

### Author: ![jishnub](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/jishnub/32/33620_2.png) [@jishnub](https://discourse.julialang.org/u/jishnub)
#### Post date: [March 7, 2021, 8:38am UTC](https://discourse.julialang.org/t/c-w-deletes-all-texts-up-to-the-beginning-not-a-word-in-repl/56662/2 "2021-03-07T08:38:21Z")

</div>

I am not using OhMyRepl, and find that it does remove words one at a time.

---

<div class="post-metadata">

### Author: ![iHany](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ihany/32/18151_2.png) [@iHany](https://discourse.julialang.org/u/iHany)
#### Post date: [March 7, 2021, 8:46am UTC](https://discourse.julialang.org/t/c-w-deletes-all-texts-up-to-the-beginning-not-a-word-in-repl/56662/3 "2021-03-07T08:46:32Z")

</div>

Oh, really?

For instance, suppose that there are texts like `include(test/runtests` (not closed parenthesis).  
In the above case, how does it change when pressing ?

For me, it deletes all.

EDIT: disable OhMyREPL and try it again also shows the same result to me ☹

---

<div class="post-metadata">

### Author: ![mkitti](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mkitti/32/12459_2.png) [@mkitti](https://discourse.julialang.org/u/mkitti)
#### Post date: [March 7, 2021, 9:03am UTC](https://discourse.julialang.org/t/c-w-deletes-all-texts-up-to-the-beginning-not-a-word-in-repl/56662/4 "2021-03-07T09:03:26Z")

</div>

Try adding whitespace.

---

<div class="post-metadata">

### Author: ![iHany](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ihany/32/18151_2.png) [@iHany](https://discourse.julialang.org/u/iHany)
#### Post date: [March 7, 2021, 9:12am UTC](https://discourse.julialang.org/t/c-w-deletes-all-texts-up-to-the-beginning-not-a-word-in-repl/56662/5 "2021-03-07T09:12:55Z")

</div>

Sorry but I’m not talking about space-separated words. Please see [the example](https://discourse.julialang.org/t/c-w-deletes-all-texts-up-to-the-beginning-not-a-word-in-repl/56662/3).

In most terminal environments such as in macOS and Ubuntu (with `zsh` in my case), `<C-W>` removes a word at once like this: `qwer/asdf` → `qwer/`.  
So I hope that `<C-W>` in JuliaREPL changes `include("test/runtests` to `include("test/`.

---

<div class="post-metadata">

### Author: ![mkitti](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mkitti/32/12459_2.png) [@mkitti](https://discourse.julialang.org/u/mkitti)
#### Post date: [March 7, 2021, 9:30am UTC](https://discourse.julialang.org/t/c-w-deletes-all-texts-up-to-the-beginning-not-a-word-in-repl/56662/6 "2021-03-07T09:30:08Z")

</div>

I think you are looking for Meta (Alt) + Backspace.

```julia
julia> include("test/runtests.jl")
# Alt- Backspace
julia> include("test/runtests.
# Alt- Backspace
julia> include("test/
# Alt- Backspace
julia> include("
# Alt- Backspace
julia>

```

---

<div class="post-metadata">

### Author: ![mkitti](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mkitti/32/12459_2.png) [@mkitti](https://discourse.julialang.org/u/mkitti)
#### Post date: [March 7, 2021, 10:15am UTC](https://discourse.julialang.org/t/c-w-deletes-all-texts-up-to-the-beginning-not-a-word-in-repl/56662/7 "2021-03-07T10:15:30Z")

</div>

Try this:

```julia
julia> mode = Base.active_repl.interface.modes[1]
"Prompt(\"julia> \",...)"

julia> mode.keymap_dict['\x17'] = mode.keymap_dict['\e']['\b']
#112 (generic function with 1 method)

```

---

<div class="post-metadata">

### Author: ![iHany](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ihany/32/18151_2.png) [@iHany](https://discourse.julialang.org/u/iHany)
#### Post date: [March 7, 2021, 10:51am UTC](https://discourse.julialang.org/t/c-w-deletes-all-texts-up-to-the-beginning-not-a-word-in-repl/56662/8 "2021-03-07T10:51:58Z")

</div>

It works! But I’m little bit worried about that this change might have some potential issues.  
If you don’t mind, can you explain it in details?

---

<div class="post-metadata">

### Author: ![mkitti](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mkitti/32/12459_2.png) [@mkitti](https://discourse.julialang.org/u/mkitti)
#### Post date: [March 7, 2021, 11:16am UTC](https://discourse.julialang.org/t/c-w-deletes-all-texts-up-to-the-beginning-not-a-word-in-repl/56662/9 "2021-03-07T11:16:54Z")

</div>

We are simply modifying the keymaps originally stated in [julia/LineEdit.jl at master · JuliaLang/julia · GitHub](https://github.com/JuliaLang/julia/blob/master/stdlib/REPL/src/LineEdit.jl#L1946-L1950) . In this case, we just borrowed the the function for Alt-Backspace (`"\e\b"`) to be used for Ctrl-W (`"^W"`, aka `'\x17'`).

---

<div class="post-metadata">

### Author: ![iHany](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ihany/32/18151_2.png) [@iHany](https://discourse.julialang.org/u/iHany)
#### Post date: [March 7, 2021, 11:44am UTC](https://discourse.julialang.org/t/c-w-deletes-all-texts-up-to-the-beginning-not-a-word-in-repl/56662/10 "2021-03-07T11:44:22Z")

</div>

Thank you very much.

Is it also possible to add it to `startup.jl`?  
Cuz I’ve tried it but this error occurs:

```julia
ERROR: LoadError: UndefVarError: active_repl not defined
Stacktrace:
 [1] getproperty(::Module, ::Symbol) at ./Base.jl:26
 [2] top-level scope at /Applications/Julia-1.5.app/Contents/Resources/julia/etc/julia/startup.jl:22
 [3] include(::Function, ::Module, ::String) at ./Base.jl:380
 [4] include at ./Base.jl:368 [inlined]
 [5] load_julia_startup() at ./client.jl:324
 [6] exec_options(::Base.JLOptions) at ./client.jl:267
 [7] _start() at ./client.jl:506
in expression starting at /Applications/Julia-1.5.app/Contents/Resources/julia/etc/julia/startup.jl:22

```

`.../startup.jl`:

```julia
...
Base.active_repl.interface.modes[1].keymap_dict['\x17'] = Base.active_repl.interface.modes[1].keymap_dict['\e']['\b']

```

---

<div class="post-metadata">

### Author: ![mkitti](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mkitti/32/12459_2.png) [@mkitti](https://discourse.julialang.org/u/mkitti)
#### Post date: [March 7, 2021, 2:35pm UTC](https://discourse.julialang.org/t/c-w-deletes-all-texts-up-to-the-beginning-not-a-word-in-repl/56662/11 "2021-03-07T14:35:31Z")

</div>

You probably need to add it to `atreplinit` in startup.jl:  
[https://docs.julialang.org/en/v1/stdlib/REPL/#Base.atreplinit](https://docs.julialang.org/en/v1/stdlib/REPL/#Base.atreplinit)

```julia
atreplinit() do repl
   repl.interface.modes[1].keymap_dict['\x17'] = repl.interface.modes[1].keymap_dict['\e']['\b']
end

```

I have not tested this.

---

<div class="post-metadata">

### Author: ![iHany](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ihany/32/18151_2.png) [@iHany](https://discourse.julialang.org/u/iHany)
#### Post date: [March 7, 2021, 10:22pm UTC](https://discourse.julialang.org/t/c-w-deletes-all-texts-up-to-the-beginning-not-a-word-in-repl/56662/12 "2021-03-07T22:22:01Z")

</div>

Sorry but it does not work.

I gave up ☹

---

<div class="post-metadata">

### Author: ![mkitti](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/mkitti/32/12459_2.png) [@mkitti](https://discourse.julialang.org/u/mkitti)
#### Post date: [March 7, 2021, 11:59pm UTC](https://discourse.julialang.org/t/c-w-deletes-all-texts-up-to-the-beginning-not-a-word-in-repl/56662/13 "2021-03-07T23:59:27Z")

</div>

Try this in startup.jl

```julia
import REPL.LineEdit: MIState, edit_delete_prev_word
  
atreplinit() do repl
    push!(repl.options.extra_keymap,
          Dict('\x17' => (s::MIState,o...)->edit_delete_prev_word(s)))
end

```

---

<div class="post-metadata">

### Author: ![iHany](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ihany/32/18151_2.png) [@iHany](https://discourse.julialang.org/u/iHany)
#### Post date: [March 8, 2021, 1:14am UTC](https://discourse.julialang.org/t/c-w-deletes-all-texts-up-to-the-beginning-not-a-word-in-repl/56662/14 "2021-03-08T01:14:17Z")

</div>

Thanks a lot.

I found that keymapping “after” OhMyREPL does not properly work.  
So I moved lines about keymapping at the beginning of `startup.jl` as follows, and it works.

```julia
import REPL
import REPL.LineEdit: MIState, edit_delete_prev_word, ModeState
atreplinit() do repl
    repl.interface = REPL.setup_interface(repl; extra_repl_keymap = Dict("^W" => "\e\b"))
end

```

Reference: [Customizing-keybindings](https://docs.julialang.org/en/v1/stdlib/REPL/#Customizing-keybindings)
