Использование обычных движений в режиме командной строки в Vim


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

примеры:

  • после написания !ls ~/foo/bar Я хочу db удалить бар
  • Я выполнил приведенную выше команду, и теперь я хочу изменить ls до mv и вернуться к $
6   51   2011-08-25 11:58:27

6 ответов:

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

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

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

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

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

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

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

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

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

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

искать :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: Как отметил Рене, которая позволяет редактировать предыдущие введенные команды в разных режимах.

плагины для"нормального режима" -как редактирование командной строки

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

conomode.ВИМ реализует своего рода нормальный режим ("Cmdline-нормальный режим") поверх командная строка. Назначение аналогично cmdline-window (q:), но навигация и редактирование могут быть сделаны на месте. Конечно командной строки-окно является гораздо более мощным.

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

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

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

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

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

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

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

например, следующий набор сопоставлений сделает Alt+h в режиме командной строки перейти на один символ влево, Alt+k вспомните предыдущую команду Ex и так далее, аналогично hjkl в нормальных режим.

" 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 процесс пуска в норме режим.)


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