Использование движений в обычном режиме в режиме командной строки в Vim - PullRequest
57 голосов
/ 25 августа 2011

Возможно ли модальное редактирование в режиме командной строки?

Некоторые примеры:

  • После записи !ls ~/foo/bar Я хочу db удалить bar
  • Я выполнил указанную выше команду и теперь хочу изменить ls на mv и вернуться к $

Ответы [ 6 ]

98 голосов
/ 25 августа 2011

По умолчанию вы можете нажать Control + f (или иначе см. set cedit) в командной строке Vim, которая открывает окно командной строки, где вы можете редактировать команду с помощью клавиш редактирования Vim обычного режима. Enter выполнит команду или Control + c вернет вас к стандартной командной строке.

Итак, в вашем конкретном примере вы можете нажать Control + f в командной строке Vim, затем db, и он будет делать то, что вы хотите.

Когда мне нужно выполнить более сложные команды редактирования, я использую описанный выше подход, потому что я больше знаком с клавишами редактирования Vim, чем с альтернативами. Я также считаю, что клавиши vim в нормальном режиме более мощные.

См. :help c_ctrl-f для получения дополнительной информации.

25 голосов
/ 25 августа 2011

в vim * режиме командной строки : <ctrl-w> удаляет слово

в нормальном режиме : q: переходит в историю команд (которая можетбыть отредактирован с помощью команд vim)

см. :help cmdline-editing и :help cmdline-window для дополнительных команд.

12 голосов
/ 18 января 2014

Встроенные горячие клавиши для перемещения и редактирования в режиме командной строки

<Esc>        abandon command-line without executing it
CTRL-C       abandon command-line without executing it

CTRL-B       cursor to begin of command-line
CTRL-E       cursor to end   of command-line

CTRL-F       opens the command-line window (unless a different key is specified in 'cedit')

CTRL-H       delete the character  in front of the cursor (same as <Backspace>)
CTRL-W       delete the word       in front of the cursor
CTRL-U       delete all characters in front of the cursor

CTRL-P       recall previous command-line from history (that matches pattern in front of the cursor)
CTRL-N       recall next     command-line from history (that matches pattern in front of the cursor)
<Up>         recall previous command-line from history (that matches pattern in front of the cursor)
<Down>       recall next     command-line from history (that matches pattern in front of the cursor)
<S-Up>       recall previous command-line from history
<S-Down>     recall next     command-line from history
<PageUp>     recall previous command-line from history
<PageDown>   recall next     command-line from history

<S-Left>     cursor one word left
<C-Left>     cursor one word left
<S-Right>    cursor one word right
<C-Right>    cursor one word right

<LeftMouse>  cursor at mouse click

Ссылка: :help ex-edit-index

(извините за перекрытиес более старыми ответами. Надеюсь, этот полный, структурированный обзор °, тем не менее, полезен.)
° по состоянию на 2014 год - с тех пор могут быть добавлены новые сочетания клавиш

8 голосов
/ 25 августа 2011

Поиск :help cmdline-editing в Vim.

Будет выдан список ярлыков, работающих в режиме командной строки.

Выписка для вашей текущей проблемы:

CTRL-B or <Home>                    *c_CTRL-B* *c_<Home>*
    cursor to beginning of command-line
CTRL-E or <End>                     *c_CTRL-E* *c_<End>*
    cursor to end of command-line
<S-Left> or <C-Left>                    *c_<C-Left>*
    cursor one WORD left
                        *c_<S-Right>*
<S-Right> or <C-Right>                  *c_<C-Right>*
    cursor one WORD right

или используйте q:, как упомянуто Рене, что позволяет редактировать предыдущие набранные команды в различных режимах.

4 голосов
/ 18 января 2014

Плагины для редактирования в режиме «как в обычном режиме»

emacscommandline делает режим командной строки более похожим на командную строку Unix, добавив сопоставления в стиле Emacs (как в оболочке Bash).Некоторые из отображений просто отображают существующие команды vim, но остальные реализуют функциональные возможности, которые изначально не доступны.

conomode.vim реализует своего рода режим Normal («Cmdline-Normal mode») в верхней части командной строки.Назначение аналогично окну cmdline (q :), но навигацию и редактирование можно выполнять на месте.Конечно, cmdline-окно гораздо более мощное.

Conomode не заменяет встроенное редактирование командной строки в стиле emacs в Vim, а просто добавляет одну клавишу: CTRL-O (см. Ниже).

  • введите с помощью c_ (нажмите CTRL-O в режиме командной строки)
  • Индикатор режима - это двоеточие ":", перемещенное вместе с курсором, скрывающее под ним символ
  • выйти в режим Cmdline с I, i, a, A,: или любым не назначенным ключом (который затем выполняется или вставляется сам), или подождать 60 секунд.
  • выйти в обычный режим с помощью Esc

(Правда, я не понимаю смысла этого плагина, поскольку вместо нажатия Ctrl + O , чтобы войти в его Cono-режим, вы можете также быстро открыть окно командной строки с помощью Ctrl + F .)

Там могут быть другие плагины там.→ https://www.google.com/webhp?q=command-line+editing+plugin+vim

Вместо того, чтобы использовать полноценный плагин или как дополнение к нему, вы можете определить свои собственные отображения .→ Смотрите мой другой ответ .

1 голос
/ 18 января 2014

Настраиваемые сопоставления, которые реплицируют команды обычного режима

Вы можете вручную сопоставить определенные команды Обычного с нажатиями клавиш в режиме командной строки.

Например, следующий набор сопоставлений составит Alt + h в режиме командной строки на один символ влево, Alt + k вызов предыдущей команды Ex и т. Д., Аналогично h j k l в обычном режиме.

" provide hjkl movements in Command-line mode via the <Alt> modifier key
cnoremap <expr> <A-h> &cedit. 'h' .'<C-c>'
cnoremap <expr> <A-j> &cedit. 'j' .'<C-c>'
cnoremap <expr> <A-k> &cedit. 'k' .'<C-c>'
cnoremap <expr> <A-l> &cedit. 'l' .'<C-c>'

Поскольку клавиша-модификатор Alt не отображается (на что-то важное) по умолчанию вы можете таким же образом перевести другие (или все) функции из обычного режима в режим вставки.Например: переход к началу текущего слова с помощью Alt + b :

" Normal mode command(s) go… --v <-- here
cnoremap <expr> <A-b> &cedit. 'b' .'<C-c>'
cnoremap <expr> <A-w> &cedit. 'w' .'<C-c>'

" <Alt>+<i> changes the first word (typically 
"   the last run Ex :command or the last range, given the case)
cnoremap <expr> <A-i> &cedit. '^cw' .'<C-c>'

Вы должны скопировать этот код в файл vimrc, чтобы загрузить егокаждый раз, когда вы запускаете vim (вы можете открыть его, набрав :new $myvimrc, начиная с обычного режима).

Вместо того, чтобы «изобретать велосипед» или в качестве дополнения к вашим собственным сопоставлениям, вы можете использовать полнофункциональные плагины от других авторов → см. Мой другой ответ .

...