LINUX.ORG.RU

Vim: редактирование строки, длиною в файл. Как?

 


1

2

КАК перенастроить vim, чтобы нормально перемещаться в длинных строках?

«у vi есть два режима: бибикать и всё портить» (c) Холиварненько Вроде бы уже не первый год пользуюсь vim, не только конфиги им правлю, заточил плагинами до уровня python ide, но так и не понял, как редактировать длинные строки, чтобы не пригорало.

Например vim ~/.mozilla/firefox/*.default/extensions.json - весь конфиг в одну строку. Я могу что в командном, что в модальном режимах перемещаться только влево-вправо, в начало в конец. Я НЕ могу использовать клавиши вверх-вниз, PgDn-PgUp. Это сильно подвыбешивает, приходится в командном мудрить с поиском паттерна, если его вообще знаешь или скипать с Ctrl. Об листинге и правке такого файла в vim можно забыть.

ПОЧЕМУ так? Может я не постиг истинного Дао? Падаваны, ЧЯДНТ?

Я НЕ могу использовать клавиши вверх-вниз, PgDn-PgUp

В vim и не нужно использовать эти клавиши.

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

Интересное решение. То есть, чтобы переместиться на 10 строк ниже, надо отбарабанить 20 нажатий или 20gj Сложновато, хотелось бы попроще.

hikikomori ★★★
() автор топика
Ответ на: комментарий от anarquista

А какие нужно? Хорошо. Пусть hjkl. Но по неведомой логике в (простите за тавтологию) многострочной строке jk не работают.

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

зачем барабанить, если можно просто ввести «20gj»?

но правильным вариантом мне представляется просто обрабатывать такие файлы в несколько этапов: сначала отформатировать, поправить в vim и снова привести в неудобную форму после правки.

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

И так все длинные строки во всех файлах подгонять под загадочное поведение vim?

Я конечно могу питоном его привести в нормальный вид:

filename = 'config.json'
data = json.load(open(filename))
json.dump(data, open(filename, 'w'), indent=4)


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

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

И так все длинные строки во всех файлах подгонять

Зачем вообще вам нужны длинные строки? Ты бы еще обуфицированный код предложил править.

и не всегда хочется и можно бить файл на строки.

Тогда нужен hexedit какой-нибудь, а не вим, потому что ты правишь блоб, а вим - это редактор текста, а не блобов.

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

КАК перенастроить vim, чтобы нормально перемещаться в длинных строках?

Он из коробки перемещается нормально. Если тебе надо, чтобы перемещался не по строкам настоящим, а по строкам экранным, добавь в ~/.vimrc

noremap <silent> k gk
noremap <silent> j gj

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

Это сильно усложняет и превращает из программиста в зайца-барабанщика. Это в макросах хорошо, в простой правке я хочу jk вверх-вниз не между строками, но и в строке. Где здесь нарушение идеи vim, как исправить?

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

Забинди…

Хоть тот же ctrl-d перебинди, что ты как маленький.

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

А ты думаешь у тебя как-то иначе gj вызывается? Ты виму говоришь не «когда я жму j, нажимай gj», а «когда я жму j, выполняй не next-line, а next-display-line». И «тормозить» оно будет микросекунду, пока дефолтный биндинг переопределяет.

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

Позиция «не надо мне, не надо всем» вызвает недоумение. Бывают длинные строки в обычных txt. Тоже их в hexedit править? Я не должен подгонять файл под редактор. Файл вообще может быть не мой, а генерироваться системой, мне его каждый раз на строки раскладывать?

Да вообще, меня жутко подбешивает даже 3 строчные строки в питоне, когда приходится, чтобы попасть в середину строки заниматься прицельным снайпингом типа 22l

Почему я не могу просто перемещаться в строке как в строках?

hikikomori ★★★
() автор топика

Да будет холивар!

не первый год пользуюсь vim

чтобы переместиться на 10 строк ниже, надо отбарабанить 20 нажатий или 20gj Сложновато, хотелось бы попроще

Видимо, пользуешься ты им исключительно в качестве наказания.

заточил плагинами до уровня python ide

Больные люди… Будут грызть кактус, но не использовать профильное ПО.

как редактировать длинные строки

ed. Я абсолютно серьёзно.

чтобы не пригорало

Найми двух индусов. С твоим восприятием Vim иначе никак.

весь конфиг в одну строку

Повесь на BufReadPost (или на BufReadPre, если хочешь шатать файл на диске) пайп с преобразованием в человекопонятное форматирование, и на BufWritePre (или на BufWritePost, если хочешь шатать на диске) пайп с минификацией.

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

Тут дело не в перемещении, а во всяких наворотах типа подсветки синтаксиса и т.п.

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

Проверил. Подтверждаю слова ответившего вам коллеги. Глючит и тормозит. Даже подвисает - отпустил, а оно ещё едет. Плюс поведение jk переопределяется для всех строк, а не внутри одной. Плюс это не решает с обычным курсором на стрелках..

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

Позиция «не надо мне, не надо всем» вызвает недоумение.

Оно не «мне не нужно». Оно принципиально не нужно. У тебя вообще не должно быть такой херни, как мегастроки в коде правка текстовых мегапортянок руками. Надо проблему решать до этого.

crutch_master ★★★★★
()
Последнее исправление: crutch_master (всего исправлений: 1)

А json вообще не надо править. Загоняешь его в любой repl, меняешь структуру скриптом, сохранаешь. Смысл его править руками, если он жирнее 20 строк? Это же машиночитаемый формат.

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

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

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

Повесь на BufReadPost (или на BufReadPre, если хочешь шатать файл на диске) пайп с преобразованием в человекопонятное форматирование, и на BufWritePre (или на BufWritePost, если хочешь шатать на диске) пайп с минификацией.

Можно подробнее? Что это и что это даст?

hikikomori ★★★
() автор топика
Ответ на: комментарий от mord0d

Но какой кейс? Зачем страдать, когда можно не страдать? Что за конченая система может выдавать невменяемые txt портянки, которые после неё еще надо руками допиливать? Зачем каждый раз допиливать руками, если можно распарсить и сделать скрипт? Неужели нравится этим заниматься весь день?

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

Для ТСа - это блоб, потому что он принципиально не хочет его парсить, а хочет ковыряться в этом говне ручками. У меня от одной мысли от этого батхёрт, а ему норм.

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

After installing the plugin, use :LongLines to toggle the longline mode and :LongLines!

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

hikikomori ★★★
() автор топика
Ответ на: комментарий от crutch_master

Не должно, но есть. А может в полноэкранном режиме ещё ок, а в окне tmux уже не торт, что тогда? А может в коде присутствуют длинные regexp, я в них переводы строк не стал бы ставить. Может разное быть, редактор должен быть готов к этому и оперировать экранными строками как реальными.

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

Вот смотри, у тебя есть куча брёвен и тебе надо наколоть из них дров. Для этого есть бензопила, колун, топор, кувалда, клин, но нет, это всё не нужно, ты хочешь пилить их лобзиком. И вот ты приходишь и спрашиваешь, что делать, лобзик не пропиливает толстое бревно. Бред? Но именно так всё и есть.

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

А может в коде присутствуют длинные regexp

Значит его надо переписать и выкинуть, потому что он нечитаемый.

А может в полноэкранном режиме ещё ок, а в окне tmux уже не торт, что тогда?

Писать так, чтобы везде влезало. Если строчку разбивает на две - это еще не страшно.

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

Что это

Это autocmd (если по-простому — хуки).

и что это даст?

Это даст то, что ты будешь редактировать читабельный файл, а храниться он будет в исходном виде.

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

Но какой кейс? Зачем страдать, когда можно не страдать? Что за конченая система может выдавать невменяемые txt портянки, которые после неё еще надо руками допиливать? Зачем каждый раз допиливать руками, если можно распарсить и сделать скрипт? Неужели нравится этим заниматься весь день?

А ты погугли значение ника топикстартера, тебе сразу всё будет понятно. xD

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

Для ТСа - это блоб, потому что он принципиально не хочет его парсить, а хочет ковыряться в этом говне ручками. У меня от одной мысли от этого батхёрт, а ему норм.

Забудьте про .json, это всего лишь пример. Как я обожаю эти темы про спросишь «как?» а тебе как в Одессе ответят «а зачем?, вам это не нужно!»

Вот от этого батхёрд. Почему я в двухстрочной строке ВЫНУЖДЕН добираться до символа НИЖЕ курсора последовательно право или через педкальный газ gj? А не просто нажать ОДНУ единственную клавишу вниз? Я не хочу перемещаться по реальным строкам, хочу по экранным. Я человек, а не машина. Должен быть такой ключ в конфиге, думаю.

Можете и дальше пинать тапками, кричать, что я не вкуриваю дао vimа, что не надо редактировать файлы со строками длинее окна редактора, не надо вообще vim, итд.

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

Почему я в двухстрочной строке ВЫНУЖДЕН добираться до символа НИЖЕ курсора последовательно право или через педкальный газ gj?

Потому что тебе _должно_ быть не удобно, чтобы ты так больше не писал.
А вообще - перемапь стрелки на gj, в чём проблема?

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

Это даст то, что ты будешь редактировать читабельный файл, а храниться он будет в исходном виде.

Лишние сущности чреваты непредвиденными фичами. Я хочу видеть файл какой он есть, чтобы потом не удивляться, чего это он не бибикал, а всё равно всё испортил)

А ты погугли значение ника топикстартера, тебе сразу всё будет понятно. xD

Ну вот, уже и до ника до$блись.

hikikomori ★★★
() автор топика
Ответ на: комментарий от crutch_master

USER должен испытывать СТРАДАНИЕ?) Увы, к счастью я не мазохист.

А вообще - перемапь стрелки на gj, в чём проблема?

Я попробовал. Тормоза и залипания. Такое угребищное перемещение не вариант.

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

Увы, к счастью я не мазохист.

Не похоже.

Я попробовал. Тормоза и залипания

На двух строках - УМВР. Если у тебя там брёвна - то ССЗБ и hexedit.

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

Да, выше уже писали для hjkl. Можно на курсоре оставить, чтобы hjkl не загаживать, но всё равно в модальном режиме не работают. Сначала снайпинг в командном, затем в модальный править, ESC, и сначала.

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

я из из попровеньких mcedit и nano в vim пытаюсь сагитировать

Зачем? Как я говорил уже, что лобзиком брёвна не пилят. Сделай мне так же в nano/mcedit. Сложно? Иди дальше ковыряй свои блобы.

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

Хорошо, давайте согласимся, что для средних строк это годится, а для длинных не очень. Ещё какие-либо решения кроме gj gk существуют? Например в модальном режиме чтобы работало.

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

Лишние сущности чреваты непредвиденными фичами.

Я хочу видеть файл какой он есть

Тогда жри что дают и не выделывайся!

А ты погугли значение ника топикстартера, тебе сразу всё будет понятно. xD

Ну вот, уже и до ника до$блись.

ЭТТА ЛОР, ДЕТКА! © Chelobaka

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

Ещё какие-либо решения

Скорее всего нет, потому что никто не задавался такой целью. Можно было сделать альтернативные endline? Да. /r/n же сделали. Но произвольные символы считать endline никому не нужно и даже в голову не пришло.
Так что пили костыль, который будет расставлять переносы, а потом удалять.

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

Интересное решение. То есть, чтобы переместиться на 10 строк ниже, надо отбарабанить 20 нажатий или 20gj Сложновато, хотелось бы попроще.

У меня в edit mode стрелки перемещают курсор по визуальным строкам (аналогично gk, gj), в normal mode - по «файловым» строкам.

А вообще, тебе правильно сказали: отформатируй нормально JSON перед редактированием.

P. S. А еще процентом можешь премещаться по открывающим/закрывающим скобкам.

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

Но произвольные символы считать endline никому не нужно и даже в голову не пришло.

gEnd, gHome

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

У меня в edit mode стрелки перемещают курсор по визуальным строкам (аналогично gk, gj), в normal mode - по «файловым» строкам.

У меня макрос указанный комрадами выше:

Добавить в ~/.vimrc

# для курсорных клавиш
:noremap <UP> gk
:noremap <DOWN> gj

# для jk
noremap <silent> k gk
noremap <silent> j gj


работает только в командном режиме.
Кстати, что означает <silent> ?

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

:h :map-<silent>

PS vim не для тебя. найди какой-нибудь СуперПуперГипер® редактор дебильныйх файлов, созданных веб-макаками, от Васяна© и юзай.

mos ★★☆☆☆
()

Если тормозит перемещение, скорее всего, дело в подсветке синтаксиса. Попробуй :syntax off — понимаю, неудобно, но на таких строках оно работает с ошибками.

Если тебе не нравится, что в insert и command mode стрелки работают по-разному, то тебе поможет

" или g<DOWN> — вкусовщина
inoremap <DOWN> <C-o>gj
noremap <DOWN> gj
inoremap <UP> <C-o>gk
noremap <UP> gk

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