2013-03-08 41 views
1

我尝试使用下面的映射来交换的话Vim中:Vim的,换的话用重音字符

" Swap current word with previous one (push word to the left) 
nnoremap <silent> <A-h> "_yiw?\k\+\_W\+\%#<CR>:s/\(\%#\k\+\)\(\_W\+\)\(\k\+\)/\3\2\1/<CR><c-o><cl>:noh<CR> 

" Swap current word with the next one (push word to the right) 
nnoremap <silent> <A-l> "_yiw:s/\(\%#\k\+\)\(\_W\+\)\(\k\+\)/\3\2\1/<CR><c-o>/\k\+\_W\+<CR><c-l>:noh<CR> 

我也有我的vimrc文件以下

set [email protected],48-57,_,192-255,:,# 

以上映射工作正常交换(推文),除非重音字符开始一个单词。由于我用西班牙语写的重音字符经常使用,所以我如何改变正则表达式来解决这个问题?

回答

1

问题出在\_W“match non-WORDs and newline”原子。在Vim中,WORD仅限于ASCII字符,所以你的重音字符在这里匹配并创建一个错误的边界。相反,你想要“非关键字和换行”。由于\K而不是否定\k,我们必须使用\%(\k\@!\_.\)“任何字符(和换行符)不是关键字”。这些是由此产生的映射:

nnoremap <silent> <A-h> "_yiw?\k\+\%(\k\@!\_.\)\+\%#<CR>:s/\(\%#\k\+\)\(\%(\k\@!\_.\)\+\)\(\k\+\)/\3\2\1/<CR><c-o><c-l>:noh<CR> 

nnoremap <silent> <A-l> "_yiw:s/\(\%#\k\+\)\(\%(\k\@!\_.\)\+\)\(\k\+\)/\3\2\1/<CR><c-o>/\k\+\%(\k\@!\_.\)\+<CR><c-l>:noh<CR> 
0

我通常喜欢宏,可以说我们有像下面一行(是的,它不会使我只是用它来解释任何意义):

experimentación无情

现在vim我会开始这一行,然后按q键,然后是记录键(任何字母数字键)让我们说'l'。 然后记录我的行动:

  1. 按“一页”,剪下的字,(资本w和假设字空白结束)

  2. 继续随e结束字的

  3. 按 '一'

  4. 按 ''

  5. 键入 'p' 来添加一个空格糊。

我知道它太麻烦了第一次,但一旦你救了它,你还记得它由“@l”,“L”任何一对的话是我们的记录键从上面。

+0

我宁愿使用我在原始文章中定义的映射。那么你知道如何改变正则表达式吗? – petobens 2013-03-08 20:56:40

+0

对不起,我没有太多配置vim map的经验。 – n3rV3 2013-03-09 05:00:43