[C] в каком редакторе редактировать? [re: задчки на C]
А это смотря в чем писать. Есть люди которые до сих пор пишут в far-e.
Есть люди которые до сих пор пишут в far-eНехрен в фаре писать! Все нормальные люди уже давно в vi першли!
vi -
Уж лучше я буду всю жизнь писать в ФАРе.
Вы когда-нибудь видели интуитивно понятные среды, типа Visual Studio, Borland C++ Builder, да хотя бы Borland C++3.1 ?
Уж лучше я буду всю жизнь писать в ФАРе.
Вы когда-нибудь видели интуитивно понятные среды, типа Visual Studio, Borland C++ Builder, да хотя бы Borland C++3.1 ?
интуитивно-понятность не имеет ничего общего с эффективностью
Видел однажды Visual Studio.
За 10 мин не смог найти, куда там код вбивать - интуиция не та, наверное.
За 10 мин не смог найти, куда там код вбивать - интуиция не та, наверное.
Видели.
vim (не vi!) мне нравится больше.
Хотя бы потому, что им можно польховаться в окне PuTTY. 
vim (не vi!) мне нравится больше.
Хотя бы потому, что им можно польховаться в окне PuTTY. 
да, если за 10 минут из трех подокошек, которые в студии по умолчанию, не понял, в которое вбивать код (при условии, что в два окошка не удается вбить ничего) - наверно, с интуицией серьезные проблемы. Я сел - и сразу начал писать. При том, что до тех пор ни разу не работал в виндузе (только в досе) и ни разу не писал на си (только читал советские брошюрки).
давно это было
вроде бы ни одного окна, куда сразу можно было вбивать, не было
надо ж ещё сказать, на каком языке это, и т.д.
вроде бы ни одного окна, куда сразу можно было вбивать, не было
надо ж ещё сказать, на каком языке это, и т.д.
не владею виаем, поэтому некомпетентен в сравнении. Но мне кажется, что студия - очень удобный редактор. Еще работал с мальтиэдитом, с блокнотом, с фаром, борландом и всякой прочей фигней, студия понравилась больше всех. Я в ней даже хтмл пишу и иногда текстовые файлы.
А если хочешь научиться сразу писать правильные программы, то нужно пользоваться редактором echo!
Вот так это можно делать в никсах
#echo 'include <stdio.h>' > myprog.c
#echo 'int main ( int argc, char * argv[] ) ' >> myprog.c
и т. д.
Вот так это можно делать в никсах
#echo 'include <stdio.h>' > myprog.c
#echo 'int main ( int argc, char * argv[] ) ' >> myprog.c
и т. д.
эффективностьюСтародумачи небрюхочувств ангсоц.
Вот по-моему, ФАР весьма эффективный редактор.
В нем есть все что нужно, ентер вводит новую строку, бекспейс стирает предыдущий символ, стрелочки на клаве двигают курсор туда, куда скажешь. Автоотступ есть. Есть выделение блоков стрелочками с шифтом. Есть простые операции копирования, вырезания, вставления, отмены последнего действия (такие же, как и в винде, во всех остальных приложениях). Подсветка синтаксиса для кучи языков есть.
А в vi все эти же действия делаются неинтуитивно понятно. С моей точки зрения.
эффективный редактор не обязан быть "интуитивно-понятным"
Вы еще не сказали, что такое "такая охуенная эффективность", которая заставляет вас пожертвовать понятностью интерфейса.
+1. пользуюсь mcedit, и очень доволен.
> заставляет вас пожертвовать понятностью интерфейса.
вот только не надо передёргиваний
понятность имеет мало общего с "интуитивной понятностью", о которой шла речь чуть выше
сложный интерфейс может стать естественным и понятным после обучения,
в то время как "интуитивная понятность" означает возможность сделать что-либо без обучения
(при длительном использовании средства обучение совсем не является недостатком)
вот только не надо передёргиваний
понятность имеет мало общего с "интуитивной понятностью", о которой шла речь чуть выше
сложный интерфейс может стать естественным и понятным после обучения,
в то время как "интуитивная понятность" означает возможность сделать что-либо без обучения
(при длительном использовании средства обучение совсем не является недостатком)
+1
кроме того, vim -- это просто круто.
кроме того, vim -- это просто круто.

