Перейти к содержимому

Как выйти из редактирования вхождений

  • автор:

Как отсюда выйти: шпаргалка по Vim

Потратив несколько минут на эту статью, вы познакомитесь с основами популярного текстового редактора Vim (и научитесь быстро выходить из него).

Обложка поста Как отсюда выйти: шпаргалка по Vim

Вы собираетесь создать файл crontab и внезапно оказываетесь в этом странном редакторе по умолчанию. В том, в котором всё никак не разберётесь.

ESC? Ничего не произошло. CTRL + C? Нет. ESC ESC ESC? Неа. Вы в тупике.

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

С вами бывало такое? Конечно, бывало. Что ж, потратив несколько минут на эту статью, вы познакомитесь с основами редактора Vim (и научитесь быстро выходить из него).

Vim по умолчанию установлен во многих операционных системах (включая большинство дистрибутивов Linux и macOS), поэтому хотя бы поверхностные знания о нём лишними не будут. Откройте терминал и введите vim .

В умелых руках Vim может стать мощнее многих IDE. И, разумеется, он не ест сотни мегабайт памяти лишь для отображения пустого файла (да, Eclipse, это о тебе).

Основы

Некоторые из нижеописанных команд начинаются с двоеточия: нажав его, появится подсказка, в которой будет указана полная команда. Команды без двоеточий — это скорее горячие клавиши, которые можно использовать в режиме по умолчанию (в нём запускается Vim). Команды, написанные ЗАГЛАВНЫМИ БУКВАМИ — это отдельные клавиши: например, ESC — это клавиша Esc на вашей клавиатуре.

Все команды чувствительны к регистру и должны выполняться вне режима insert.

Выход из Vim

Выход без сохранения изменений:

Как выйти из редактирования вхождений

Вкладка «Информация о ссылке» (диалоговое окно «Редактирование вхождений»)

Предоставляет наглядные средства для идентификации редактируемой ссылки и управляет выбором вложенных объектов.

Вхождение, выбранное для редактирования, и все его вложенные элементы (внешние ссылки и т.д.).

Здесь указываются только те вложенные вхождения, которым принадлежат выбранные объекты. Если в списке присутствует несколько вхождений, необходимо выбрать из них внешнюю ссылку или блок для редактирования. Допускается одновременное редактирование только одного вхождения.

Здесь отображается образец для быстрого просмотра содержимого текущего выбранного вхождения.

Образ вхождения выглядит так, как оно последний раз было сохранено в чертеже. После сохранения изменений в отредактированном вхождении изменения образца для просмотра не происходит.

Траектория

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

Выбирать вложенные объекты автоматически

Включение и отключение автоматического выбора вложенных объектов для редактирования.

Если отметить эту опцию, для редактирования будут доступны все объекты в выбранном вхождении.

Подтверждать выбор вложенных объектов

Включение и отключение выбора вложенных объектов для редактирования пользователем.

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

Выберите вложенные объекты: Выбрать во вхождении объекты, которые необходимо отредактировать

Вкладка «Параметры» (диалоговое окно «Редактирование вхождений»)

Предоставляет опции редактирования вхождений.

Использовать уникальные имена слоев, стилей и блоков

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

Если этот флажок установлен, программа модифицирует имена объектов во внешних ссылках, добавляя префикс «$#$» (так же, как при их внедрении из внешних ссылок). Если флажок снят, никаких изменений с именами не происходит. Если объектам не были присвоены уникальные имена, они получают свойства объектов текущего исходного чертежа с такими же именами.

Вывести описания атрибутов для редактирования

Управление извлечением и отображением описаний переменных атрибутов при редактировании вхождений блоков.

Если флажок «Вывести описания атрибутов для редактирования» установлен, атрибуты (кроме постоянных) делаются невидимыми; на экране появляются их описания, которые можно редактировать. При сохранении изменений в исходный чертеж описания блока атрибуты в имеющихся вхождениях остаются без изменений. Новые описания атрибутов вступают в силу только для последующих вхождений блока. Атрибуты имеющихся вхождений не изменяются. Опция не воздействует на внешние ссылки и блоки без атрибутов.

Блокировать объекты, не входящие в рабочий набор

Блокирование объектов, не входящих в рабочий набор. Данная опция служит для предотвращения случайного выбора и редактирования объектов исходного чертежа в режиме редактирования вхождения.

Блокированные объекты ведут себя так же, как и объекты на блокированных слоях. Заблокированные объекты при попытке их отредактировать в набор не включаются.

Почему нельзя копировать во время редактирования вхождений?

