Как перейти к концу строки в Vim?

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

Основные команды vim покрыты менее чем за 10 минут youtube.com/watch?v=71YTkxUNwmg

eomeroff 10.01.2014 13:38

Что плохого в том, чтобы потратить несколько минут на пробежку через vimtutor? Это уже часть вашей установки Vim и показывает вам основы.

dash-tom-bang 16.02.2016 02:12

@ dash-tom-bang Ну, у них здесь довольно высокий балл ... :) Но да, вы правы, vimtutor великолепен. Наверное, они об этом не знали?

Pryftan 06.01.2020 22:36

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

kaifas 06.02.2021 17:49
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1 265
4
791 677
15
Перейти к ответу Данный вопрос помечен как решенный

Ответы 15

Знак доллара: $

Ответ принят как подходящий

Просто клавиша $(знак доллара). Вы можете использовать A, чтобы перейти в конец строки и перейти в режим редактирования (Добавить). Чтобы перейти к последнему непустому символу, вы можете нажать клавиши g, а затем клавиши _.

Противоположность A - это I (режим вставки в начало строки), в стороне. Нажатие только ^ поместит ваш курсор на первый непробельный символ в строке.

Перейти к последнему непустому g_

SergioAraujo 12.05.2012 02:36

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

Greg Robbins 31.07.2012 11:52

В то время как клавиши Home и End работают на обычной клавиатуре, $ и ^ необходимы, когда вы используете ноутбук :)

Sridhar Sarnobat 13.11.2012 02:26

Вы должны добавить ^ в список.

Tek 27.04.2013 01:34

Если ваша строка переносится, вы можете использовать g$ для достижения конца текущего переноса.

James M. Lay 14.09.2014 02:09

@WarFox Вы, должно быть, используете одну из этих клавиатур Microsoft, потому что у меня нет этого ключа

RSW 25.02.2015 14:40

@RSW Я использую Mac Book Pro

WarFox 25.02.2015 22:34

Хорошо бы поискать и найти этот ответ на третий день изучения vim. Я знаю, что об этом спрашивали раньше, потому что он, должно быть, был нужен всем. Он экономит больше нажатий клавиш, чем сначала o, а затем backspace.

WesternGun 31.10.2016 15:35

Теперь это имеет больше смысла, когда я познакомился с регулярным выражением и использую его ежедневно.

wetjosh 10.06.2020 02:29

Нажмите A, чтобы войти в режим редактирования, начиная с конца строки.

Или есть очевидный ответ: используйте клавишу End, чтобы перейти в конец строки.

Да, терминал Mac - это тот, который я заметил, он захватывает ключи и не передает их вещам, работающим внутри терминала. Одна из вещей, которая раздражает меня, когда я немного пользуюсь Mac.

davr 01.09.2011 03:57

Весь смысл использования vim заключается в том, что не нужно использовать такие ключи, как «End». Никогда не покидайте домашний ряд.

Jon Thoroddsen 07.01.2015 17:12

На Mac нет клавиши End.

kenorb 05.05.2015 17:24

@kenorb Был, когда я опубликовал комментарий ... но Apple любит удалять функции на протяжении многих лет. netdna.webdesignerdepot.com/uploads/2009/01/… это на самом деле одна из моих любимых клавиатур всех времен

davr 23.04.2017 05:21

Преимущество клавиши «End» в том, что она работает как в обычном режиме, так и в режиме вставки.

'$' работает только в обычном / командном режиме, но он также работает в классическом редакторе vi (полезно знать, когда vim недоступен).

Зачем торчит режим вставки ?! Ни один обычный порядочный гражданин не ходит туда после рассвета. Вы знаете, что там происходит, не так ли? Код там пропадает, понимаешь? Он исчезает, и о нем больше никогда не слышно.

Rook 21.05.2009 02:59