Если писать программы на некотрых языках программирования, то эффективность vi будет не лучше, чем у интуитивно-понятных специализированных редакторов для этих языков (например Delphi, Visual Studio).
А если хочешь научиться сразу писать правильные программы, то нужно пользоваться редактором echo!могет быть я и не прав, но
cat > file.txt
здесь ctrl+D более шустрый способ набить файл, особенно если делаешь copy-paste

Вы еще не сказали, что такое "такая охуенная эффективность", которая заставляет вас пожертвовать понятностью интерфейса.понять можно один раз. какая разница потом?
2 недели на усвоение рефлексов в vim, и забываешь, что сначала он кажется не удобным.
+1. пользуюсь mcedit, и очень доволен.Аналогично. mcedit/nedit (дома и на работе соответственно) + ddd + snavigator. Всё, для 99% прикладных задач ничего больше не нужно(подразумевается, что sh/perl/tcl/tickle/awk/sed и _grep_ тоже известны).
Вы забыли еще об Emacs! А в студии удобно только С++ набирать, да и то основной плюс - это автокомпилит, а возьми язык поэкзотичней и студия немедленно превращается в полный отстой.
Рекомендую Eclipse. Для C++ есть плагин CDT. Если что-то не нравится или язык экзотический, можно написать свой плагин.
Есть такая штука - WYSIWYG.
И она рулит.
Иначе зачем в виме делали такое позерство, как адекватная реакция на клавиши со стрелочками (типа даже прокрутка команд есть) и надписями Insert и Delete?
И она рулит.
Иначе зачем в виме делали такое позерство, как адекватная реакция на клавиши со стрелочками (типа даже прокрутка команд есть) и надписями Insert и Delete?
Я не понял твоего поста.
Как WYSIWYG соотносится с кнопочками на клавиатуре?
Как WYSIWYG соотносится с кнопочками на клавиатуре?
Как WYSIWYG соотносится с кнопочками на клавиатуре?Типа, если это шутка, то довольно-таки плоская.
Это не шутка. Я действительно не понимаю, что связывает wysiwyg и клавиатуру.
Я не про всю клавиатуру говорил, если что. Я имел в виду клавиши навигации и редактирования.
wytiwys - вот ю тайп из вот ю си 

Хм. Интересно, а какую ещё реакцию vim'а на эти кнопки можно ожидать?
В конце концов, vim написан вовсе не для того, что б им было неудобно пользоваться.
В конце концов, vim написан вовсе не для того, что б им было неудобно пользоваться.
Интересно, а какую ещё реакцию vim'а на эти кнопки можно ожидать?
^]]A, ^]]B, и так далее...
А смысл?
Ещё раз, vim существует не для того, что б им было неудобно пользоваться.
Ещё раз, vim существует не для того, что б им было неудобно пользоваться.
А смысл?
Типа, смысл в приучении программеров к командному стилю редактирования, как полной противоположности Visual Studio.
Почему же ed'ом никто не пользуется?
Ты вторую строчку принципиально игнорируешь?
Хрен! если нету фара - в vim. если нету vim - в фаре
Не гнать на фар!

Не гнать на фар!

Согласен.
Но у меня только TC, поэтому vim.
Но у меня только TC, поэтому vim.

полностью согласен.
а еще одна из фишек вертикальное выделение. еще ни одного похожего редактора не встречал
а еще одна из фишек вертикальное выделение. еще ни одного похожего редактора не встречал
Что это за зверь - вертикальное выделение ? Ctrl-V в виме ?
> Что это за зверь - вертикальное выделение ?
Это которое - Alt + мышь в word-е
Это которое - Alt + мышь в word-е
ну блин извините. в ворде не прогал
.
а вообще перепробовав много редакторов, я скромно скажу, что лучше всего редактор заточенный под определенный язык.
Мнение автора может не совпадать с мнением автора. Автор
.а вообще перепробовав много редакторов, я скромно скажу, что лучше всего редактор заточенный под определенный язык.
Мнение автора может не совпадать с мнением автора. Автор
Развели недофлейм какой-то по поводу редакторов
Почитать старые флеймы на тему vim vs emacs на каком-нибудь LOR и то интереснее и полезнее будет: потому как там хоть часть народу была хороша знакома с обоими редакторами и аргументы соответствующие были. А тут vim в основном ругает народ, не осиливший его или не захотевший осилить
Почитать старые флеймы на тему vim vs emacs на каком-нибудь LOR и то интереснее и полезнее будет: потому как там хоть часть народу была хороша знакома с обоими редакторами и аргументы соответствующие были. А тут vim в основном ругает народ, не осиливший его или не захотевший осилить

