Видалення In Vim, а потім вставка без нового рядка


11

Багато разів у vim я хотів би видалити рядок повністю, тому я використовую dd. Однак мені потрібно вставити цю лінію в якусь іншу позицію в межах рядка, але це вставляє нову лінію перед вставкою, отже, мені дуже важко отримати бажаний результат. Наприклад,

while( pasteInHere )
{
    cin >> n; // Delete this line completely with dd
}

коли я це роблю з наведеним вище кодом, я отримую:

while( pasteInHere )
cin >> n; // Delete this line completely with dd
{
}

що дуже далеко від результату, якого я хочу ... як я можу придушити цю поведінку нового рядка або використати інший метод, який робить це дуже ефективно? Я не думаю, що d $ - це добре, тому що мені не тільки потрібно перейти до початку рядка, але якщо я теж хочу видалити порожній рядок, мені потрібно видалити його в іншому реєстрі, я відчуваю, що повинен бути простіший спосіб! Дякую.



1
це не дублікат, як я вже сказав, що я хочу більш ефективний спосіб, ніж перехід до початку рядка, також я фактично хочу видалити повний рядок з символом нового рядка .... не лише вміст рядка
fYre

О, я бачу, що ти маєш на увазі зараз. Просто мені було не зовсім зрозуміло, що ти намагався досягти.
EvergreenTree

1
0Dвидалити рядок, крім розриву рядка. І чим gJоб’єднувати лінії. Тепер ви можете помістити текст без перерви та без порожнього рядка.
Алекс Кролл

Відповіді:


9

Ви можете піти будь-де в рядку над лінією, яку потрібно видалити, а потім натиснути JDі вставити її pв потрібний момент.

  • Jз'єднує два рядки і переміщує вас на початку тексту, який ви хотіли видалити. Це видаляє символ нового рядка та відступ рядка, який потрібно перемістити.
  • D видаляє з поточного положення курсора до кінця рядка, але зберігає символ нового рядка.

Підказка: Ви можете використовувати , :puякщо ви видалили з Dабо ривком з , y$і ви хочете , щоб вставити з нового рядка.


3

Не дуже простий, але трохи ефективніший, і ви також можете створити карти в звичайному режимі для обох послідовностей:

  • янь: потім перейдіть до лінії, яку хочете перейти ^D"_dd
  • вставлення: перейдіть до слова, яке ви хочете замінити, потім viwp

2

Ви можете домогтися чогось, що працює дуже добре imap. Додайте до свого vimrc:

inoremap <c-a> <c-r>1<esc>k$Jxi

Це створить відображення для CTRL-aтого, щоб вставити останній видалений текст (з ddабо подібним). Якщо ви віддаєте перевагу, ви, звичайно, можете використовувати інший ключ для картографування.

Список літератури:

:h i_CTRL-R
:h quote1
:h J

1

Це теж приходить для мене, ніколи не думав оптимізувати його раніше, але це картографування працює:

nmap dil ^d$

dilє «видалення в рядку», подібно до того diw, di"і т.д.


1

Вставити без нового рядка

Помістіть це у свій .vimrc файл:

" Paste yanked line without line breaks before/after cursor position
nnoremap gP i<CR><Esc>PkJxJx
nnoremap gp a<CR><Esc>PkJxJx

Приклад:

<span style="color:">danger</span>

Тепер ви можете ввести gpвставку #D51B3Fпісля того, color:як мій курсор перебуває :у звичайному режимі.

Янка без нової лінії

Використовуйте відповідь флукуса:

" Delete current line without yanking the line breaks
nnoremap dil ^d$

як абревіатура видалення внутрішньої лінії . Це також позбавляється від провідних відступів.


0

Ви можете вибрати текст, який потрібно скопіювати, натиснувши, vа потім взяти його в буфер, натиснувши, yа потім вставити його куди завгодно p. Він не вставляє жодного нового рядка.


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