When I type [[ or ]] in normal mode, cursor is jumping previous / next "class definition" during editing python (.py) file.

I want to map these shortcuts to SHIFT + UP and SHIFT + DOWN. And I added this to my vimrc:

nnoremap <S-Up> [[
nnoremap <S-Down> ]]

But when I press SHIFT + UP, cursor going beginning of the file, or if I press SHIFT + DOWN, cursor going end of the file.

How can I map these keys?

  • Just tried it in Gvim and Neovim in Windows, works fine. Tried it on my linux box in a terminal and doesn't work. I think the issue is what key is being sent when you press shift+up. What type of system are you running?
    – jecxjo
    Commented Nov 2, 2016 at 20:06
  • @jecxjo Ubuntu 14.04 with Unity. I'm working on default terminal and vim8. Commented Nov 2, 2016 at 20:09

1 Answer 1

nnoremap <S-Up> [[
nnoremap <S-Down> ]]

With the non-recursive mappings above in your vimrc, pressing <S-Up> will be exactly like pressing [[ in its original meaning.

The original meaning of [[ is (quoting :help [[):

[[    [count] sections backward or to the previous '{' in
      the first column.

which, usually, means "jump to the first column of the first line". Same logic for ]].

Since you are using non-recursive mappings, the original meaning of [[ and ]] is used, not the remapped versions from the Python filetype plugin.

You need recursive mappings:

nmap <S-Up> [[
nmap <S-Down> ]]

The rule is:

Use a recursive mapping only if you intend to use any other mapping in your mapping. Use non-recursive mappings if you don't.

  • Its great answer, thanks! I understood the point. Commented Nov 2, 2016 at 21:15

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.