Обход текста в режиме вставки
а в Режим Вставки в Vim есть ли способ пройти текст, перемещая некоторые символы вперед и назад, кроме использования клавиш со стрелками?
Если я нажму h,j,k и l в режиме вставки символы печатаются на экране вместо того, чтобы двигаться по тексту.
то, как я делаю это в данный момент, приходится прибегать к Ctrl + [ ( Esc) и перемещение текста; но очевидно, что это не продуктивно.
11 ответов:
вы, кажется, злоупотребляете vim, но это, вероятно, из-за не очень хорошо знакомы с ним.
правильно и нажать Esc, туда, где вы хотите сделать небольшую коррекцию, исправить, вернуться и продолжить редактирование. Это эффективно, потому что Vim имеет гораздо больше движений, чем обычный характер вперед/назад/вверх/вниз. После того, как вы узнаете больше из них, это будет более продуктивным.
вот несколько варианты использования:
- вы случайно набрали "accifentally". Нет проблем, последовательность EscFfrdA исправит ошибку и вернет вас туда, где вы ее редактировали. Ff движение вернет вас к первому встреченному символу "f". Сравните с Ctrl+ -> -> -> ->deldконец, что делает практически то же самое в случайном редакторе, но занимает больше нажатий клавиш, заставляет вас переместить руку из буквенно-цифрового пространства клавиатуры.
- вы случайно набрали "вы случайно набрали", но хотите исправить его на"вы намеренно набрали". Затем Esc2bc w сотрет слово, которое вы хотите исправить и привести вас в режим вставки, так что вы можете сразу же повторите его. Чтобы вернуться к редактированию, нажмите клавишу A вместо конец, чтобы достичь которого вы должны переместить руку
- вы случайно набрали " мышь "вместо"мыши". Нет проблем-старый добрый Ctrl+ W удалит предыдущее слово, не выходя из режима вставки. И это происходит гораздо быстрее, чтобы стереть маленькое слово, чем исправить ошибки в нем. Я так привык к этому, что закрыл страницу браузера, когда набирал это сообщение...
- количество повторений в значительной степени используется недостаточно. Прежде чем делать это движение, вы можете ввести число, и движение будет повторяться такое количество раз. Например, 15h вернет вам 15 символов и 4j будет прокрутите 4 строки вниз. Начните использовать их, и вы скоро привыкнете и узнаете, что нажатие 10 раз клавиша менее быстра, чем итерационный подход к перемещению курсора, когда вы вводите 12h, обратите внимание, что вы допустили ошибку и немедленно исправить себя с ll.
но, если вы еще хотите сделать небольшие текстовые обходы, не выходя из режима вставки, следуйте rson ' s советы и использовать Ctrl+O. В качестве примера,Ctrl+OF+f переместит вас к предыдущему
fсимвол и оставить вас в режиме вставки.
а в режим вставки используйте CtrlO перейти к нормальный режим для одной команды:
CTRL-O h move cursor left CTRL-O l move cursor right CTRL-O j move cursor down CTRL-O k move cursor upкоторый, вероятно, самый простой способ сделать то, что вы хотите, и легко запомнить.
другие очень полезные клавиши управления в режиме вставки:
CTRL-W delete word to the left of cursor CTRL-O D delete everything to the right of cursor CTRL-U delete everything to the left of cursor CTRL-H backspace/delete CTRL-J insert newline (easier than reaching for the return key) CTRL-T indent current line CTRL-D un-indent current lineэто позволит устранить многие расточительно переключается в обычный режим.
режим вставки
движение
hjkl
несмотря ни на что Павел Швед сказал - к этому, наверное, лучше привыкнуть Escaping Insert mode-вот пример набора сопоставлений для быстрой навигации в режиме вставки:
" provide hjkl movements in Insert mode via the <Alt> modifier key inoremap <A-h> <C-o>h inoremap <A-j> <C-o>j inoremap <A-k> <C-o>k inoremap <A-l> <C-o>lэто сделает Alt+h в режиме вставки перейдите на один символ влево, Alt+j вниз и так по аналогии с hjkl в нормальном режиме.
вы должны скопировать этот код в свой файл vimrc, чтобы он загружался каждый раз при запуске vim (вы можете открыть его, введя
:new $myvimrcзапуск в штатном режиме).
любые движения в нормальном режиме
С Alt клавиша-модификатор не отображается (на что-то важное) по умолчанию, вы можете в том же мода вытяните другие (или все) функции из нормального режима в режим вставки. Например:
Переход к началу текущего слова с Alt+b:inoremap <A-b> <C-o>b inoremap <A-w> <C-o>w
(другое использование Alt в режиме вставки)
стоит отметить, что для Alt ключ, чем репликация нормального режима поведения: например, вот отображения для копирования из соседней строки часть от текущего столбца до конца строки:
" Insert the rest of the line below the cursor. " Mnemonic: Elevate characters from below line inoremap <A-e> \<Esc> \jl \y$ \hk \p \a " Insert the rest of the line above the cursor. " Mnemonic: Y depicts a funnel, through which the above line's characters pour onto the current line. inoremap <A-y> \<Esc> \kl \y$ \hj \p \a(я использовал
\продолжения строки и отступ для повышения четкости-команды интерпретируются так, как будто написаны на одной строке.)
встроенные горячие клавиши для редактирования
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 (influenced by the 'backspace' option)(нет заметных встроенных горячих клавиш для перемещения в режиме вставки.)
ссылка:
:help insert-index
этот набор отображений делает верхний Alt+hjklдвижения доступно в командной строке:
" provide hjkl movements in Command-line mode via the <Alt> modifier key cnoremap <A-h> <Left> cnoremap <A-j> <Down> cnoremap <A-k> <Up> cnoremap <A-l> <Right>кроме того, эти сопоставления добавить движения как в режиме вставки, так и в режиме командной строки в:
" provide hjkl movements in Insert mode and Command-line mode via the <Alt> modifier key noremap! <A-h> <Left> noremap! <A-j> <Down> noremap! <A-k> <Up> noremap! <A-l> <Right>
Команды отображения для вытягивать команды нормального режима к Режим командной строки выглядят немного иначе, чем команды отображения режима вставки (потому что в режиме командной строки отсутствует режим вставки Ctrl+O):" Normal mode command(s) go… --v <-- here 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>' cnoremap <expr> <A-b> &cedit. 'b' .'<C-c>' cnoremap <expr> <A-w> &cedit. 'w' .'<C-c>'
встроенные горячие клавиши для перемещения и редактирования
CTRL-B cursor to beginning 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
Если вы являетесь пуристом vim, пропустите чтение этого ответа. OTOH, если вы новичок в vim и ищете несколько полезных советов, которые вы не найдете во многих сотнях учебников и блогов vim, читайте дальше... : -)
несколько неортодоксальных (vim) способов
Это 2014 год, и как кто-то, кто недавно вернулся к
vimЯ могу предложить несколько, потенциально противоположных, точек зрения и советов.используйте shift + left или shift+right для перемещения слова
в то время как повторение является мощным понятием в vim, я (лично) нахожу странным, что использование его либо заставляет меня считать (строки, символы, слова и т. д.) или делать догадки. Мой мозг обычно работает так: "я хочу курсор здесь "а не как" я хочу курсор _5_words_to_the_left_". Быстрое перемещение курсора и визуальное наблюдение за тем, где находится точка вставки, позволяет мне сосредоточиться на том, что я редактирую, вместо того, чтобы считать, сколько хмель мне нужно сделать, чтобы добраться туда, где мне нужно редактировать.
включите режим мыши, и использовать колесо мыши и нажав
...для навигации по большим текстам.
большинство (все) современных компьютеров имеют сенсорная панель который тесно интегрирован с клавиатурой (например, MacBooks). Промышленные дизайнеры потратили много лет на оптимизацию этих конструкций, так что старая проблема необходимости отодвинуть руку от клавиатуры больше не является реальной проблемой. Хорошо, это если вы привыкли к мыши и не любите переключаться, но для тех, кто новичок в vim (например, тех, кто может найти этот пост через поиск), это не должно быть большой проблемой.
в качестве бонуса, нажмите + перетащите ставит вас в визуальном режиме
при включенной мыши щелчок и перетаскивание приводит к переключению в визуальный режим и маркировке области для рывка.
и использовать колесо прокрутки
С помощью мыши (колеса) для прокрутки и щелчка для позиционирования курсора (duh) просто работает. Смотрите http://usevim.com/2012/05/16/mouse/ подробнее об этом.
и так...
Это то, что я бы назвал более современным (с помощью мыши, колеса прокрутки и т. д.) способы навигации в vim, одинаково эффективные в зависимости от ваших предпочтений ввода.
HTH
многие люди в сообществе Vim утверждают, что вы не должны перемещаться в режиме вставки, что это не способ Vim. Я думаю, что это неверное мнение, полученное при переходе от стандартных редакторов к Vim.
Vim является наиболее мощным, когда вы используете его инструменты для создания атомарных, повторяемых действий или находок.
это нормально для навигации в режиме вставки, если вы исправляете ошибку, которую вы сделали в том же сеансе вставки. вы не должны перемещаться за пределами диапазона текста, который вы изменили.
Если вы допустили ошибку при вводе текста и выход из режима вставки, чтобы исправить это вы не сможете повторить действие,
.повторит исправление.Vim поддерживает множество навигационных клавиш режима вставки. Очевидно, есть клавиши со стрелками, Home и End, но есть также много других ярлыков. Смотрите
:h ins-special-keys.
в GVim, вы можете использовать мышь. Но, честно говоря, что плохого в использовании клавиш со стрелками? Есть причина, почему они находятся на клавиатуре.
чтобы иметь немного лучшую навигацию в режиме вставки, почему бы не сопоставить некоторые клавиши?
imap <C-b> <Left> imap <C-f> <Right> imap <C-e> <End> imap <C-a> <Home> " <C-a> is used to repeat last entered text. Override it, if its not neededЕсли вы можете обойти работу мета-ключа в своем терминале, вы можете еще лучше издеваться над режимом emacs. Навигация в обычный режим лучше, но для коротких движений, это помогает оставаться в режиме вставки.
для более длинных прыжков, я предпочитаю следующий перевод по умолчанию:
<Meta-b> maps to <Esc><C-left>это смещается в обычный режим и возвращается слово
Я считаю Home и конец (и PageUp/PageDn) также работает нормально в режиме вставки, но кроме этого, я не считаю, что есть какие-либо другие стандартные ключи, определенные для обхода текста.
вы можете создать сопоставления, которые работают в режиме вставки. Способ сделать это через inoremap. Обратите внимание на " i " в начале команды (noremap полезен, чтобы избежать столкновения ключевых карт). Следствие в "нормальном" режиме. Вы можете догадаться, что vim считает "нормальным";)
тем не менее, вы действительно хотите перемещаться по тексту, используя "нормальный" режим. Vim супер в таких вещах, и вся эта мощность доступна из нормального режима. Vim уже предоставляет простые способы получить от нормальный режим для вставки режима (например, i, I, a, A, o, O). Хитрость заключается в том, чтобы сделать его легко войти в нормальный режим. Способ сделать это-переназначить escape на более удобный ключ. Но вам нужен тот, который не будет конфликтовать с вашим обычным набором текста. Я использую:
inoremap jj <Esc>поскольку jj (это 2 j, набранные один за другим быстро), похоже, не появляется в моем словаре. Другие будут переназначены туда, где это удобно.
другое существенное изменение, которое я делаю, - это переключение CAPSLOCK и Клавиши управления на моей клавиатуре (используя конфигурацию клавиатуры хост-компьютера), так как я почти никогда не использую CAPSLOCK, и у него есть эта большая, красивая кнопка прямо там, где я хочу. (Это характерно для пользователей Emacs. Недостатком является то, когда вы оказываетесь на "незафиксированной" клавиатуре! Ааарггх!)
после переназначения CAPSLOCK вы можете удобно использовать следующие переназначения режима вставки:
имея в виду, что некоторые ключи уже отображаются в режиме вставки (назад-kill-word-это C-w (Control-w) по умолчанию у вас уже могут быть нужные привязки. Тем не менее, я предпочитаю C-h так в моем .vimrc у меня есть:
inoremap <C-h> <C-w>но, вы, вероятно, хотите тот же спазм мышечной памяти в нормальном режиме, поэтому я также сопоставляю C-h как:
nnoremap <C-h> db(d)elete (b) ackwards выполняет то же самое с тем же ключевым аккордом. Этот вид быстрого редактирования-это тот, который я нахожу полезным на практике для опечаток. Но придерживаться нормального режима для перемещения по тексту и ничего больше, чем убить предыдущее слово. Как только вы войдете в привычку менять режимы (используя переназначение, конечно), это будет намного эффективнее, чем переназначение режима вставки.
Извините, но vim так не работает.
вы должны переключиться в" нормальный " режим, перейдите и затем вернитесь, чтобы вставить снова.
вы могли бы использовать
imapдля сопоставления любой клавиши в режиме вставки с одной из клавиш курсора. Вот так:imap h <Left>теперь H работает как в обычном режиме, перемещая курсор. (Отображение h таким образом, очевидно, плохой выбор)
сказав, что я не думаю, что стандартный способ перемещения по тексту с помощью VIM "непродуктивен". Есть много очень мощных способов прохождения текста в обычном режиме (например, с помощью w и b, или / и ?, или f и F, etc.)
Comments