VIM - Как назначить различные сопоставления для ключа в зависимости от того, пуста ли строка? - PullRequest
2 голосов
/ 25 января 2012

Я хочу назначить разные команды в зависимости от контекста.

Я пытаюсь сделать что-то вроде этого:

if line is empty:
    map x key to y command
else
    map x key to z command

Ответы [ 2 ]

8 голосов
/ 25 января 2012

Обычно это достигается с помощью <expr> сопоставления:

nnoremap <expr> ((empty(getline('.')))?('y'):('z'))

Поскольку вы собираетесь использовать NerdCommenter, вы вынуждены не использовать «nore»:

nmap <expr> empty(getline('.')) ? '' : '\cc'

Заменить'' с нужным кодом, так как я не понимаю, что вы подразумеваете под «добавлением комментария».

5 голосов
/ 25 января 2012

Лучшим подходом было бы иметь одну функцию, поведение которой зависит от содержимого строки.Тогда вам не нужно беспокоиться о разных сопоставлениях.Например:

function! LineOperation()
    let curline=getline('.')
    if curline =~ '^\s*$'
        " empty line (except for whitespace): perform y command
    else
        " perform z command
    endif
endfunction

И затем сопоставьте нужную клавишу для вызова этой функции:

nnoremap <silent> x :call LineOperation()<CR>
...