Форумы CADUser → Autodesk → AutoCAD → Почему нельзя копировать во время редактирования вхождений?

Страницы 1

Чтобы отправить ответ, вы должны войти или зарегистрироваться

Сообщения 4

#1 Тема от User32 15 июля 2008г. 10:03:02

Тема: Почему нельзя копировать во время редактирования вхождений?

Я все перетыркал как мог, но так и не понял как во время редактирования внешней ссылки по месту скопировать объект.
Часто бывает необходимость быстро скопировать объекты с внешней ссылки к себе на чертеж.
AutoCAD пишет ошибку:
Команда: _copyclip ** Команда COPYCLIP не разрешена во время редактирования
вхождений **

Ускорить вход/выход из режима редактирования блока

Что хотелось бы ускорить:
1.При использование команды Edit Block In-place автоматически входить в блок без всплывающей таблички Reference Edit, если блок не содержит внутри себя другие блоки.
2.При выходе из режима редактирования и сохраняя изменения в блоке также миновать всплывающую табличку, автоматически жать кнопку ОК в ней.

Просмотров: 14424
Регистрация: 20.03.2008
Сообщений: 2,648
Сообщение от EgorS

1.При использование команды Edit Block In-place автоматически входить в блок без всплывающей таблички Reference Edit.

Чтоб входить в редактор блока просто дважды кликнув на нем, надо прописать в Операциях при двукратном нажатии на блок (команда _cui) макрос

^C^C(command "_BEDIT")

Сообщение от EgorS
если блок не содержит внутри себя другие блоки.

— этого ограничения я не знаю, как добиться. А что должно случиться, если он всё-таки содержит внутри себя другие блоки?

Сообщение от EgorS

2.При выходе из режима редактирования и сохраняя изменения в блоке также миновать всплывающую табличку, автоматически жать кнопку ОК в ней.

Например, создать кнопку, повесить на нее макрос

^C^C(command "_BCLOSE" "_S")

и закрывать редактор этой кнопкой. Или горячие клавиши определить. В 2011-м так работает на ура.
Последний раз редактировалось skkkk, 19.08.2013 в 13:22 .
Регистрация: 16.01.2010
Сообщений: 65
Сообщение от skkkk

этого ограничения я не знаю, как добиться. А что должно случиться, если он всё-таки содержит внутри себя другие блоки?

Работать как это работает стандартно, выкидывать окно Reference Edit, где можно выбрать под-блок.

Сообщение от skkkk

(command "_BCLOSE" "_S")

и закрывать редактор этой кнопкой. Или горячие клавиши определить. В 2011-м так работает на ура.

сделал как ^C^C_refclose;_save ,но табличка все равно всплывает как и прежде, _BCLOSE команда это для выхода из Block Editor-а, я же захожу в редактирование через Edit Block In Place, тут задачу можно свести к тому — как макросом нажать кнопку OK ?

Последний раз редактировалось EgorS, 19.08.2013 в 03:12 .
Регистрация: 20.03.2008
Сообщений: 2,648
Сообщение от EgorS

Проглядел про этот инплэйс.
Тогда так: для включения режима редактирования по месту на Операцию при двукратном нажатии на блок бьем макрос:

^C^C(command "_-REFEDIT" "_OK" "_ALL" "_Y")

или опции можно настроить как надо, а для закрытия с сохранением макрос:

^C^C(command "_REFCLOSE" "_S")

Обращаю внимание, что в данном случае нужно использовать не ^C^C_refclose, а именно лисповскую функцию command — она подавляет диалоговые окна при наличии в ее аргументах опций.
Чтобы обработать ситуацию с вложенными в блок другими блоками, надо подумать и покопаться, на что сейчас я времени пока не имею. Но это реально, например повесить на Операцию. лисп, который проверит, есть ли в блоке блоки, — и если есть, выдаст окно. Если все правильно понял, позже смогу посмотреть.

Последний раз редактировалось skkkk, 19.08.2013 в 13:23 .
Регистрация: 16.01.2010
Сообщений: 65

Cпасибо! С обоими макросами разобрался, пока что сделал 2 разных вхождения в блок, стандартное и макросовое, повесил на разные хоткеи.

Сообщение от skkkk

Чтобы обработать ситуацию с вложенными в блок другими блоками, надо подумать и покопаться, на что сейчас я времени пока не имею. Но это реально, например повесить на Операцию. лисп, который проверит, есть ли в блоке блоки, — и если есть, выдаст окно. Если все правильно понял, позже смогу посмотреть.

все правильно! тут как я понимаю самое сложное проверить лиспом наличие подблоков у блока, а дальше все просто. Сам скачал книгу по лиспу, буду потиху ковырять.

