1

Recently I started using and learning Vim. I turned off movement keys in my .vimrc file like this:

noremap <Up> <NOP>
noremap <Down> <NOP>
noremap <Left> <NOP>
noremap <Right> <NOP>
noremap h <NOP>
noremap j <NOP>
noremap k <NOP>
noremap l <NOP>

However, I'd like to use netrw file browser, but I can't navigate in it without movement keys (h, j, k, and l, or arrow keys), since I disabled them. Is there a way to allow movement keys in netrw (basically, allow movement only when a cursor in it)?

4
  • 1
    I would recommend a different approach, keep h, j, k, and l. They are small movement keys, but often necessary Commented Mar 2, 2018 at 15:21
  • This might be sidestepping the question a little bit, but why have disabled all of those? I can't really see much benefit in removing a fundamental feature.
    – DJMcMayhem
    Commented Mar 2, 2018 at 18:43
  • I don't understand, what do you use for movement if all your movement keys are locked?
    – 3N4N
    Commented Mar 3, 2018 at 3:39
  • @EnanAjmain I'm guessing: f, t, F, T, w, b, W, B, e, E, ge, gE, /, +, -, G, H, M, L, |, etc. See also: vim hard-mode. ...although, all those commands also work in netrw, so ¯\_(ツ)_/¯
    – Rich
    Commented Mar 5, 2018 at 16:03

2 Answers 2

0

My real answer is "don't do that", but if you insist, you could do something like:

noremap <expr> h &filetype ==? 'netrw' ? 'h' : ''
noremap <expr> j &filetype ==? 'netrw' ? 'j' : ''
noremap <expr> k &filetype ==? 'netrw' ? 'k' : ''
noremap <expr> l &filetype ==? 'netrw' ? 'l' : ''

These commands create mappings that check the filetype, and then either perform an hjkl movement or do nothing, accordingly.

See :help :map-expression for details on how this works.

1

Since you said you're learning vim, I'd point you to learn your way through autocmd. Take a look at this.

I myself am pretty beginner at vimming, so if the solution doesn't work don't think you couldn't pull it off, it's probably because my solution is wrong. But try this anyway.

Put these lines in your .vimrc :

augroup FiletypeSpecificMappings
    autocmd FileType netrw noremap <buffer> j j
    autocmd FileType netrw noremap <buffer> k k
    autocmd FileType netrw noremap <buffer> h h
    autocmd FileType netrw noremap <buffer> l l
augroup END

Here if netrw is opened its local buffer will have the above key mappings, not any other buffers. I searched for ways to compress these four lines into one but couldn't find any.

3
  • Rather use unmap Commented Mar 3, 2018 at 7:30
  • Yeah, like I said, I don't know much about vim myself. You can put in another answer maybe?
    – 3N4N
    Commented Mar 3, 2018 at 7:50
  • @ChristianBrabandt You can't do a buffer-local unmap, so that wouldn't really work, I think.
    – Rich
    Commented Mar 5, 2018 at 16:20

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.