echo это только половина редактора. Ещё нужны head и tail.
Для глобального поиска -- grep, для замены ed или awk.
Для глобального поиска -- grep, для замены ed или awk.
В нем есть все что нужно, ентер вводит новую строку, бекспейс стирает предыдущий символ, стрелочки на клаве двигают курсор туда, куда скажешь. Автоотступ есть. Есть выделение блоков стрелочками с шифтом. Есть простые операции копирования, вырезания, вставления, отмены последнего действияДа это ж vim!
С поправкой: откат/накат (стековый) не только последнего действия а всех.
+ выделение синтаксиса (для любого языка)
+ автодополнение
+ гибкая система замены, работающая с регулярными выражениями
+ поддержка редактирования в одной кодировке, а сохранения в другой
+ ...
Объясняю:
интуитивная понятность = малое время обучения всем доступным возможностям данного инструмента; чаще всего соответствует инструментам с малым спектром возможностей;
эффективность = малое время, затрачиваемое на выполнение конкретной работы данным инструментом; чаще всего соответствует инструментам сложным, требующим сравнительно долго обучения работы с ними; а также (в случае программ) -- не требующим при работе низкоскоростных интерфейсов (например, мышей)
PS. "Единственным интуитивно понятным интерфейсом обладает материнская грудь". Не помню кто сказал.
интуитивная понятность = малое время обучения всем доступным возможностям данного инструмента; чаще всего соответствует инструментам с малым спектром возможностей;
эффективность = малое время, затрачиваемое на выполнение конкретной работы данным инструментом; чаще всего соответствует инструментам сложным, требующим сравнительно долго обучения работы с ними; а также (в случае программ) -- не требующим при работе низкоскоростных интерфейсов (например, мышей)
PS. "Единственным интуитивно понятным интерфейсом обладает материнская грудь". Не помню кто сказал.
И куда же она рулит?
В WYSIWYG редакторе Word после печати документа получается то же самое безобразие, которое было на экране.
В не WYSIWYG TeX'е после печати получается результать превосходящий по качеству многое
вполне приличные книги.
В WYSIWYG редакторе Word после печати документа получается то же самое безобразие, которое было на экране.
В не WYSIWYG TeX'е после печати получается результать превосходящий по качеству многое
вполне приличные книги.
Это ты не настроил терминал. Или точнее, это делатели твоего дистрибутива настроили
vim под другой терминал.
Штука такая, что в отличие от Студио и прочей виндоус дряни,
нормальные программы работают на разных архитектурах. Это по той простой причине, что
здравомыслящие люди не хотят изучать один редактор для работы на домашнем писюке,
другой -- для работы на рабочей станции, третий -- для работы с мейнфреймом, четвёртый -- ...
По этому они берут один (например, vi) и компилируют его под этими разными системами.
Но у каждой из этих систем, своя клавиатура. И кнопочки везде разные. У PC кнопочки тебе привычны, у альфы -- они другие, у vt200 -- третьи. Так что vi'ю приходится корректно обрабатывать
все возможные клавиатуры (а также такую стандартную ситуацию, когда сам vi запущен на одной
машине, а человек сидит по ssh или telnet'у на другой машине с другой клавиатурой).
Так что ты просто расскажи vim'у (который вырос из vi'я) какие кнопочки у тебя есть и что делать, когда ядро посылает ему эти
vim под другой терминал.
Штука такая, что в отличие от Студио и прочей виндоус дряни,
нормальные программы работают на разных архитектурах. Это по той простой причине, что
здравомыслящие люди не хотят изучать один редактор для работы на домашнем писюке,
другой -- для работы на рабочей станции, третий -- для работы с мейнфреймом, четвёртый -- ...
По этому они берут один (например, vi) и компилируют его под этими разными системами.
Но у каждой из этих систем, своя клавиатура. И кнопочки везде разные. У PC кнопочки тебе привычны, у альфы -- они другие, у vt200 -- третьи. Так что vi'ю приходится корректно обрабатывать
все возможные клавиатуры (а также такую стандартную ситуацию, когда сам vi запущен на одной
машине, а человек сидит по ssh или telnet'у на другой машине с другой клавиатурой).
Так что ты просто расскажи vim'у (который вырос из vi'я) какие кнопочки у тебя есть и что делать, когда ядро посылает ему эти
^]]A, ^]]Bэскейп последовательности.
ed очень даже пользуются. В скриптах. Потому что это строковый редактор, а не экранный.
интуитивная понятность = малое время обучения всем доступным возможностям данного инструмента; чаще всего соответствует инструментам с малым спектром возможностей;В большинстве случаев нужна только базовая функциональность, т.е. базовый набор интуитивно-понятных простых операций. С помощью этого набора можно делать почти всё.
Более сложные и нужные функции больше зависят от типа редактируемого текста - например, синтаксический анализатор для конкретного языка программирования.
+1
"Видел один текстовый редактор - видел их все" не совсем правильный принцип.
vim достаточно понятен, быть может не интуитивно, но легко воспринимаем.
Благо в комплекте идёт vimtutor - это обычный текстовый файл, пройдя его быстро узнаёшь базовые возможности. файл небольшой, осилить его можно минут за 30, как в нём написано.
например, вставка/выделение: найдите в хелпе вашего любимого редактора место, в котором описано "как выделить текст", "как скопировать текст в буфер", "как вставить текст из буфера"..
vim достаточно понятен, быть может не интуитивно, но легко воспринимаем.
Благо в комплекте идёт vimtutor - это обычный текстовый файл, пройдя его быстро узнаёшь базовые возможности. файл небольшой, осилить его можно минут за 30, как в нём написано.
например, вставка/выделение: найдите в хелпе вашего любимого редактора место, в котором описано "как выделить текст", "как скопировать текст в буфер", "как вставить текст из буфера"..
> С помощью этого набора можно делать почти всё.
Вертикальное выделение - это базовая возможность?
Отсутствие этой возможности можно получить с помощью других операций?
Вертикальное выделение - это базовая возможность?
Отсутствие этой возможности можно получить с помощью других операций?
Есть редактор, создатели которого гордятся тем, что у них энтер не вводит новую строку, а переходит на следующую (не вставляет пустой строки и не разрывает строку, если нажать энтер посередине строки). 
Знаешь такой?

