vim 的超复杂替换1(已解决)
发表于 : 2009-06-29 11:10
问题提出:
代码移植碰到一个文件格式问题,需要将__asm__(), 替换为__asm{}
由于书写的随意性,源文件__asm__与( 可能有空格。这个好办,但难度是这个(会与不在同一行的)匹配
中间可能会嵌套().
要求将__asm__替换为__asm, 重点是把跟在__asm__后的小括号对()替换为大括号对{},不要动无关()
举例如下:
$ cat 1.txt
static inline void cpu_arm920_cache_clean_invalidate_all(void)
{
__asm__( //you should change this ( to {
" mov r1, #0\n" /* this () can't be change */
" mov r1, #7 << 5\n" /* 8 segments */
"1: orr r3, r1, #63 << 26\n" /* 64 entries */
"2: mcr p15, 0, r3, c7, c14, 2\n" /* clean & invalidate D index */
" subs r3, r3, #1 << 26\n"
); //you should change this ) to }
}
static inline void cpu_arm920_tlb_invalidate_all(void)
{
__asm__ ( //you should change this ( to {
"mov r0, #0\n"
"mcr p15, 0, r0, c7, c10, 4\n" /* drain WB */
"mcr p15, 0, r0, c8, c7, 0\n" /* invalidate I & D TLBs */
); //you should change this ) to }
}
用%s///好像是不行了,因为()有嵌套。
用宏是可以解决问题。我目前是这么做的。()的匹配用%可以找到。
更好的办法应该是用script,这样可以方便的把script 保留或分发。
烦请高手帮忙解决一下这个问题。 3Q!
代码移植碰到一个文件格式问题,需要将__asm__(), 替换为__asm{}
由于书写的随意性,源文件__asm__与( 可能有空格。这个好办,但难度是这个(会与不在同一行的)匹配
中间可能会嵌套().
要求将__asm__替换为__asm, 重点是把跟在__asm__后的小括号对()替换为大括号对{},不要动无关()
举例如下:
$ cat 1.txt
static inline void cpu_arm920_cache_clean_invalidate_all(void)
{
__asm__( //you should change this ( to {
" mov r1, #0\n" /* this () can't be change */
" mov r1, #7 << 5\n" /* 8 segments */
"1: orr r3, r1, #63 << 26\n" /* 64 entries */
"2: mcr p15, 0, r3, c7, c14, 2\n" /* clean & invalidate D index */
" subs r3, r3, #1 << 26\n"
); //you should change this ) to }
}
static inline void cpu_arm920_tlb_invalidate_all(void)
{
__asm__ ( //you should change this ( to {
"mov r0, #0\n"
"mcr p15, 0, r0, c7, c10, 4\n" /* drain WB */
"mcr p15, 0, r0, c8, c7, 0\n" /* invalidate I & D TLBs */
); //you should change this ) to }
}
用%s///好像是不行了,因为()有嵌套。
用宏是可以解决问题。我目前是这么做的。()的匹配用%可以找到。
更好的办法应该是用script,这样可以方便的把script 保留或分发。
烦请高手帮忙解决一下这个问题。 3Q!