Спасибо за это, так как я люблю оставаться в режиме вставки после того, как вошел в него. К сожалению, на моем ноутбуке нет клавиши завершения. :(

ray 13.10.2011 05:00

Как говорили многие люди:

  • $ доводит вас до конца

но также:

  • ^ или _ переводят вас к первому непробельному символу в строке и
  • 0 (ноль) переводит вас в начало строки, вкл. пробел

Я знал | приводит нас к началу строки, но я не знал о 0. Таким образом, и 0, и | делать то же самое, а?

Kamran Bigdely 19.05.2011 00:23

@kami: хотя описания разные, похоже, они ведут себя идентично. Однако команда pipe | может вести подсчет, например 3 | чтобы перейти к третьему столбцу.

Paul Ruane 22.11.2011 01:57

Если ваша текущая строка переносится вокруг видимого экрана на следующую строку, вы можете использовать г $, чтобы добраться до конца строки экран.

Я только что обнаружил, что предварительное ожидание команд вверх и вниз с помощью грамм заставляет vim перемещать курсор по экрану, а не по строкам. Т.е. gj и gk позволяют перемещаться вверх и вниз по длинной линии. Действительно полезно.

Druckles 11.04.2012 21:29

Также обнаружил, что ввод gw и что-то, кажется, постоянно меняет j и k, чтобы вести себя так. Не знаю, как и почему. Кто-нибудь может это объяснить?

Druckles 11.04.2012 21:30

@Druckles: Немного запоздалый ответ, но если вам все еще интересно (или если кто-то еще это читает), gw и gq - это команды, которые переформатируют текст. (см. :h gw и :h gq) Скорее всего, вы применили gw{motion} и изменили текст так, чтобы строки экрана соответствовали реальным строкам.

pandubear 14.07.2013 22:50

Возможно, не связаны, но если вы хотите начать новую строку после текущей строки, вы можете использовать o в любом месте строки.

  • $ переходит к последнему символу в строке.
  • g_ переходит к последнему непробельному символу.

  • g$ идет до конца строки экрана (когда строка буфера переносится на несколько строк экрана)

Я чувствую, что g_ это то же самое, что и $ b

Dave Aaron Smith 29.03.2012 01:21

@DaveAaronSmith: b переходит в начало предыдущего слова, что совсем не одно и то же. Это примерно эквивалентно $ge.

Paul Ruane 29.03.2012 12:23

Я использую _ и g_ для визуализации / восстановления, поскольку $ также копирует / удаляет символ новой строки (LN).

Ernest 08.05.2014 17:08

Для меня $ переходит в конец текущей строки экрана (когда она завернута). Мне не удалось понять почему. g_ - единственный способ добраться до фактического конца линии.

ezuk 21.01.2015 13:07

@ezuk $ идет до конца строки, даже если для меня завернут. Я не знаю настроек, чтобы изменить его поведение. Возможно, ваш .vimrc переназначил его на g$?

Paul Ruane 21.01.2015 13:51

@ PaulRuane: Ты справился. Я использую spf13, и строка 310 .vimrc отображает его. Теперь возникает вопрос, как мне отключить его позже в цепочке загрузки (простое изменение этой строки будет перезаписано в следующий раз, когда я вытащу spf13).

ezuk 21.01.2015 15:00

Я понял. Мне пришлось добавить let g:spf13_no_wrapRelMotion = 1 в мой файл .vimrc.before.local, чтобы отключить это поведение, характерное для spf13.

ezuk 21.01.2015 15:07

Мне нравятся nnoremap L g_ и nnoremap <leader>L L, также в режиме ожидания оператора и в визуальном режиме. Более интуитивно понятный и менее растянутый.

jazzabeanie 07.02.2017 05:57

_ такой же, как ^ для первого непустого символа в начале строки?

user4104817 26.02.2017 13:45

Во многих случаях, когда мы находимся внутри строки, мы заключаемся в двойные кавычки или при написании оператора мы не хотим нажимать escape, переходить к концу этой строки с помощью клавиши со стрелкой и нажимать точку с запятой (;) только для того, чтобы конец строки. Напишите следующую строку в вашем файле vimrc:

imap <C-l> <Esc>$a

Что говорит линия? Он отображает Ctrl + l на серию команд. Это эквивалентно одновременному нажатию клавиш Esc (командный режим), $ (конец строки), a (добавление).

спасибо за это. Я хотел добавить Ctrl-e обратно в свой vim, чтобы перейти к концу строки, как на моей первой машине, и не знал, как

tristanbailey 27.04.2012 18:36

Как говорится в принятом ответе, вы можете нажать A, чтобы сделать то же самое.

trysis 16.07.2015 00:34

@trysis, вы неправильно поняли, это не уходит из режима редактирования, что очень приятно.

Marconi 15.10.2015 13:38

Ты прав. vim, безусловно, позволяет вам делать намного больше за гораздо меньшее время с такими вещами. @razorxpress, незначительной корректировкой будет imap <C-l> <Esc>A, что делает Ctrl + l эквивалентом нажатия Esc (выход из режима вставки), затем A (добавление в конец строки).

trysis 15.10.2015 18:22

Я думаю, что более идиоматическим способом сопоставить это было бы inoremap <C-l> <C-o>A.

bennyty 02.05.2017 22:40

Я не понимаю, чем два нажатия клавиш (Ctrl+l) лучше, чем ... два нажатия клавиш, которые встроены (<Esc>A).

hundredrab 24.06.2020 12:07

Также обратите внимание на различие между линия (или, возможно, физической линией) и линия экрана. Строка заканчивается символом конца строки ("\ n"). Линия экрана - это то, что отображается в виде одной строки символов на вашем терминале или на экране. Они расходятся, если у вас есть физические линии, длина которых превышает ширину экрана, что очень часто встречается при написании электронных писем и т. д.

Это различие также проявляется в командах конца строки.

  • $ и 0 перемещаются в конец или начало физической строки или абзаца соответственно:
  • g$ и g0 перемещаются в конец или начало строки или абзаца экрана соответственно.

Если вы всегда предпочитаете последнее поведение, вы можете переназначить ключи следующим образом:

:noremap 0 g0
:noremap $ g$

Как добраться до последнего непробельного символа строки? (будь то линия экрана или физическая линия)

Kamran Bigdely 19.05.2011 00:45

g_ - это последний непробельный знак в строке физический. Как насчет экранной линии?

trysis 16.07.2015 00:36

Самый простой вариант - ввести $. Если вы работаете с блоками текста, вам могут пригодиться команды { и } для перемещения абзаца назад и вперед, соответственно.

Я привык к 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 13.10.2015 07:28

@wchargin правда, подумал вроде не найду какой будет аналог 0? (перейти к первому символу (= столбец 0) строки и перейти в режим вставки)

franssu 09.02.2017 12:06

@franssu: Я знаю только 0i. :-)

wchargin 09.02.2017 16:43

@wchargin - Спасибо за техническую корректность. Я обновил пост.

ap-osd 24.08.2017 08:04

Я не вижу горячую клавишу для 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

Для последних двух команд иногда нужно дважды нажать.

Другие вопросы по теме