Я знаю, как обычно перемещаться в командном режиме, в частности, переходить к строкам и т. д. Но какова команда для перехода к концу строки, на которой я сейчас нахожусь?
Что плохого в том, чтобы потратить несколько минут на пробежку через vimtutor? Это уже часть вашей установки Vim и показывает вам основы.
@ dash-tom-bang Ну, у них здесь довольно высокий балл ... :) Но да, вы правы, vimtutor великолепен. Наверное, они об этом не знали?
Это одна из проблем, с которыми я столкнулся с SO - люди часто говорят почему вы не прочитали о том, как это сделать в месте x (справочные страницы, документация по C++ и т. д.), когда задают простой вопрос. Однако они, кажется, возможно, забывают, что после того, как на эти вопросы даны ответы на SO, он предоставляет хорошую ссылку для таких людей, как я знать, как что-то сделать (я пару раз просмотрел vimtutor и встроенный vim учебник *, но мне просто нужно быстрое напоминание. Так что ответы на подобные вопросы можно очень быстро найти в Google, а затем я могу вернуться к работе , не листая ерунду.





Знак доллара: $
Просто клавиша $(знак доллара). Вы можете использовать A, чтобы перейти в конец строки и перейти в режим редактирования (Добавить). Чтобы перейти к последнему непустому символу, вы можете нажать клавиши g, а затем клавиши _.
Противоположность A - это I (режим вставки в начало строки), в стороне. Нажатие только ^ поместит ваш курсор на первый непробельный символ в строке.
Перейти к последнему непустому g_
Вариант _g действительно полезен при работе в визуальном режиме, поскольку он позволяет использовать строку без символа новой строки в конце.
В то время как клавиши Home и End работают на обычной клавиатуре, $ и ^ необходимы, когда вы используете ноутбук :)
Вы должны добавить ^ в список.
Если ваша строка переносится, вы можете использовать g$ для достижения конца текущего переноса.
@WarFox Вы, должно быть, используете одну из этих клавиатур Microsoft, потому что у меня нет этого ключа
@RSW Я использую Mac Book Pro
Хорошо бы поискать и найти этот ответ на третий день изучения vim. Я знаю, что об этом спрашивали раньше, потому что он, должно быть, был нужен всем. Он экономит больше нажатий клавиш, чем сначала o, а затем backspace.
Теперь это имеет больше смысла, когда я познакомился с регулярным выражением и использую его ежедневно.
Нажмите A, чтобы войти в режим редактирования, начиная с конца строки.
Или есть очевидный ответ: используйте клавишу End, чтобы перейти в конец строки.
Да, терминал Mac - это тот, который я заметил, он захватывает ключи и не передает их вещам, работающим внутри терминала. Одна из вещей, которая раздражает меня, когда я немного пользуюсь Mac.
Весь смысл использования vim заключается в том, что не нужно использовать такие ключи, как «End». Никогда не покидайте домашний ряд.
На Mac нет клавиши End.
@kenorb Был, когда я опубликовал комментарий ... но Apple любит удалять функции на протяжении многих лет. netdna.webdesignerdepot.com/uploads/2009/01/… это на самом деле одна из моих любимых клавиатур всех времен
Преимущество клавиши «End» в том, что она работает как в обычном режиме, так и в режиме вставки.
'$' работает только в обычном / командном режиме, но он также работает в классическом редакторе vi (полезно знать, когда vim недоступен).
Зачем торчит режим вставки ?! Ни один обычный порядочный гражданин не ходит туда после рассвета. Вы знаете, что там происходит, не так ли? Код там пропадает, понимаешь? Он исчезает, и о нем больше никогда не слышно.
Спасибо за это, так как я люблю оставаться в режиме вставки после того, как вошел в него. К сожалению, на моем ноутбуке нет клавиши завершения. :(
Как говорили многие люди:
но также:
Я знал | приводит нас к началу строки, но я не знал о 0. Таким образом, и 0, и | делать то же самое, а?
@kami: хотя описания разные, похоже, они ведут себя идентично. Однако команда pipe | может вести подсчет, например 3 | чтобы перейти к третьему столбцу.
Если ваша текущая строка переносится вокруг видимого экрана на следующую строку, вы можете использовать г $, чтобы добраться до конца строки экран.
Я только что обнаружил, что предварительное ожидание команд вверх и вниз с помощью грамм заставляет vim перемещать курсор по экрану, а не по строкам. Т.е. gj и gk позволяют перемещаться вверх и вниз по длинной линии. Действительно полезно.
Также обнаружил, что ввод gw и что-то, кажется, постоянно меняет j и k, чтобы вести себя так. Не знаю, как и почему. Кто-нибудь может это объяснить?
@Druckles: Немного запоздалый ответ, но если вам все еще интересно (или если кто-то еще это читает), gw и gq - это команды, которые переформатируют текст. (см. :h gw и :h gq) Скорее всего, вы применили gw{motion} и изменили текст так, чтобы строки экрана соответствовали реальным строкам.
Возможно, не связаны, но если вы хотите начать новую строку после текущей строки, вы можете использовать o в любом месте строки.
g_ переходит к последнему непробельному символу.
g$ идет до конца строки экрана (когда строка буфера переносится на несколько строк экрана)
Я чувствую, что g_ это то же самое, что и $ b
@DaveAaronSmith: b переходит в начало предыдущего слова, что совсем не одно и то же. Это примерно эквивалентно $ge.
Я использую _ и g_ для визуализации / восстановления, поскольку $ также копирует / удаляет символ новой строки (LN).
Для меня $ переходит в конец текущей строки экрана (когда она завернута). Мне не удалось понять почему. g_ - единственный способ добраться до фактического конца линии.
@ezuk $ идет до конца строки, даже если для меня завернут. Я не знаю настроек, чтобы изменить его поведение. Возможно, ваш .vimrc переназначил его на g$?
@ PaulRuane: Ты справился. Я использую spf13, и строка 310 .vimrc отображает его. Теперь возникает вопрос, как мне отключить его позже в цепочке загрузки (простое изменение этой строки будет перезаписано в следующий раз, когда я вытащу spf13).
Я понял. Мне пришлось добавить let g:spf13_no_wrapRelMotion = 1 в мой файл .vimrc.before.local, чтобы отключить это поведение, характерное для spf13.
Мне нравятся nnoremap L g_ и nnoremap <leader>L L, также в режиме ожидания оператора и в визуальном режиме. Более интуитивно понятный и менее растянутый.
_ такой же, как ^ для первого непустого символа в начале строки?
Во многих случаях, когда мы находимся внутри строки, мы заключаемся в двойные кавычки или при написании оператора мы не хотим нажимать escape, переходить к концу этой строки с помощью клавиши со стрелкой и нажимать точку с запятой (;) только для того, чтобы конец строки. Напишите следующую строку в вашем файле vimrc:
imap <C-l> <Esc>$a
Что говорит линия? Он отображает Ctrl + l на серию команд. Это эквивалентно одновременному нажатию клавиш Esc (командный режим), $ (конец строки), a (добавление).
спасибо за это. Я хотел добавить Ctrl-e обратно в свой vim, чтобы перейти к концу строки, как на моей первой машине, и не знал, как
Как говорится в принятом ответе, вы можете нажать A, чтобы сделать то же самое.
@trysis, вы неправильно поняли, это не уходит из режима редактирования, что очень приятно.
Ты прав. vim, безусловно, позволяет вам делать намного больше за гораздо меньшее время с такими вещами. @razorxpress, незначительной корректировкой будет imap <C-l> <Esc>A, что делает Ctrl + l эквивалентом нажатия Esc (выход из режима вставки), затем A (добавление в конец строки).
Я думаю, что более идиоматическим способом сопоставить это было бы inoremap <C-l> <C-o>A.
Я не понимаю, чем два нажатия клавиш (Ctrl+l) лучше, чем ... два нажатия клавиш, которые встроены (<Esc>A).
Также обратите внимание на различие между линия (или, возможно, физической линией) и линия экрана. Строка заканчивается символом конца строки ("\ n"). Линия экрана - это то, что отображается в виде одной строки символов на вашем терминале или на экране. Они расходятся, если у вас есть физические линии, длина которых превышает ширину экрана, что очень часто встречается при написании электронных писем и т. д.
Это различие также проявляется в командах конца строки.
Если вы всегда предпочитаете последнее поведение, вы можете переназначить ключи следующим образом:
:noremap 0 g0
:noremap $ g$
Как добраться до последнего непробельного символа строки? (будь то линия экрана или физическая линия)
g_ - это последний непробельный знак в строке физический. Как насчет экранной линии?
Самый простой вариант - ввести $. Если вы работаете с блоками текста, вам могут пригодиться команды { и } для перемещения абзаца назад и вперед, соответственно.
Я привык к Home / End, доставляя меня к началу и концу строк в режиме вставки (из-за использования в Windows и, я думаю, Linux), который Mac не поддерживает. Это особенно раздражает, потому что, когда я использую vim в удаленной системе, мне тоже нелегко это сделать. После некоторых мучительных проб и ошибок я придумал эти строки .vimrc, которые делают то же самое, но привязаны к Ctrl-A для начала строки и Ctrl-D для конца строки. (По какой-то причине Ctrl-E, я думаю, зарезервирован, или, по крайней мере, я не мог придумать способ связать его.) Наслаждайтесь.
:imap <Char-1> <Char-15>:normal 0<Char-13>
:imap <Char-4> <Char-15>:normal $<Char-13>
Здесь есть хорошая таблица для кодов управляющих символов ASCII, здесь также для других:
http://www.physics.udel.edu/~watson/scen103/ascii.html
Вы также можете нажать Ctrl-V + Ctrl-, но это не вставляется в такие места.
Главный вопрос - конец очереди
$ переходит в конец строки, остается в командном режиме
A переходит в конец строки, переключается в режим вставки
И наоборот - начало строки (технически первый символ непробельный)
^ переходит в начало строки, остается в командном режиме
I (верхний регистр i) переходит в начало строки, переключается в режим вставки
Далее - начало строки (технически первый столбец независимо от пробел)
0 (ноль) переходит в начало строки, остается в командном режиме
0i (ноль с последующим нижним регистром i) идет в начало строки, переключается в режим вставки
Для тех, кто начинает изучать vi, вот хорошее введение в vi, где перечислены расположенные рядом команды vi для типичного перемещения курсора редактора графического интерфейса Windows и сочетаний клавиш.
редактор vi для пользователей Windows
Аналогом I является не 0, а ^, поскольку и I, и ^ переходят к первому символу непробельный в строке, а 0 переходит к нулевому столбцу (как следует из его названия).
@wchargin правда, подумал вроде не найду какой будет аналог 0? (перейти к первому символу (= столбец 0) строки и перейти в режим вставки)
@franssu: Я знаю только 0i. :-)
@wchargin - Спасибо за техническую корректность. Я обновил пост.
Я не вижу горячую клавишу для macbook для использования vim в стандартном терминале. Надеюсь, это кому-то поможет. Для пользователей macOS (проверено на macbook pro 2018):
fn + ← - move to beginning line
fn + → - move to end line
fn + ↑ - move page up
fn + ↓ - move page down
fn + g - move the cursor to the beginning of the document
fn + shift + g - move the cursor to the end of the document
Для последних двух команд иногда нужно дважды нажать.
Основные команды vim покрыты менее чем за 10 минут youtube.com/watch?v=71YTkxUNwmg