Як перейти до кінця рядка у Vim?


1192

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


19
Основні команди vim, охоплені менш ніж за 10 хвилин youtube.com/watch?v=71YTkxUNwmg
eomeroff

14
Що поганого в проведенні декількох хвилин на пробіг через vimtutor? Це вже частина вашої установки Vim і показує основи.
Даш-Том-Банг

@ dash-tom-bang Ну тут вони отримали досить високий бал ... :) Але так, ти маєш рацію vimtutor- це чудово. Напевно, вони про це не знали?
Прифтан

Відповіді:


2050

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

Протилежність Aє I(режим вставки в початок рядка), як в сторону. Якщо натиснути лише ^волю, ви кладете курсор на перший символ непробілу рядка.


81
Перейти до останнього не пустимg_
SergioAraujo

2
Іноді кориснішою є версія, g_оскільки вона не містить порожніх символів
rogercampos

6
Варіант _g дійсно корисний при роботі у візуальному режимі, оскільки дозволяє використовувати рядок без будь-якого нового рядка в кінці.
Грег Роббінс

2
Хоча клавіші Home і End працюють на звичайній клавіатурі, $ і ^ потрібні, коли ви використовуєте ноутбук :)
Шрідар Шарнобат

Ви повинні додати ^ до списку.
Тек

304

Як багато людей сказали:

  • $ приводить вас до кінця рядка

але також:

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

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

8
@kami: хоча описи різні, вони, як видається, поводяться однаково. Однак команда труби |може приймати кількість, наприклад 3 | перейти до третьої колони.
Пол Руан

136
  • $ переходить до останнього символу на рядку.
  • g _ переходить до останнього непробільного символу.

  • g $ переходить до кінця рядка екрана (коли буферна лінія накладена на кілька рядків екрана)


Я відчуваю, що g_ - це те саме, що і $ b
Дейв Аарон Сміт

3
@DaveAaronSmith: bпереходить до початку попереднього слова, яке зовсім не те саме. Це приблизно рівнозначно $ge.
Пол Руан

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

Для мене $ переходить до кінця поточного рядка екрана (при завершенні). Я не встиг зрозуміти, чому. g_це єдиний спосіб, коли я знайшов фактичний кінець рядка.
ezuk

@ezuk $переходить до кінця рядка навіть тоді, коли мене обгортають. Я не знаю, що немає налаштування, щоб коригувати її поведінку. Можливо, це було переоформлено вашим .vimrc до g$?
Пол Руан

66

Головне питання - кінець рядка

$ переходить до кінця рядка, залишається в командному режимі

A переходить до кінця рядка, переходить у режим вставки

І навпаки - початок рядка (технічно перший непробільний символ)

^ переходить до початку рядка, залишається в командному режимі

I (з великого регістру i) переходить до початку рядка, переходить у режим вставки

Далі - початок рядка (технічно перший стовпець незалежно від пробілу )

0 (нуль) переходить до початку рядка, залишається в командному режимі

0i (нуль, за яким йде мале i) переходить до початку рядка, переходить у режим вставки

Для тих, хто починає вивчати vi, ось гарне вступ до vi, перерахувавши поруч команди vi до типових рухів курсору GUI Editor Editor та клавіш швидкого доступу.

vi редактор для користувачів Windows


3
Аналог не Iє, 0але ^обидва Iі ^переходять до першого непробільного символу рядка, але 0переходять до нуля стовпця (як випливає з назви).
wchargin

@wchargin правда, думав, що я не можу знайти аналог 0? (перейдіть до першого символу (= стовпець 0) рядка та перейдіть до режиму вставки)
franssu

@franssu: Єдине, про що я знаю 0i. :-)
wchargin

@wchargin - Дякую за технічну коректність. Я оновив публікацію.
ap-osd

42

Якщо ваш поточний рядок обертається навколо видимого екрана на наступний рядок, ви можете використовувати g $, щоб дістатися до кінця рядка екрана .


3
Я тільки що виявив , заздалегідь в очікуванні вгору і вниз по командам з г марки ВІМ перемістити курсор екрану на основі, а не порядкового. Тобто gj і gk дозволяють вам рухатися вгору і вниз по довгій лінії. Дійсно корисна.
Друклес

1
Також було виявлено, що введення gw і щось, здається, змінюють j і k постійно, щоб поводитись так. Не знаєте, як і чому. Хтось може це пояснити?
Друклес

4
@Druckles: трохи пізня відповідь, але якщо ви все ще цікавитесь (або якщо хтось ще читає це) gwі gqє командами, які переформатують текст. (див. :h gwта :h gq) Що, мабуть, трапилось, що ти зробив gw{motion}і змінив текст, щоб рядки екрану відповідали фактичним рядкам.
pandubear


