⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 move5.c

📁 操作系统源代码
💻 C
字号:
/* move5.c *//* Author: *	Steve Kirkendall *	14407 SW Teal Blvd. #C *	Beaverton, OR 97005 *	kirkenda@cs.pdx.edu *//* This file contains the word-oriented movement functions */#include "config.h"#include "ctype.h"#include "vi.h"MARK	m_fword(m, cnt, cmd, prevkey)	MARK	m;	/* movement is relative to this mark */	long	cnt;	/* a numeric argument */	int	cmd;	/* either 'w' or 'W' */	int	prevkey;/* previous command... if 'c' then exclude whitespace */{	REG long	l;	REG char	*text;	REG int		i;	DEFAULT(1);	l = markline(m);	pfetch(l);	text = ptext + markidx(m);#ifndef CRUNCH	/* As a special case, "cw" or "cW" on whitespace without a count	 * treats the single whitespace character under the cursor as a word.	 */	if (cnt == 1L && prevkey == 'c' && isspace(*text))	{		return m + 1L;	}#endif	while (cnt-- > 0) /* yes, ASSIGNMENT! */	{		i = *text++;		if (cmd == 'W')		{			/* include any non-whitespace */			while (i && !isspace(i))			{				i = *text++;			}		}		else if (isalnum(i) || i == '_')		{			/* include an alphanumeric word */			while (i && isalnum(i))			{				i = *text++;			}		}		else		{			/* include contiguous punctuation */			while (i && !isalnum(i) && !isspace(i))			{				i = *text++;			}		}		/* if not part of "cw" or "cW" command... */		if (prevkey != 'c' || cnt > 0)		{			/* include trailing whitespace */			while (!i || isspace(i))			{				/* did we hit the end of this line? */				if (!i)				{					/* "dw" shouldn't delete newline after word */					if (prevkey && cnt == 0)					{						break;					}					/* move to next line, if there is one */					l++;					if (l > nlines)					{						return MARK_UNSET;					}					pfetch(l);					text = ptext;				}				i = *text++;			}		}		text--;	}	/* if argument to operator, then back off 1 char since "w" and "W"	 * include the last char in the affected text.	 */	if (prevkey)	{		text--;	}	/* construct a MARK for this place */	m = buildmark(text);	return m;}MARK	m_bword(m, cnt, cmd)	MARK	m;	/* movement is relative to this mark */	long	cnt;	/* a numeric argument */	int	cmd;	/* either 'b' or 'B' */{	REG long	l;	REG char	*text;	DEFAULT(1);	l = markline(m);	pfetch(l);	text = ptext + markidx(m);	while (cnt-- > 0) /* yes, ASSIGNMENT! */	{		text--;		/* include preceding whitespace */		while (text < ptext || isspace(*text))		{			/* did we hit the end of this line? */			if (text < ptext)			{				/* move to preceding line, if there is one */				l--;				if (l <= 0)				{					return MARK_UNSET;				}				pfetch(l);				text = ptext + plen - 1;			}			else			{				text--;			}		}		if (cmd == 'B')		{			/* include any non-whitespace */			while (text >= ptext && !isspace(*text))			{				text--;			}		}		else if (isalnum(*text) || *text == '_')		{			/* include an alphanumeric word */			while (text >= ptext && isalnum(*text))			{				text--;			}		}		else		{			/* include contiguous punctuation */			while (text >= ptext && !isalnum(*text) && !isspace(*text))			{				text--;			}		}		text++;	}	/* construct a MARK for this place */	m = buildmark(text);	return m;}MARK	m_eword(m, cnt, cmd)	MARK	m;	/* movement is relative to this mark */	long	cnt;	/* a numeric argument */	int	cmd;	/* either 'e' or 'E' */{	REG long	l;	REG char	*text;	REG int		i;	DEFAULT(1);	l = markline(m);	pfetch(l);	text = ptext + markidx(m);	while (cnt-- > 0) /* yes, ASSIGNMENT! */	{		if (*text)			text++;		i = *text++;		/* include preceding whitespace */		while (!i || isspace(i))		{			/* did we hit the end of this line? */			if (!i)			{				/* move to next line, if there is one */				l++;				if (l > nlines)				{					return MARK_UNSET;				}				pfetch(l);				text = ptext;			}			i = *text++;		}		if (cmd == 'E')		{			/* include any non-whitespace */			while (i && !isspace(i))			{				i = *text++;			}		}		else if (isalnum(i) || i == '_')		{			/* include an alphanumeric word */			while (i && isalnum(i))			{				i = *text++;			}		}		else		{			/* include contiguous punctuation */			while (i && !isalnum(i) && !isspace(i))			{				i = *text++;			}		}		text -= 2;	}	/* construct a MARK for this place */	m = buildmark(text);	return m;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -