Возможно ли изменение модальности в режиме командной строки?
Некоторые примеры:
- После записи
!ls ~/foo/bar
я хочуdb
удалить панель - Я выполнил приведенную выше команду, и теперь я хочу изменить
ls
наmv
и вернуться к $
Возможно ли изменение модальности в режиме командной строки?
Некоторые примеры:
!ls ~/foo/bar
я хочу db
удалить панельls
на mv
и вернуться к $По умолчанию вы можете нажать Control + f
(или иначе увидеть set cedit
), когда в командной строке Vim открывается окно командной строки, где вы можете редактировать команду с помощью клавиш редактирования Vim в обычном режиме.
Enter
выполнит команду или Control + c
вернет вас в стандартную командную строку.
Итак, в вашем конкретном примере вы можете нажать Control + f
в командной строке Vim, затем db
, и он сделает то, что вы хотите.
Когда мне нужно делать более сложные команды редактирования, я использую вышеупомянутый подход, потому что я больше знаком с клавишами редактирования Vim, чем с альтернативами. Я также считаю, что клавиши vim с нормальным режимом более мощные.
Подробнее см. :help c_ctrl-f
.
в режиме командной строки vim:
<ctrl-w>
удаляет слово
в нормальном режиме:
q:
переходит в историю команд (которые можно редактировать с помощью
vim)
см. :help cmdline-editing
и :help cmdline-window
для получения дополнительных команд.
<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 год - с тех пор могут быть добавлены новые сочетания клавиш
Найдите :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:
, как упоминается Rene, который позволяет редактировать предыдущие типизированные команды в разных режимах.
emacscommandlineделает режим командной строки более похожим на командную строку Unix, путем добавления сопоставлений в стиле Emacs (например, в оболочке Bash). Некоторые из сопоставления просто сопоставляют существующие команды vim, но остальные реализуют функциональность, которая не доступна изначально.
conomode.vim реализует некий нормальный режим ( "Cmdline-Normal mode" ) поверх командной строки. Цель аналогична cmdline-окну (q:), но навигация и редактирование могут быть выполнены на месте. Конечно, cmdline-окно намного мощнее.
Conomode не заменяет командную строку Vim native emacs style редактируя, он просто добавляет один ключ: CTRL-O (см. ниже).
- введите c_ (нажмите CTRL-O в режиме командной строки)Индикатор режима
- представляет собой двоеточие ":", перемещенное вместе с курсором, скрывая под ним char
- quit to Cmdline-mode с I, i, a, A,: или любым неотображаемым ключом (который затем выполняет или вставляет сам) или ждет 60 секунд.
- выйти в обычный режим с Esc
(По общему признанию, я не понимаю смысл этого плагина, так как вместо того, чтобы нажимать Ctrl + O, чтобы войти в его режим Cono, вы могли бы так же быстро всплыть окно командной строки с Ctrl + F.)
Там могут быть и другие плагины. → https://www.google.com/webhp?q=command-line+editing+plugin+vim
Вместо использования полномасштабного плагина или в качестве дополнения к нему вы можете определить свои собственные сопоставления. → См. Мой ответ .
Вы можете вручную сопоставить определенные нормальные команды клавишам в режиме командной строки.
Например, следующий набор сопоставлений сделает 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 по умолчанию не отображается (что-то важное), вы можете одним и тем же способом вытащить другие (или все) функции из нормального режима в режим Insert. Например.: Перемещение в начало текущего слова с помощью 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
, начиная с обычного режима).
Вместо того, чтобы "изобретать колесо" или как дополнение к вашим собственным сопоставлениям, вы можете использовать полнофункциональные плагины от других авторов → см. Мой другой ответ.