13

У багатьох випадках, коли ми перебуваємо всередині рядка, ми укладаємо подвійну цитату, або під час написання заяви ми не хочемо натискати клавішу Escape і переходити до кінця цього рядка клавішею зі стрілкою та натискати крапкою з комою ( ;) просто для закінчення лінія. Введіть наступний рядок у свій файл vimrc :

imap <C-l> <Esc>$a

Що говорить рядок? Він відображає Ctrl + l на ряд команд. Це еквівалентно натискання Esc(командний режим), $(кінець рядка), a(додавання) відразу.


дякую за це. Я хотів додати Ctrl-e назад до свого vim, як перейти до кінця рядка, як на моїй першій машині, і не знаю, як
tristanbailey

1
Як говорить прийнята відповідь, ви можете натиснути кнопку A, щоб зробити те саме.
trysis

4
@trysis ви неправильно зрозуміли, це не відходить від режиму редагування, що дуже приємно.
Марконі

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

3
Я думаю, що більш ідіоматичним способом відображення цього було бinoremap <C-l> <C-o>A
bennyty

12

Перевага клавіші 'End' полягає в тому, що вона працює як у звичайному, так і в режимі вставки.

'$' працює лише в звичайному / командному режимі, але він також працює в класичному редакторі vi (добре знати, коли vim недоступний).


38
Для чого ви повісите режим вставки ?! Жоден звичайний порядний громадянин не їде туди після денного світла. Ви знаєте, що відбувається там, чи не так? Код там зникає, знаєте? Він зникає, і більше ніколи не чути.
Ладья

3
Дякую за це, оскільки мені подобається залишатися в режимі вставки, коли я ввійшов у нього. На жаль, у мого ноутбука немає клавіші завершення. :(
промінь

12

Також відзначте різницю між рядком (або, можливо, фізичною лінією) та лінією екрана . Рядок закінчується символом End Of Line ("\ n"). Екранна лінія - те, що трапиться, відображатиметься як один рядок символів у терміналі чи на екрані. Вони розбиваються, якщо у вас фізичні лінії довші за ширину екрана, що дуже часто зустрічається при написанні електронних листів тощо.

Відмінність відображається і в командах кінцевих рядків.

  • $і 0переходимо до кінця чи початку фізичного рядка чи абзацу відповідно:
  • g$і g0перейдіть до кінця або початку рядка екрана або абзацу відповідно.

Якщо ви завжди віддаєте перевагу останній поведінці, ви можете перезавантажити такі клавіші:

:noremap 0 g0
:noremap $ g$

1
Як дістатися до останнього непробільного рядка? (будь то екранна або фізична лінія)
Kamran Bigdely

g_це останнє непробільне місце фізичної лінії. Як щодо екранного рядка?
trysis

10

Натисніть, Aщоб увійти в режим редагування, починаючи з кінця рядка.


9

Або є очевидна відповідь: натисніть Endклавішу, щоб перейти до кінця рядка.


1
Так, mac-термінал - це те, що я помітив, що викрадає ключі і не передає їх разом із речами, що працюють всередині терміналу. Одна з речей, яка мене дратує, коли я трохи використовую Mac.
davr

Весь сенс використання vim не в тому, щоб користуватися клавішами типу "Кінець". Ніколи не залишайте домашньої сварки.
Джон Тороддсен

7
На Mac немає клавіші завершення.
kenorb

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

9

Я не бачу гарячої клавіші для macbook для використання vim у стандартному терміналі. Сподіваюся, це комусь допоможе. Для користувачів macOS (тестовано на macbook pro 2018):

fn+ - перехід до початкового рядка

fn+ - перехід до кінцевої лінії

fn+ - переміщення сторінки вгору

fn+ - переміщення сторінки вниз

fn+ g - перемістити курсор на початок документа

fn+ shift + g - перемістіть курсор до кінця документа

Для останніх двох команд колись потрібно натиснути двічі.


6

Можливо, не пов'язане, але якщо ви хочете почати новий рядок після поточного рядка, ви можете використовувати o в будь-якому місці рядка.


3

Найпростішим варіантом буде ввести ключ $. Якщо ви працюєте з текстовими блоками, ви можете оцінити команду {і }щоб перемістити абзац назад і вперед відповідно.


2

Мене звикли Home / End переводити мене до початку та кінця рядків у режимі Insert (з використання в 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-, але це також не вкладається в подібні місця.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.