Бір сөйлемде бірнеше жолды қабылдайтын кезде C ішіндегі желілердегі екі мәлімдемені ауыстырыңыз

Келесі коды бар деп ойлаймын:

int x;
string s = "some very long "
           " string";

Мен бұйрықтың орнын ауыстыратын бір пәрменді алғым келеді:

string s = "some very long"
int x;
           "string";

Мұны оңай жол бар ма?

5
C-M-t ( transpose-sexps ) көмектеседі ме? Болады деп ойлаймын, бірақ, мүмкін, ол C.
қосылды автор Ryan Eastabrook, көзі
Бұл курсорды қай жерге орналастырғаныңызға байланысты болуы мүмкін. Emacs C секс деп санайды, бұл өте күрделі емес. Басқа transpose - * командасының кез келгенін ( transpose-paragraph ?) Кез келген жерде көруге болатынын көруге болады. Қалай болғанда да, сіз сұрайтын нәрсені ұсынатын үшінші тарап кітапханалары болуы мүмкін, және, мүмкін, біреу сізге бұл туралы білуге ​​мүмкіндік береді.
қосылды автор Ryan Eastabrook, көзі
Мен мыналарды ұсынамын: 1) өтініштердің біреуін ескеріңіз; 2) «жау» деген сөз 3) «өтініш» деген сөзді жаңа орынға қойыңыз. Өтінімнің басында (?? жолдың басы) бірінші нүктелі үтірге дейінгі макросты жасаған кезде, жаңа сызықтан кейін алға қадамды алға қарай қадамдық нүктелі үтірді іздеп, содан кейін қоюға мүмкіндік қосыңыз. Содан кейін сіз осы макросты орындағыңыз келетін нәрсеге қолдана аласыз. (мүмкін, пернетақта мен тінтуір әрекеттері арқылы қадамдарды жасау үшін тезірек LOT) Бұл макросты emacs іске қосу файлына сақтаңыз
қосылды автор Alexander Prokofyev, көзі
Жоқ, ол өте өзгеше нәрсе жасайды.
қосылды автор Josh Belmont, көзі
қосылды автор andrewb, көзі

2 жауаптар

Мен smartparens пайдалануды ұсынамын. Non-Lisp тілдері үшін ол «гибридті s-expression» . Оның sp-transpose-hybrid-sexp командасы сіздің мысалыңызда тікелей жұмыс істемейді, бірақ егер сіз осы екі жолды жақшаға орауға дайын болсаңыз, ол жұмыс істейді (сонымен бірге Emacs әлдеқайда жақсы қосымша жақшамен). Егер сіз оны келесі мәтінде іске қоссаңыз string s = кез келген жерде екі декларацияны дұрыс ауыстырады:

int x;
string s = ("some very long "
            " string");
1
қосылды

anchored-transpose may be another option.

Cx t дегенге cx t кодын енгізіңіз, содан кейін бірінші нұсқауды белгілей аласыз, Cx t түймесін басыңыз, екінші нұсқауды белгілеп, Cx t және бұл екі мәлімдеме ауыстырылады. Бірінші көзқараста ЕМЕС өте ыңғайлы сияқты көрінеді, сондықтан сіз оны басқа мәлімдемені тез белгілейтін басқа бумалармен қолдансаңыз жақсы болады.

EDIT: Мен бұл анкерленген-транспозициялық ) бұл арнайы жағдайда жақсы шешім емес екенін түсіндім. Аймақты жылдам белгілесеңіз, аймақты өлтіріп, оны қотару үшін C-w жасауыңызға болады. анкерленген-транспозициялық sexp немесе statement сияқты жай емес кездейсоқ мәтіндер болмайтын бірнеше жалпы жағдайларды қамтуы керек.

0
қосылды