Регистрация: 20.03.2008
Сообщений: 2,648
Сообщение от EgorS
тут как я понимаю самое сложное проверить лиспом наличие подблоков у блока, а дальше все просто
С использованием этого кода от Алексея Кулика сложного вообще ничего нет — всё просто

 
(defun block-double-click ( / ss) (vl-load-com) (defun get-block-vla-obj-list (vla-block_ref / block_def block_cont res) (setq block_def (vla-item (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object))) (vla-get-effectivename vla-block_ref) ) ;_ end of vla-item ) ;_ end of setq (setq block_cont ((lambda (/ res) (vlax-for sub block_def (setq res (cons sub res)) ) ;_ end of vlax-for (reverse res) ) ;_ end of lambda ) ) ;_ end of setq block_cont ) (if (setq ss (ssget "_I")) (if (vl-some (function (lambda (x) (= (vla-get-ObjectName x) "AcDbBlockReference"))) (get-block-vla-obj-list (vlax-ename->vla-object (ssname ss 0))) ) (command "_REFEDIT") (command "_-REFEDIT" "_OK" "_ALL" "_Y") ) (princ "\nБлок не выбран") ) (princ) )

Сохраняем лисп-файл как обычно в папку, прописанную в путях доступа, а на Операцию. ставим макрос

^C^C(if(null (block-double-click))(Load "block-double-click.lsp"));(block-double-click)

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

^C^C(block-double-click)

Регистрация: 16.01.2010
Сообщений: 65

Cупер- все работает великолепно!
но появились пожелания: нельзя ли добавить условие, чтоб находясь в режиме редактирования блока можно было бы залазить в его под-блоки этим же кодом (хоткеем соотвествено)?

По теме: http://forums.autodesk.com/t5/Visual. k/td-p/3454228 - быстрое создание блока, для тех кто не заботится по именам блоков )

Регистрация: 20.03.2008
Сообщений: 2,648
Сообщение от EgorS

нельзя ли добавить условие, чтоб находясь в режиме редактирования блока можно было бы залазить в его под-блоки этим же кодом (хоткеем соотвествено)?

Методом сканирования системных переменных по ключевому запросу "REF" я обнаружил переменую REFEDITNAME (только чтение). Если она не равна "" (т.е. пустой строке), то это означает, что мы сейчас находимся в режиме редактирования блока или внешней ссылки с именем, совпадающим со значением этой переменной. Попробуем этим воспользоваться, добавив еще одно условие. Если REFEDITNAME = "", то все по-старому: вложенных блоков нет - открывается контекстное редактирование блока, есть - видим окно со списком вложенных блоков. Иначе - происходит закрытие редактирования с сохранением, а затем контекстное редактирование блока второго уровня
Пока получилось вот что: находясь в режиме Edit Block In-place основного блока, делаем тройной клик на блоке второго уровня и вот мы уже редактируем его. Не выходит пока ликвидировать третий клик. Он запрашивает вхождение блока. Не прокатывает вариант, как с блоком первого уровня, когда _-REFEDIT сам понимает, какой блок ему открыть. А как его (это вхождение) программно определить по даблклику на блоке - ума не приложу. Попытка вычленить его из набора (ssget "_I") успехом не венчается.

 
(defun block-double-click () (vl-load-com) (defun get-block-vla-obj-list (vla-block_ref / block_def block_cont res) (setq block_def (vla-item (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object))) (vla-get-effectivename vla-block_ref) ) ;_ end of vla-item ) ;_ end of setq (setq block_cont ((lambda (/ res) (vlax-for sub block_def (setq res (cons sub res)) ) ;_ end of vlax-for (reverse res) ) ;_ end of lambda ) ) ;_ end of setq block_cont ) (if (ssget "_I") (if (= (getvar "REFEDITNAME") "") (if (vl-some (function (lambda (x) (= (vla-get-ObjectName x) "AcDbBlockReference"))) (get-block-vla-obj-list (vlax-ename->vla-object (ssname (ssget "_I") 0))) ) (command "_REFEDIT") (command "_-REFEDIT" "_OK" "_ALL" "_Y") ) (command "_REFCLOSE" "_S" "_-REFEDIT" pause "_NEXT" "_OK" "_ALL" "_Y") ) ) (princ) )

Но я нашел во всем этом одно удобство: находясь в режиме контекстного редактирования, делаем даблклик по любому блоку и нажимаем Escape. Что произойдет, как думаете? Мы выйдем из режима контекстного редактирования в обычный режим модели, сохранив изменения в блоке.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *