LINUX.ORG.RU

vim выделение блока

 


0

4

есть блок кода отделенный \n сверху и снизу. становлюсь я на первую строку блока и нажимаю c-v c-], и в результате у меня выделен блок кода. да не просто выделен. выделение зацепило \n внизу. Такая же ситуация, если выделять снизу вверх c-[. тогда только цепляет верхнюю \n. Вся эта история напрягает тем, что при вырезании блока или комменте цепляется пустая строка. при комменте это чревато тем, что при раскомментировании выделяем блок сверху c-v и нажимаем c-] и у нас т.к пустая строка убрала разделение блоков, выделяется комментируемый блок + незакомментированный ниже.

вопросы:

1. как убрать сие

2. может это фича ? если да, то в чем прелесть такого поведения ?

3. может я неправильно с блоками работаю ?

★★★★

Это же выделение по тегам. Я не в курсе, что там ты пытаешься делать, но если ты работаешь с комментированием (а не с макросами), то юзай выделение строками, а не блоком, это как минимум логичнее.

Вообще, вводных маловато. Какой ЯП? Примеров кода тоже накидай.

r3lgar ★★★★★ ()

есть блок кода отделенный \n сверху и снизу

Откуда эта манера описывать текст словами?

Zmicier ★★★★★ ()
Ответ на: комментарий от r3lgar

становлюсь я на первую строку блока и нажимаю c-v c-], и в результате у меня выделен блок кода. да не просто выделен. выделение зацепило \n внизу. Такая же ситуация, если выделять снизу вверх c-[.

Это же выделение по тегам.

По-моему, товарищ путает с-] с ], ибо очевидно, что эксейпом (c-[) куда-либо перемещаться сложно.

Zmicier ★★★★★ ()
Последнее исправление: Zmicier (всего исправлений: 2)
Ответ на: комментарий от r3lgar

Плюс, у меня складывается впечатление, что товарищ на самом деле спрашивает, как ему раскомментировать абзац, закомментированный одним символом в начале строки. (Как только люди не извращаются, лишь бы Емаксом не пользоваться.)

Zmicier ★★★★★ ()
Последнее исправление: Zmicier (всего исправлений: 1)
Ответ на: комментарий от bryak

Ну дословно то, что вы хотите: 0 vip C-v, однако повторюсь — вы что, пытатетесь навелосипедировать раскомментирование абзаца?

И нет, я не знаю, почему не работает вполне ожидаемое 0 C-v ip — напишите багрепорт, если хотите.

Zmicier ★★★★★ ()
Последнее исправление: Zmicier (всего исправлений: 2)
Ответ на: комментарий от Zmicier

Да, ТС ввёл в заблуждение. Я даже подумал, что я с недосыпу в вим разучился, что у меня не получается его вводную воспроизвести.

Что он хочет — пока остаётся загадкой, так что от предложений/предположений я пока воздержусь, пока ТС не даст кусок кода с тем как оно есть, как оно делает, и как он хочет, чтобы делало.

bryak, читай выше, давай примеры.

r3lgar ★★★★★ ()
Ответ на: комментарий от Zmicier

Как только люди не извращаются, лишь бы Емаксом не пользоваться

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

mos ★★☆☆☆ ()

1. как убрать сие

xnoremap { {j
xnoremap } }k

Если не в начале строки, то нужно еще навелосипедить восстановление колонки.

Для комментирования можно использовать https://github.com/tpope/vim-commentary.

salsa ()

Окей, у нас есть

a = 'aaaaaa1'
a = 'aaaaaa2'
a = 'aaaaaa3'
a = 'aaaaaa4'
a = 'aaaaaa5'
a = 'aaaaaa6'
a = 'aaaaaa7'

a = 'bbbbbb1'
a = 'bbbbbb2'
a = 'bbbbbb3'
a = 'bbbbbb4'
a = 'bbbbbb5'
a = 'bbbbbb6'
a = 'bbbbbb7'

a = 'cccccc1'
a = 'cccccc2'
a = 'cccccc3'
a = 'cccccc4'
a = 'cccccc5'
a = 'cccccc6'
a = 'cccccc7'

Становимся на a = 'bbbbbb1' и выполняем C-v(выделяем строку), потом ] и gcc(комментирование выделенного) и получаем

a = 'aaaaaa1'
a = 'aaaaaa2'
a = 'aaaaaa3'
a = 'aaaaaa4'
a = 'aaaaaa5'
a = 'aaaaaa6'
a = 'aaaaaa7'

# a = 'bbbbbb1'
# a = 'bbbbbb2'
# a = 'bbbbbb3'
# a = 'bbbbbb4'
# a = 'bbbbbb5'
# a = 'bbbbbb6'
# a = 'bbbbbb7'
#
a = 'cccccc1'
a = 'cccccc2'
a = 'cccccc3'
a = 'cccccc4'
a = 'cccccc5'
a = 'cccccc6'
a = 'cccccc7'

Хорошо, я стою на a = 'cccccc7' и хочу раскомментировать блок bbbbb. Я нажимаю [j. Почему j ? Потому что мы после [ прыгнем выше строки # a = 'bbbbbb1'. А прыгнули мы так высоко, потому что когда я комментировал блок, то закомментилась пустая строка и блок bbbb и cccc - стали одним блоком. Итак, я а строке # a = 'bbbbbb1'. Теперь нажимаем C-v ] gcc и, получаем следующее:

a = 'aaaaaa1'
a = 'aaaaaa2'
a = 'aaaaaa3'
a = 'aaaaaa4'
a = 'aaaaaa5'
a = 'aaaaaa6'
a = 'aaaaaa7'

# # a = 'bbbbbb1'
# # a = 'bbbbbb2'
# # a = 'bbbbbb3'
# # a = 'bbbbbb4'
# # a = 'bbbbbb5'
# # a = 'bbbbbb6'
# # a = 'bbbbbb7'
# #
# a = 'cccccc1'
# a = 'cccccc2'
# a = 'cccccc3'
# a = 'cccccc4'
# a = 'cccccc5'
# a = 'cccccc6'
# a = 'cccccc7'
Т.е вместо раскомментирования блока bbbb, мы получили двойное комментирование bbbb и сссс.

А если весь этот случай пройти сначала, но C-v ] k gcc, то мы корректно выделим блок. Но это опять же, постоянная балансировка выделенных блоков j\k нужна.

bryak ★★★★ ()
Последнее исправление: bryak (всего исправлений: 2)
Ответ на: комментарий от bryak

Наверное, поэтому commentary не комментирует пустые строки.

Такое неправильное поведение будет только в визуальном режиме, для gc} пустая строка не будет затронута. Вообще } это «exclusive motion», но в визуальном режиме они работают как «inclusive».

xaizek ★★★★★ ()

Всем спасибо g} является решением.

bryak ★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.