Знаешь такой?
А оно кому-то нужно? Ни разу не пользовался.
Может, мало программил или не на тех языках, где это полезно.
Лично мне вертикальное выделение сильно помогает в C, Delphi, TeX.
Очень полезно вертикальные блоки пользовать, когда надо столбец пробелов вставить, например "в строках с 10 по 110 вставить 4 пробела на 7 позицию" - вертикальным блоком на "ура", можно не только пробелы.. запятые-скобки-точкисзапятой массово вставлять тоже помогает.
Лично мне вертикальное выделение сильно помогает в C, Delphi, TeX.
Очень полезно вертикальные блоки пользовать, когда надо столбец пробелов вставить, например "в строках с 10 по 110 вставить 4 пробела на 7 позицию" - вертикальным блоком на "ура", можно не только пробелы.. запятые-скобки-точкисзапятой массово вставлять тоже помогает.
Интересно, что ты там такое прогаешь на С и Дельфи.
> в строках с 10 по 110 вставить 4 пробела на 7 позицию
Ни разу не возникало такой задачи. Что это за язык такой своеобразный, где такое может понадобиться? Не знаю, чего там в Delphi, но для C/C++, равно как и для LaTeX не вижу применения этой фиче.
Ни разу не возникало такой задачи. Что это за язык такой своеобразный, где такое может понадобиться? Не знаю, чего там в Delphi, но для C/C++, равно как и для LaTeX не вижу применения этой фиче.
Комментарии в перле, например.
vim позволяет закомментарить нужное число строк как минимум в C, C++, PHP, Perl, TeX, Sh, LISP, Python, HTML, XML, Java без вертикального выделения.
http://www.vim.org/scripts/script.php?script_id=4
http://www.vim.org/scripts/script.php?script_id=23
http://www.vim.org/scripts/script.php?script_id=4
http://www.vim.org/scripts/script.php?script_id=23
Например, сделать такой код:
const
//
// Типы операторов
// ===============
//
// Анализатор C,C++
// ----------------
Op_C_Unknown = 1000; // Неопределён
OP_C_Decl = 1001; // Объявление переменной
OP_C_Null = 1002; // Пустой оператор
OP_C_Expr = 1005; // Арифметическое выражение
OP_C_If = 1006; // Условный оператор
OP_C_For = 1007; // Оператор цикла
OP_C_Goto = 1011; // Оператор перехода
OP_C_Complex = 1012; // Составной оператор
OP_C_Break = 1013; // Оператор выхода из цикла
OP_C_Continue = 1014; // Оператор продолжения цикла
OP_C_Return = 1015; // Оператор выхода из функции
OP_C_Fork = 1016; // Ветвление
OP_C_Fictive = 1017; // Фиктивный оператор после метки
OP_C_CaseEntry= 1018; // Фиктивный оператор для case, default
OP_C_Asm = 1019; // Ассемблерная вставка
OP_C_Try = 1020; // Обработчик исключений
OP_C_Catch = 1021; // Перехват исключений
OP_C_Throw = 1022; // Возмущение исключения
OP_C_Switch = 1023; // Оператор выбора
OP_C_Do = 1024; // Оператор do
OP_C_While = 1025; // Оператор while
//
// Анализатор Pascal-Delphi
// ------------------------
Op_Pas_Unknown = 2000; // Неопределён
OP_Pas_Decl = 2001; // Объявление переменной
OP_Pas_Null = 2002; // Пустой оператор
OP_Pas_Expr = 2003; // Арифметическое выражение
OP_Pas_If = 2004; // Условный оператор
OP_Pas_For = 2005; // Оператор цикла
OP_Pas_Goto = 2006; // Оператор перехода
OP_Pas_Complex = 2007; // Составной оператор
OP_Pas_Break = 2008; // Оператор выхода из цикла
OP_Pas_Continue = 2009; // Оператор продолжения цикла
OP_Pas_Fork = 2010; // Ветвление
OP_Pas_Fictive = 2011; // Фиктивный оператор после метки
OP_Pas_Asm = 2012; // Ассемблерная вставка
OP_Pas_Try = 2013; // Начало секции перехвата исключений
OP_Pas_Except = 2014; // Перехват исключений
OP_Pas_Finally = 2015; // ...
OP_Pas_Raise = 2016; // Возмущение исключения
OP_Pas_Case = 2017; // Оператор выбора
OP_Pas_Repeat = 2018; // Оператор repeat
OP_Pas_While = 2019; // Оператор while
OP_Pas_Call = 2020; // Вызов функции или процедуры
OP_Pas_Ass = 2021; // Оператор присваивания
OP_Pas_Exit = 2022; // Оператор выхода из функции
OP_Pas_Empty = 2023; // Пустой оператор
OP_Pas_Label = 2024; // Метка
Op_Pas_CaseLabel= 2025; // Метка альтернативы в операторе case
Op_Pas_With = 2026; // Оператор With
OP_Pas_Halt = 2027; // Функция Halt
...
OpNames: array [0..SizeOPNames-1] of TOPName
=(
// C, C++
(OpID:Op_C_Unknown; FullName:'Неопределён'; ShortName:'~~~'
(OpID:OP_C_Decl; FullName:'Объявление переменной'; ShortName:'Decl'
(OpID:OP_C_Null; FullName:'Пустой оператор'; ShortName:'[]'
(OpID:OP_C_Expr; FullName:'Арифметическое выражение'; ShortName:'Expr'
(OpID:OP_C_If; FullName:'Условный оператор'; ShortName:'If'
(OpID:OP_C_For; FullName:'Оператор цикла'; ShortName:'For'
(OpID:OP_C_Goto; FullName:'Оператор перехода'; ShortName:'Goto'
(OpID:OP_C_Complex; FullName:'Составной оператор'; ShortName:'{...}'
(OpID:OP_C_Break; FullName:'Оператор выхода из цикла'; ShortName:'Break'
(OpID:OP_C_Continue; FullName:'Оператор продолжения цикла'; ShortName:'Continue'
(OpID:OP_C_Return; FullName:'Оператор выхода из функции'; ShortName:'Return'
(OpID:OP_C_Fork; FullName:'Ветвление'; ShortName:'-<'
(OpID:OP_C_Fictive; FullName:'Фиктивный оператор после метки'; ShortName:'Label'
(OpID:OP_C_CaseEntry; FullName:'Фиктивный оператор для case, default';ShortName:'SwLabel'
(OpID:OP_C_Asm; FullName:'Ассемблерная вставка'; ShortName:'Asm'
(OpID:OP_C_Try; FullName:'Обработчик исключений'; ShortName:'Try'
(OpID:OP_C_Catch; FullName:'Перехват исключений'; ShortName:'Catch'
(OpID:OP_C_Throw; FullName:'Возмущение исключения'; ShortName:'Throw'
(OpID:OP_C_Switch; FullName:'Оператор выбора'; ShortName:'Switch'
(OpID:OP_C_Do; FullName:'Оператор do'; ShortName:'Do'
(OpID:OP_C_While; FullName:'Оператор while'; ShortName:'While'
// Pascal-Delphi
(OpID:Op_Pas_Unknown; FullName:'Неопределён'; ShortName:'~~~'
(OpID:OP_Pas_Decl; FullName:'Объявление переменной'; ShortName:'Decl'
(OpID:OP_Pas_Null; FullName:'Пустой оператор'; ShortName:'[]'
(OpID:OP_Pas_Expr; FullName:'Арифметическое выражение'; ShortName:'Expr'
(OpID:OP_Pas_If; FullName:'Условный оператор'; ShortName:'If'
(OpID:OP_Pas_For; FullName:'Оператор цикла'; ShortName:'For'
(OpID:OP_Pas_Goto; FullName:'Оператор перехода'; ShortName:'Goto'
(OpID:OP_Pas_Complex; FullName:'Составной оператор'; ShortName:'{...}'
(OpID:OP_Pas_Break; FullName:'Оператор выхода из цикла'; ShortName:'Break'
(OpID:OP_Pas_Continue;FullName:'Оператор продолжения цикла'; ShortName:'Continue'
(OpID:OP_Pas_Fork; FullName:'Ветвление'; ShortName:'-<'
(OpID:OP_Pas_Fictive; FullName:'Фиктивный оператор после метки'; ShortName:'Label'
(OpID:OP_Pas_Asm; FullName:'Ассемблерная вставка'; ShortName:'Asm'
(OpID:OP_Pas_Try; FullName:'Начало секции перехвата исключений'; ShortName:'Try'
(OpID:OP_Pas_Except; FullName:'Перехват исключений'; ShortName:'Except'
(OpID:OP_Pas_Finally; FullName:'...'; ShortName:'Finally'
(OpID:OP_Pas_Raise; FullName:'Возмущение исключения'; ShortName:'Raise'
(OpID:OP_Pas_Case; FullName:'Оператор выбора'; ShortName:'Case'
(OpID:OP_Pas_Repeat; FullName:'Оператор repeat'; ShortName:'Repeat'
(OpID:OP_Pas_While; FullName:'Оператор while'; ShortName:'While'
(OpID:OP_Pas_Call; FullName:'Вызов функции или процедуры'; ShortName:'Call'
(OpID:OP_Pas_Ass; FullName:'Оператор присваивания'; ShortName:':='
(OpID:OP_Pas_Exit; FullName:'Оператор выхода из функции'; ShortName:'Exit'
(OpID:OP_Pas_Empty; FullName:'Пустой оператор'; ShortName:'[]'
(OpID:OP_Pas_Label; FullName:'Метка'; ShortName:'Label'
(OpId:Op_Pas_CaseLabel;FullName:'Метка альтернативы в операторе case';ShortName:'CaseLabel'
(OpID:Op_Pas_With; FullName:'Операторный блок With'; ShortName:'With'
(OpID:OP_Pas_Halt; FullName:'Функция Halt'; ShortName:'Halt'
Такой код легче делать регексами/киборд макросами. Я проверял.
дело тут вот в чём. этот код набирался не сразу, а развивался.
сначала были константы
Потом потребовалась функция, которая бы по значению value возвращала название константы (=comment)
пусть у неё тривиальный код, например:
как это сделать кеймакросами/регексами?
В С/С++ я знаю извращения другого типа.. За примерами далеко ходить не надо. берём gcc
:
в файле tree.def
А вот так оно используется:
Но в дельфях такое не катит. посему... ручками, ручками..
сначала были константы
name = value; //comment
Потом потребовалась функция, которая бы по значению value возвращала название константы (=comment)
пусть у неё тривиальный код, например:
...
case id of
...
value : Result := 'comment';
...
как это сделать кеймакросами/регексами?
В С/С++ я знаю извращения другого типа.. За примерами далеко ходить не надо. берём gcc
:в файле tree.def
...
DEFTREECODE (INTEGER_CST, "integer_cst", 'c', 0)
/* Contents are in TREE_REAL_CST field. */
DEFTREECODE (REAL_CST, "real_cst", 'c', 0)
/* Contents are in TREE_REALPART and TREE_IMAGPART fields,
whose contents are other constant nodes. */
DEFTREECODE (COMPLEX_CST, "complex_cst", 'c', 0)
/* Contents are in TREE_VECTOR_CST_ELTS field. */
DEFTREECODE (VECTOR_CST, "vector_cst", 'c', 0)
...
А вот так оно используется:
#define DEFTREECODE(SYM, NAME, TYPE, LENGTH) TYPE,
const char tree_code_type[] = {
#include "tree.def"
'x',
#include "c-common.def"
};
#undef DEFTREECODE
/* Table indexed by tree code giving number of expression
operands beyond the fixed part of the node structure.
Not used for types or decls. */
#define DEFTREECODE(SYM, NAME, TYPE, LENGTH) LENGTH,
const unsigned char tree_code_length[] = {
#include "tree.def"
0,
#include "c-common.def"
};
#undef DEFTREECODE
/* Names of tree components.
Used for printing out the tree and error messages. */
#define DEFTREECODE(SYM, NAME, TYPE, LEN) NAME,
const char *const tree_code_name[] = {
#include "tree.def"
"@@dummy",
#include "c-common.def"
};
#undef DEFTREECODE
Но в дельфях такое не катит. посему... ручками, ручками..
Рег. выражениями тоже можно, но мороки больше пока выражение придумываешь/отлаживаешь
copy/paste, а дальше заменяешь:
:b+(\w+):b+=:b+(\w+);:b+//(\w+)
\1 : Result := '\3';
copy/paste, а дальше заменяешь:
:b+(\w+):b+=:b+(\w+);:b+//(\w+)
\1 : Result := '\3';
Рег. выражениями тоже можно, но мороки больше пока выражение придумываешь/отлаживаешьЖжошь! А что по твоему тогда означает "Рег. выражениями"?
copy/paste, а дальше заменяешь:
:b+(\w+):b+=:b+(\w+);:b+//(\w+)
\1 : Result := '\3';
PS. Написал бы уж тогда
\1 : Result := '\3'; //\2
а то непонятно зачем \2 то нужен

> как это сделать кеймакросами/регексами?
Подождика. Ты, кажется, не знаешь, что такое "кеймакрос"!
Объясняю. В своём любимом вижуальнике ты ставиш курсор на начало очередной строчки и жмёшь ctrl+alt+R.
Потом ты аккуратно преобразуешь строчку к нужному виду. Аккуратно == таким образом, чтобы действия не зависили от длины слов, например, используя комбинации (ctrl+rarrow/ctrl+larrow (word right/left. В результате произведённых действий курсор должен оказаться в начале следующей строчки. Замечу, что в процессе строчка может превратиться в несколько строк, можно использовать клипборд, сёрч етс. Потом снова жмёшь ctrl+alt+R.
Потом нужное количество раз жмёшь ctrl+alt+P, редактор каждый раз проигрывает записанную последовательность нажатий.
+ продвинутый метод - залезаешь в макросы, выдираешь оттуда свежезаписанный (он выглядит как процедура на VB сохраняешь куда-нить и подправляешь если хочется чё-нить подправить.
Наличие подобной возможности делает вертикальное выделение совершенно не нужным.
Подождика. Ты, кажется, не знаешь, что такое "кеймакрос"!
Объясняю. В своём любимом вижуальнике ты ставиш курсор на начало очередной строчки и жмёшь ctrl+alt+R.
Потом ты аккуратно преобразуешь строчку к нужному виду. Аккуратно == таким образом, чтобы действия не зависили от длины слов, например, используя комбинации (ctrl+rarrow/ctrl+larrow (word right/left. В результате произведённых действий курсор должен оказаться в начале следующей строчки. Замечу, что в процессе строчка может превратиться в несколько строк, можно использовать клипборд, сёрч етс. Потом снова жмёшь ctrl+alt+R.
Потом нужное количество раз жмёшь ctrl+alt+P, редактор каждый раз проигрывает записанную последовательность нажатий.
+ продвинутый метод - залезаешь в макросы, выдираешь оттуда свежезаписанный (он выглядит как процедура на VB сохраняешь куда-нить и подправляешь если хочется чё-нить подправить.
Наличие подобной возможности делает вертикальное выделение совершенно не нужным.
> А что по твоему тогда означает "Рег. выражениями"?
Да, я в доказательство своих слов привел пример такого рег. выражения.
А ты что подумал?
> а то непонятно зачем \2 то нужен
Чтоб был
Да, я в доказательство своих слов привел пример такого рег. выражения.
А ты что подумал?
> а то непонятно зачем \2 то нужен
Чтоб был
Да, я в доказательство своих слов привел пример такого рег. выражения.Ну я потом уже понял
вообще писать регулярные выражения именно для этих целей не очень трудно, в большинстве случаев достаточно \s*(\S*)\s*(\S*)...
И все таки я пришел к выводу, что perl -n -e лучше, есть вещи которые регекспами не выражаются.Это ты не настроил терминал.Стандартная проблема юнексойдов.
Гипотетически у меня нет времени настраивать терминал, и я практически не знаю как это делается (терминфо с термкапами ниасиливаю).
У PC кнопочки тебе привычны, у альфы -- они другие, у vt200 -- третьи.А вот ненавистная винда делает так, чтобы они были привычны пользователю на _всех_ системах. Так ли это сложно? Думаю, нет. Зачем ебаться с настройкой каждый раз при переходе на другую систему?
Такой код легче делать в редакторах более высокого уровня абстракции.
А вот ненавистная винда делает так, чтобы они были привычны пользователю на _всех_ системах.Ты хотел сказать: на _всех системах который начинаются на Windows_.
В vi команда
:.:s/^[^=]*=[ \t]*\([^;]*\)[^\/]*\/\/\(.*\)$/\1 : Result := '\2';
делает из строки
name = value; //comment
строку
value : Result := 'comment';
Регулярные выражения рулят.
:.:s/^[^=]*=[ \t]*\([^;]*\)[^\/]*\/\/\(.*\)$/\1 : Result := '\2';
делает из строки
name = value; //comment
строку
value : Result := 'comment';
Регулярные выражения рулят.
Стандартная проблема юнексойдов.А я и не знал, что у меня есть такая "стандартная проблема"
Гипотетически у меня нет времени настраивать терминал, и я практически не знаю как это делается (терминфо с термкапами ниасиливаю).

Я ни разу не настраивал терминалы, хотя и знаю, где это делается. И у меня всё работает на ура.
Может, дело в карме?
А вот ненавистная винда делает так, чтобы они были привычны пользователю на _всех_ системах. Так ли это сложно? Думаю, нет. Зачем ебаться с настройкой каждый раз при переходе на другую систему?Винда не запускается на альфе. Попытки были, но они ничем не закончились. Винда ничего не знает
про VT200. Допустим я запускаю телнет с VT200 на винду... уже смешно?
А в природе ещё встречаются X Terminal'ы. Если я вхожу с такого на UNIX машину, вижу привычную оконную
систему - X Windows. Равно как и при входе по ssh с одной UNIX машины на другую.
Попробуй войти удалённо с чего угодно на Windows машину и запустить оконное приложение.
Я тут недавно сидел на Sparc'е, что-то не нашёл там ни word'а, ни даже notepad'а. А вот vi там есть.
У моего отца ноут маковский с Mac OS X (больше известной как FreeBSD) и там тоже есть vi!
Повторяю свой вопрос: зачем изучать новый редактор на каждой платформе?
Равно как и при входе по ssh с одной UNIX машины на другую.В Windows оконное приложение на удалённой машине ещё и звук будет обычным образом играть (на твоём терминале, а не на сервере в стойке в запертом помещении и доступ к локальным дискам этого "терминала" можно ему дать, говорят. Про принтеры и прочую периферию не спрашивал.
Попробуй войти удалённо с чего угодно на Windows машину и запустить оконное приложение.
Ах да, забыл мегафичу - можно отсоединиться от сессии, а потом зайти с другого терминала, и она продолжится. 

А по-подробнее можно?
Как это реально делается?
Как это реально делается?
ну screen тоже не вчера придумали. Или ты имеешь в виду именно окошечки (иксы)?
В меню выхода есть пункт Disconnect session или как-то так.
Как оно в UNIX'е делается, я знаю. А вот про то, что это и под Windows'ом бывает --
в первый раз слышу. Про Windows и спрашивал, как оно там делается.
в первый раз слышу. Про Windows и спрашивал, как оно там делается.
Remote Desktop видимо имелся в винду (для Windows Terminal Server, который есть на каждой серверной версии, и даже урезанный в WinXP). подключение удалённых дисков, принтеров, serial ports, дисплей до 24bit color и прочее
а вот я зато не в курсе, он обязательно виртуальный экран создаёт, или может рисовать окна вперемешку с локальными?
вперемешку нельзя.
весь РД это отдельное окно.
весь РД это отдельное окно.
нет в мире совершенства, всё сосёт
можно запустить сколько хочешь Remote Desktop'ов, а в них уже сколько надо окон %)
зы. все операционные системы - кал ©virgin
зы. все операционные системы - кал ©virgin

Оставить комментарий
Anturag
А indent'а уже не хватает?